Q
Oracle权限
2
A
回答
2
我认为这应该让你几乎所需。 ALL_TAB_PRIVS可用于数据库中的所有用户,并列出执行SELECT的用户拥有权限的所有对象,权限是什么以及授予谁的权限。我已将它加入到另一个视图ROLE_TAB_PRIVS中,以查找授予用户特权的角色(如果有的话)。如果用户通过角色和直接授权获得了权限,则列出这两个权限。
SELECT atp.grantor, atp.privilege,
CASE WHEN NVL(rtp.role,'NULL') <> atp.grantee THEN atp.grantee
ELSE atp.grantee||' (ROLE)'
END grantee, atp.table_name
FROM all_tab_privs atp LEFT JOIN role_tab_privs rtp
ON (atp.table_name = rtp.table_name AND
atp.table_schema = rtp.owner)
WHERE grantor <> 'SYS' /* Optional - filter out SYS owned objects */
UNION ALL
SELECT owner, 'SELECT' /* Assume SELECT */, NULL, view_name||' (VIEW)'
FROM all_views
WHERE owner <> 'SYS' /* Optional - filter out SYS owned views */
ORDER BY 1,3;
编辑:
ALL_TAB_PRIVS是有点用词不当,因为它包括PL/SQL可执行对象以及。
编辑2:
看来,这留下了意见。您可以将all_views结果与上述查询结合起来,以提供您有权访问的所有视图,但我现在还不确定如何向您提供授予视图的确切权限。
一句警告:包括您有权访问的所有SYS对象会给您一个相当庞大的列表。您可能希望过滤掉属于SYS的对象,如我在此处所示。
0
这应该让你想要你想要的,但只适用于该用户。
select username
, 'ROL' type
, granted_role pv
from user_role_privs
union
select username
, 'PRV' type
, privilege pv
from user_sys_privs
union
select grantee as username
, 'OBJ' type,
regexp_replace(max(decode(privilege,'WRITE','WRITE,'))||
max(decode(privilege,'READ','READ,'))||
max(decode(privilege,'EXECUTE','EXECUTE')),'WRITE,READ,EXECUTE','ALL')||
regexp_replace(max(decode(privilege,'SELECT','SELECT'))||
max(decode(privilege,'DELETE',',DELETE'))||
max(decode(privilege,'UPDATE',',UPDATE'))||
max(decode(privilege,'INSERT',',INSERT')),'SELECT,DELETE,UPDATE,INSERT','ALL')||
' ON '||object_type||' "'||a.owner||'"."'||table_name||'"' pv
from user_tab_privs a
, all_objects b
where a.table_name = b.object_name
and a.owner=b.owner
group by a.owner
, table_name
, object_type
, grantee
union
select grantee AS username
, 'COL' type,
privilege||' ('||column_name||') ON "'||owner||'"."'||table_name||'"' pv
from user_col_privs
where grantee=:usercheck
order by 1
, type
, pv;
相关问题
- 1. Oracle创建过程权限?
- 2. 授予Oracle授予权限
- 3. Oracle触发器权限
- 4. SSIS打破Oracle权限
- 5. ORACLE表上的权限
- 6. Oracle权限授予SQl Plus
- 7. Oracle - 授予用户权限
- 8. Oracle 10g权限被吊销
- 9. 如何授予在Oracle中授予权限的权限
- 10. 外部表的ORACLE目录权限
- 11. 检查Oracle中目录的权限
- 12. Oracle PL/SQL调试权限影响
- 13. Oracle 9i统计作业的权限
- 14. Oracle对DBA_ROLES的选择权限
- 15. 添加FK限制(Oracle)时权限不足
- 16. 权限有限
- 17. 权限有限
- 18. 授权与权限
- 19. Django权限隐藏“auth |权限”
- 20. 关于Android权限的问题权限
- 21. Android系统根权限权限
- 22. Oracle表格授权
- 23. 限制在Oracle
- 24. 使用Oracle设置WSO2 GREG:对dbgreg用户的权限
- 25. 如何在Oracle上获取此数据权限配置?
- 26. Oracle数据库中的表触发器的多模式权限
- 27. Oracle DBA权限是否包含“CREATE ANY TABLE”角色?
- 28. Oracle新创建的用户权限问题?
- 29. 在Oracle中授予“创建目录”权限
- 30. 新的Oracle模式(10g)所需的权限
这似乎没有显示我已通过角色授予访问权限的对象,只显示了我被授予访问权限的角色。 – DCookie 2011-05-13 18:18:31
尝试运行查询并使用角色名称作为:usercheck。这是我使用dba *表的一个脚本的修改。对于有限的用户,您受限于您可以看到的内容,如dba _ * _ privs tables/views。 – 2011-05-13 21:40:06