我可以运行什么查询来查看用户是否具有执行存储过程的权限。
假设用户为UserA
,存储过程名称为my_stored_proc
我想知道UserA
是否具有my_stored_proc
UserA不是storedproc的所有者。其他一些所有者授予他许可。
答案 0 :(得分:12)
通过角色考虑补助:
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'
)
)
答案 1 :(得分: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
我很少询问这些,所以我不确定如何找到你想要的东西,但我会从这些开始。
答案 2 :(得分:2)
得到了......
SELECT * FROM DBA_TAB_PRIVS A WHERE GRANTEE = 'UserA' AND GRANTOR = 'someoneelse' and privilege = 'EXECUTE'
答案 3 :(得分:0)
这对我有用,我想找到我可以访问的所有SP:
从USER_TAB_PRIVS中选择*,其中GRANTEE ='______'和PRIVILEGE ='EXECUTE'
USER_TAB_PRIVS中的列包括GRANTEE,OWNER,GRANTOR,TABLE_NAME(在这种情况下为SP名称)和PRIVILEGE,所以我认为这很完美。
我的理解是dpbradley和Omnipresent的答案不适用于普通用户,因为他们无法访问DBA_ *表。