网络通信 频道

Oracle数据库安全性之对象权限

问:PUBLIC被授予下列带有‘WITH GRANT OPTION’选项的权限:

GRANTEEOWNERTABLE_NAMEGRANTORPRIVILEGEGRANTABLE
PUBLICSYSPLAN_TABLE$SYSUPDATEYES
PUBLICSYSPLAN_TABLE$SYSINSERTYES
PUBLICSYSPLAN_TABLE$SYSDELETEYES
PUBLICSYSOLAPTABLEVELSSYSUPDATEYES
PUBLICSYSOLAPTABLEVELSSYSINSERTYES
PUBLICSYSOLAPTABLEVELSSYSDELETEYES
PUBLICSYSOLAPTABLEVELTUPLESSYSUPDATEYES
PUBLICSYSOLAPTABLEVELTUPLESSYSINSERTYES
PUBLICSYSOLAPTABLEVELTUPLESSYSDELETEYES

 

  Oracle安全指南中提到如下描述:

 

  “注:当将对象权限授予角色时,‘GRANT OPTION’选项是无效的。Oracle数据库禁止对象权限通过角色进行传播,因此角色的被授予者不能将通过角色而获得的对象权限传播出去。”

 

  如果PUBLIC被认定为角色,那么可以得出如下结论:

 

  1、在上述情况下,‘GRANT OPTION’是无效的?

 

  2、PUBLIC(系统公共用户)不能将自己获得的对象权限传播出去?

 

  答:为了回答问题,下面我们用一个实验来验证文档。

 

  首先,我们创建两个用户:USER_ABBIE和USER_BOB。另外,我们还将创建一个角色:USER_BOB_ROLE。然后,我们使用USER_ABBIE用户创建TEST_TABLE表,并将TEST_TABLE表上的SELECT权限以‘GRANT OPTION’选项授予USER_BOB_ROLE角色。

 

  实验在Oracle 10g数据库中进行;实验所使用的SQL脚本,可以在你所使用的Oracle数据库环境中使用。

 

  首先,创建用户和角色,并分配基本权限。注意:对于生产环境,我不建议以这种方式分配权限。非常好的实践是使用最小权限原则。

 

 SQL> create user USER_ABBIE identified by "For#12Testing#12Only";

 2  default tablespace USERS

 3  temporary tablespace TEMP;

 User created.

 SQL> grant CONNECT, RESOURCE to USER_ABBIE;

 Grant succeeded.

 SQL> create user USER_BOB identified by "For#345Testing#345Only";

 2  default tablespace USERS

 3  temporary tablespace TEMP;

 User created.

 SQL> grant CONNECT, RESOURCE to USER_BOB;

 Grant succeeded.

 SQL> create user USER_CHLOE identified by "For#789Testing#789Only";

 2  default tablespace USERS

 3  temporary tablespace TEMP;

 User created.

 SQL> grant CONNECT, RESOURCE to USER_CHLOE;

 Grant succeeded.

 SQL> create role USER_BOB_ROLE;

 Role created.

 

  现在,我们将为USER_ABBIE用户创建一张表,并将其SELECT权限加上‘GRANT OPTION’选项授予USER_BOB_ROLE角色。

 

SQL> conn USER_ABBIE/"For#12Testing#12Only"

 Connected.

 SQL> create table TEST_TABLE

   2  as select * from DUAL;

 Table created.

 SQL> column DUMMY format a10;

 SQL> select * from TEST_TABLE;

 DUMMY

 ----------

 X

 SQL> grant SELECT on TEST_TABLE to USER_BOB_ROLE with GRANT OPTION;

 grant SELECT on TEST_TABLE to USER_BOB_ROLE with GRANT OPTION

 *

 ERROR at line 1:

 ORA-01926: cannot GRANT to a role WITH GRANT OPTION

 

  正如你看到的,Oracle数据库抛出ORA–01926错误,防止此类情况发生!

 

  从安全角度来看,如果你没有完全理解对象访问权限是如何传播的以及其复杂程度,就使用GRANT和ADMIN选项是非常危险的。例如,撤销原先使用‘GRANT OPTION’选项分配的对象访问权限时,将级联收回所有被授予者所持有的权限。使用‘ADMIN OPTION’选项时,当授予者自身的权限被撤销时,所有它授予权限的被授予者仍将保持其授予的访问权限。当维护许多用户时,这就很容易造成不期望发生的权限授予情况。

0
相关文章