oracle用户权限视图小结

最近看了一下关于oracle的用户权限的相关视图,现在将自己的一点总结分享一下:

如果你想查询一个用户都有哪些权限,你可以这样做

1 登录这个用户

2 查询session_privs 视图,得到这个用户所有的系统权限。

2 查询user_tab_privs_made和user_tab_privs_recd 查询该用户的对象权限,前者为授出去的权限,后者为得到的权限,注意这些权限是不包含在角色中的权限。

3 查询user_role_privs得到该用户被授予的所有角色,如果存在非默认角色,那么你可以查询session_roles得到当前会话拥有的所有角色。

3 查询role_sys_privs和role_tab_privs分别得到角色中锁包含的所有系统权限和对象权限

注意,session_privs 查到的权限是用户所有的系统权限,是user_sys_privs的所有内容加上role_sys_privs的所有内容的集合,user_sys_privs只包含用户单独被授予的系统权限,而dba_sys_privs却包含了所有角色和用户单独被授予的系统权限,这块比较容易让人混淆。

如果以sysdba用户登录的话

1 查询dba_sys_pris,在granteez字段过滤该用户,得到该用户的非角色中的系统权限,注意dba_sys_privs包含了用户锁拥有的角色外系统权限和每个角色拥有的系统权限。

2 查询dba_tab_privs 在grantee字段过滤该用户,得到该用户非角色中的对象权限,注意dba_tab_privs包含了用户锁拥有的角色外对象权限和每个角色拥有的对象权限。

3 查询dba_role_privs 在grantee字段过滤该用户,得到该用户被赋予的所有角色,注意dba_role_privs包含了用户被授予的角色和角色间的嵌套关系。

4 查询role_sys_prvs和role_tab_privs在grantee字段过滤该用户被赋予的角色,就可以知道这些角色中包含的权限,从而知道该用户锁拥有的角色中的权限,和用户下的role_sys_privs视图和role_tab_privs不同,sysdba下的这两个视图是包含了数据库中所有的角色的,而用户下的这两个视图之包含了用户自己拥有的角色,虽然视图名称是一样的,内容却是sysdba的子集。

dba_sys_privs包含role_sys_privs的内容和单独授予用户的系统权限

在这些视图中,用户和角色的地位是相同的,如果有掐套的角色存在,那么可以逐层的按照以上方法,找到最终的权限。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值