当前位置: 首页 > news >正文

Oracle如何找出只授予了查询权限的表

Oracle如何找出只授予了查询权限的表

2025-11-04 11:52  潇湘隐者  阅读(0)  评论(0)    收藏  举报

昨天遇到了一个需求,需要找出A用户只授予了B用户查询权限的所有表. 实际情况中, A用户可能将一些表的SELECT,UPDATE, INSERT,DELETE等权限授予用户B,现在我们需要找出A用户下只授予了SELECT权限给B用户的表,那么SQL脚本如何实现呢? 这个是我当时写的一个脚本.分享如下所示:

SET LINESIZE WINDOW
COL OWNER FOR A8
COL OBJECT_NAME FOR A30
COL TYPE FOR A16
COL GRANTEE FOR A12
COL GRANTOR FOR A8
COL PRIVILEGE FOR A16
COL GRANTABLE FOR A8
SELECT T.OWNER,T.TABLE_NAME AS OBJECT_NAME,T.TYPE,T.GRANTOR,T.PRIVILEGE,T.GRANTEE,T.GRANTABLE
FROM DBA_TAB_PRIVS T
INNER JOIN (SELECT OWNER, TABLE_NAME, GRANTEE, COUNT(*) FROM  DBA_TAB_PRIVSWHERE OWNER=UPPER(TRIM('&grantor_user'))GROUP BY OWNER, TABLE_NAME, GRANTEEHAVING(COUNT(*)) =1
) L ON T.OWNER= L.OWNER AND T.TABLE_NAME= L.TABLE_NAME AND L.GRANTEE= T.GRANTEE
WHERE T.PRIVILEGE='SELECT' 
AND T.TYPE='TABLE'
AND T.GRANTEE=UPPER(TRIM('&grantee_user'));

注意:: Oracle 18c以下版本,需要用命令SET LINESIZE n 替换SET LINESIZE WINDOW. 这个命令只支持Oracle 18c或以上版本.