书城计算机数据库原理及Oracle应用
31848700000018

第18章 数据库的保护(2)

(1)修改用户默认表空间和临时表空间

修改用户的默认表空间只影响将来建立的对象,以前建立的对象仍然存放在原来的表空间上,将来建立的对象放到新的默认表空间。

例8-5 修改JOHN用户的默认表空间和临时表空间。

SQL>ALTER USER JOHN

TEMPORARY TABLESPACE TEMP

DEFAULT TABLESPACE USERSDATA

(2)控制用户账号的锁定及重置口令

在下列情况下使用ALTER USER命令修改口令和账号锁定或解锁是很有用的:

当一个用户忘记口令时需要重置口令,或人工地将一个口令设置为到期;

将被系统锁定的用户账号解锁,或显式地锁定一个用户账号。

假如用户已经登录到Oracle数据库,此时修改口令、设口令到期及锁定口令都不会影响当前的会话,这些修改只对该用户后续的会话有效。

例8-6 将JOHN用户的口令修改并且将其口令设置为到期。

SQL>ALTER USER JOHN

IDENTIFIED BY HISGRANDPA

PASSWORD EXPIRE

假如口令到期,在登录SQL*Plus时将提示用户输入一个新口令。JOHN用户必须在下次登录时修改口令。

3.删除用户

使用DROP USER命令可以从数据库中删除一个用户。假如用户拥有对象,必须指定CASCADE关键字才能删除用户,否则返回一个错误。假如指定CASCADE关键字,Oracle先删除该用户所拥有的所有对象,然后删除该用户。

删除用户的语法如下:

DROP USER 用户名[CASCADE];

例8-7 删除JOHN用户及该用户的所有对象。

SQL>DROP USER JOHN CASCADE

注意:一个当前连接到Oracle服务器的用户是不能被删除的。

4.查询用户信息

用户的信息可以从数据字典视图DBAUSERS和USERUSERS中获得。USERUSERS只显示一行当前用户的信息,DBAUSERS显示所有用户的信息。普通用户只能查询USERUSERS数据字典,只有拥有DBA权限的用户才能查询DBAUSERS数据字典。从这两个视图中可以获得用户账号状态、口令到期的日期、账号锁定的日期(假如账号被锁定)、加密的口令、默认表空间和临时表空间、用户的建立日期等信息。

例8-8 JOHN用户在登录到数据库后,执行下列命令查询自己账号的信息。

SQL>SELECT USERNAME,DEFAULTTABLESPACE,TEMPORARYTABLESPACE,

ACCOUNTSTATUS,EXPIRYDATE

FROM USERUSERS;

8.1.2.2 权限的管理

数据库中的权限可以控制对数据的访问,以及限制用户可以执行的操作。通过授予用户合适的权限,权限决定了一个用户所能访问的数据。

Oracle有两种类型的权限:系统权限和对象权限。

允许用户在数据库上执行特定操作所需要的权限称为系统权限,这些操作包括建立、删除和修改表、视图、存储过程、触发器等。系统权限没有指定任何对象。有些系统权限的功能很强大,只应该授予给可信任的用户。

允许用户访问一个特定对象并对特定对象执行特定操作所需要的权限称为对象权限。对象权限指定操作的对象可以是表、视图、存储过程函数、包等对象。对象权限可以是针对数据的读、修改、删除、增加等权限,也可以是针对程序的执行权限,或者修改对象结构的权限等。

PUBLIC是一个数据库中定义的用户组,它既不是一个数据库用户,也不是一个角色。数据库中的每一个用户都属于这个组。假如将权限授予给PUBLIC,则数据库中所有用户都拥有此权限。

1.系统权限的管理

(1)系统权限的分类

系统权限可以划分成下列三类。

允许在系统范围内操作的权限。如:CREATE SESSION、CREATE TABLESPACE等与用户无关的权限。

允许在用户自己的账号内管理对象的权限。如:CREATE TABLE等建立、修改、删除指定对象的权限。

允许在任何用户账号内管理对象的权限。如:CREATE ANY TABLE等带ANY的权限。

例如:SELECT ANY TABLE权限给了用户查询数据库中所有用户的表或视图的权力。CREATE ANY TABLE权限允许用户在任何用户账号下建表。

注意:CREATE TABLE、CREATE PROCEDURE权限包含ALTER和DROP这些对象的权限;CREATE TABLE权限包含CREATE INDEX权限,所以没有单独的CREATE INDEX权限;为了TRUNCATE一张表,必须拥有DROP ANY TABLE权限;为了连接到数据库必须拥有CREATE SESSION权限。

(2)系统权限的授予

使用GRANT命令可以将系统权限授予给一个用户、角色或PUBLIC。WITH ADMIN OPTION从句授予了受权者将此权限再授予给另一个用户、角色或PUBLIC的权力。授予系统权限的语法如下:

GRANT{系统权限|角色}[,{系统权限|角色}]……

TO{用户|角色|PUBLIC}[,{用户|角色|PUBLIC}]……

[WITH ADMIN OPTION]

其中:

PUBLIC表示将系统权限授予给数据库下的所有用户;WITH ADMIN OPTION表示允许得到权限的用户进一步将这些权限或角色授予给其他的用户或角色。

注意:给角色授权时不能带WITH ADMIN OPTION从句。

例8-9 JOHN用户希望在scott模式下建立一张表,他需要拥有CREATE ANY TABLE权限。这个权限不仅允许JOHN在scott模式下建立一张表,而且允许在任何模式下建立一张表。

SQL>GRANT CREATE ANY TABLE TO JOHN;

例8-10 希望JOHN用户将建表权限再授予给别人,在给JOHN授权时必须带WITH ADMIN OPTION从句。

SQL>GRANT CREATE ANY TABLE TO JOHN WITH ADMIN OPTION

(3)系统权限的回收

使用REVOKE命令可以从用户或角色上回收系统权限。回收系统权限的语法如下:

REVOKE{系统权限|角色}[,{系统权限|角色}]……

FROM{用户名|角色|PUBLIC}[,{用户名|角色|PUBLIC}]……

注意:假如用户A被授予带WITH ADMIN OPTION从句的系统权限,并且将此系统权限授予用户B,当用户A的权限被回收时,用户B的权限仍然保留。

例8-11 从scott用户身上回收建表和建立会话的权限。

SQL>REVOKE CREATE TABLE,CREATE SESSION FROM scott

不管在权限授予时是否带WITH ADMIN OPTION从句,一个系统权限回收时没有级联影响。

DBA将CREATE TABLE系统权限授予给USER1,授权时带WITH ADMIN OPTION从句。

USER1建立一张表。

USER1将CREATE TABLE系统权限授予给scott用户。

scott用户建立一张表。

数据库管理员DBA从USER1身上回收CREATE TABLE系统权限。

结果为:USER1的表仍然存在,但USER1不能建立任何新表;scott用户仍然拥有表和CREATE TABLE系统权限。

(4)SYSDBA和SYSOPER权限

在第4章中已经提到了系统权限SYSDBA和SYSOPER。如果用户以SYSDBA权限连接到数据库(如:CONNECT/AS SYSDBA),就授予用户无限的权限,允许用户在数据库中执行任何操作,或者对数据库中的对象执行任何操作。

(5)查询系统权限信息

查询数据字典视图DBASYSPRIVS可显示数据库中所有用户或角色所拥有的系统权限,以及授予权限时是否带有WITH ADMIN OPTION从句。查询USERSYSPRIVS视图可显示当前用户所拥有的系统权限,以及授予权限时是否带有WITH ADMIN OPTION从句。

例8-12 查询所有用户或角色所拥有的系统权限。

SQL>SELECT*FROM DBASYSPRIVS

查询数据字典视图V$PWFILEUSERS可以了解所有被授予SYSDBA和SYSOPER系统权限的用户信息。SYSDBA列的值为TRUE时表示用户被授予SYSDBA系统权限,SYSOPER列的值为TRUE时表示用户被授予SYSOPER系统权限。

例8-13 查询拥有SYSDBA和SYSOPER系统权限的用户信息。

SQL>SELECT*FROM V$PWFILEUSERS

查询结果如下:

USERNAME SYSDBA SYSOPER

——

SYS TRUE TRUE

2.对象权限的管理

(1)对象权限的分类

对象权限是对一个特定对象进行操作所需要的权限。一个对象的拥有者拥有对对象的所有权限。对象拥有者可以将对象上的权限授予给数据库的其他用户。对每一类对象可以授予的对象权限可分为9类。对象不同,在此对象上可以操作的权限也不同。其中打“√”符号的表示该类对象上有这种操作权限,空表示该类对象上没有这种操作权限。

(2)对象权限的授予

授予对象权限的语法如下:

GRANT{对象权限[(列名1[,列名2……])]

[,对象权限[(列名1[,列名2……])]]……|ALL[PRIVILEGES]}

ON 对象名

TO{用户名|角色名|PUBLIC}[,{用户名|角色名|PUBLIC}]……

[WITH GRANT OPTION]

其中:

对象权限指需要被授予的对象权限。

列名1、2用于指定表或视图中的列名(只有在授予INSERT,REFERENCES,UPDATE权限时才能指定列名)。

ALL用于授予对象上的所有权限,并且带WITH GRANT OPTION从句。

ON 对象名用于指定被操作的对象名。

WITH GRANT OPTION用于允许受权者将对象权限授予其他用户或角色。给角色授权时不能带WITH GRANT OPTION从句。

例8-14 SYS用户将DBMSPIPE包上的执行权限授予给数据库中所有用户。

SQL>GRANT EXECUTE ON DBMSPIPE TO PUBLIC;

例8-15 USER1用户将emp表上ENAME、SAL列上的更新权限授予给scott用户,并且允许scott用户再将此更新权限授予给其他用户或角色。

SQL>GRANT UPDATE(ENAME,SAL)ON emp TO scott WITH GRANT OPTION;

注意:假如用户拥有一个对象,自动地获得了该对象的所有权限。对象拥有者可以将自己对象的操作权授予给别人。