2010-01-28 49 views
9

我可以运行什么查询来简单查看用户是否有权执行存储过程。oracle查询以查找存储过程的优势

可以说用户UserA和存储过程的名称是my_stored_proc

我想知道UserA是否对my_stored_proc

用户A执行权限是不storedproc的所有者。其他一些所有者授予他许可。

回答

10

要通过角色占助学金:

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' 
      ) 
     ) 
3

你可以尝试

select ap.* 
from All_Procedures ap 
where ap.owner = 'UserA' 

这只是告诉你,如果用户A是所有者。即使不是所有者,我想UserA仍然可以获得许可。不知道如何检查。

编辑: 其他表检查的

USER_SYS_PRIVS 
USER_TAB_PRIVS 
USER_ROLE_PRIVS 
ROLE_SYS_PRIVS 
ROLE_TAB_PRIVS

我很少质疑这些,所以我不完全知道如何找到你要找的东西,但我会用这些启动。

+0

耶那我的情况。他不是主人。一些所有者授予他许可。 – Omnipresent 2010-01-28 18:21:22

2

明白了...

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

好,除非拨款通过角色 – dpbradley 2010-01-28 18:39:53