Oracle权限

(一)权限分为多个domain(系统与对象权限均是)
通过授予role, 再把role授予user,这就产生了2个domain:
user domain权限与role domain权限,因为是不同domain,所以在查看用户权限dba_sys_privs是不包含role所授予的权限的,同时revoke不能单独收回role domain的权限的

role同时又可以授予role,如把role2授予role1, 这时把role1授予user, 这时称role2为indirectly grant role
此时user将同时具有role1与role2的权限,但这实现又产生了两个domain,即从dba_role_privs 只能查到user被授予了role1而查不到被授予了role2, 要再通过ROLE_ROLE_PRIVS查

注:不能循环授予,如role3授予role2,role2授予role1,而role1又授予role3
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
所以在看用户包含哪些权限时需要把所有doman均查询:
查看某个用户的权限:
1. 系统权限:
select * from dba_sys_privs where grantee='PUBLIC';    ---每个用户都有public权限,public默认包含一些对象权限,这里只需确认下public没有系统权限
第一层:select * from dba_sys_privs t  where t.grantee='SCOTT';  
第二层:select * from dba_role_privs where grantee='SCOTT';
      select *  from dba_sys_privs  where grantee= 'DBA' ; 
      select *  from dba_sys_privs  where grantee= 'RESOURCE' ;
      select *  from dba_sys_privs  where grantee= 'CONNECT' ;
第三层:select granted_role from role_role_privs where role='DBA';
             select granted_role from role_role_privs where role='RESOURCE';
             select granted_role from role_role_privs where role='CONNECT';
         select *  from dba_sys_privs  where grantee= 'xxxx' ; 
         select *  from dba_sys_privs  where grantee= 'xxxx' ;
         select *  from dba_sys_privs  where grantee= 'xxxx' ;
第四层: ....
把上面权限综合才为用户的所有系统权限,不同层次的权限不能单独revoke
简单的方法是使用此用户登陆查看:select * from  session_privs;     --它不分角色和权限,会列出所有具体权限

2. 对象权限:因为对象权限也可以授予role, 所以查询顺序同上:
select * from dba_tab_privs where grantee='PUBLIC';   
第一层:  select * from dba_tab_privs t  where t.grantee='SCOTT';  
第二层:select * from dba_role_privs where grantee='SCOTT';
     select *  from dba_tab_privs  where grantee= 'DBA' ; 
     select *  from dba_tab_privs  where grantee= 'RESOURCE' ; 
     select *  from dba_tab_privs  where grantee= 'CONNECT' ;
第三层:select granted_role from role_role_privs where role='DBA';
             select granted_role from role_role_privs where role='RESOURCE';
             select granted_role from role_role_privs where role='CONNECT';
         select *  from dba_tab_privs  where grantee= 'xxxx' ; 
         select *  from dba_tab_privs  where grantee= 'xxxx' ;
         select *  from dba_tab_privs  where grantee= 'xxxx' ;
第四层: ....
把上面权限综合才为用户的所有对象权限


(二)dependent
为成功执行一些DDL操作,你可能需要授予多个权限
如授予了create table或create any table,你就能创建表了,但如果只有create view或create any view权限,并不能创建视图,还需要相关表的select权限
为了避免上面DDL的权限依赖关系导致ROLE间的依赖,oracle对了如下限制:
1)如果执行DDL的全部权限都包含在同一role下,则用户可以执行DDL
2)如果执行DDL的部分权限包含在一个role下,另一部分被直接授予了user,则用户可以执行DDL
3) 如果执行DDL的部分权限包含在一个role下,另一部分包含在另一role下,则用户无法执行DDL

示例:
user被直接授予了select departments表权限,授予了role1(包含create view权限),授予了role2(包含select empoloyees表),则此时
1)用户可以访问departments及empoloyees表
2)用户无法创建empoloyees表的视图,但可以创建departments表视图
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值