在Oracle中查找存储过程的权限的查询

12

我应该运行什么查询来简单地查看用户是否具有执行存储过程的权限。

假设用户是UserA,而存储过程的名称是my_stored_proc

我想知道UserA是否对my_stored_proc具有执行权限。

UserA不是存储过程的所有者,某个其他所有者授予了他权限。

4个回答

13
为了考虑通过角色的授权:

要考虑到通过角色的授权:

  select grantee, table_name, privilege
     from dba_tab_privs
     where
       table_name = 'my_stored_proc'
        and 
       owner = 'ownerOfObject'
       and
       (grantee = 'userA'
         or
         grantee in
          (select granted_role
        from dba_role_privs
        where grantee = 'userA'
           )
        )

4
你可以尝试:
select ap.*
from All_Procedures ap
where ap.owner = 'UserA'

这只告诉你UserA是否是所有者。我想即使不是所有者,UserA仍然可能有权限。不确定如何检查。

编辑: 其他要检查的表包括

USER_SYS_PRIVS
USER_TAB_PRIVS
USER_ROLE_PRIVS
ROLE_SYS_PRIVS
ROLE_TAB_PRIVS

我很少查询这些表,所以我不确定如何找到您要查找的内容,但我会从这些开始。


是的,那就是我的情况。他不是所有者,只是被授权使用。 - Omnipresent

2

明白了...

SELECT * FROM DBA_TAB_PRIVS A WHERE GRANTEE = 'UserA' AND GRANTOR = 'someoneelse' and privilege = 'EXECUTE'

0

这是我使用的方法,我想找到所有我有权限访问的存储过程:

select * from USER_TAB_PRIVS where GRANTEE='______' and PRIVILEGE='EXECUTE'

USER_TAB_PRIVS 中包括 GRANTEE、OWNER、GRANTOR、TABLE_NAME(在本例中为 SP 名称)和 PRIVILEGE 列,所以我认为这是完美的。

我的理解是 dpbradley 和 Omnipresent 的答案对于普通用户不起作用,因为他们无法访问 DBA_* 表。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接