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

日期: 2011-07-12 作者:Brian Fedorko翻译:孙瑞 来源:TechTarget中国 英文

问:PUBLIC被授予下列带有‘WITH GRANT OPTION’选项的权限: GRANTEEOWNERTABLE_NAMEGRANTORPRIVILEGEGRANTABLEPUBLICSYSPLAN_TABLE$SYSUPDATEYESPUBLICSYSPLAN_TABLE$SYSINSERTYESPUBLICSYSPLAN_TABLE$SYSDELETEYESPUBLICSYSOLAPTABLEVELSSYSUPDATEYESPUBLICSYSOLAPTABLEVELSSYSINSERTYESPUBLICSYSOLAPTABLEVELSSYSDELETEYESPUBLICSYSOLAPT……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

问: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’选项时,当授予者自身的权限被撤销时,所有它授予权限的被授予者仍将保持其授予的访问权限。当维护许多用户时,这就很容易造成不期望发生的权限授予情况。

  最佳实践:将不带GRANT / ADMIN选项的权限直接分配给角色,然后将这些角色分配给指定的用户。

翻译

孙瑞
孙瑞

相关推荐