oracle query to find priveleges on a stored procedure

一个人想着一个人 提交于 2019-12-08 15:41:44

问题


What query can I run to simply see whether a user has privelege to execute a stored procedure.

lets say user is UserA and stored procedure name is my_stored_proc

I want to know whether UserA has execute permission on my_stored_proc

UserA is not the owner of the storedproc. Some other owner grants him the permission.


回答1:


To account for grants through a role:

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



回答2:


You could try

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

This only tells you if UserA is the owner. I suppose UserA could still have permission even if not the owner. Not sure how to check for that.

EDIT: Other tables to check are

USER_SYS_PRIVS
USER_TAB_PRIVS
USER_ROLE_PRIVS
ROLE_SYS_PRIVS
ROLE_TAB_PRIVS

I've rarely queried these so I'm not exactly sure how to find what you're looking for, but I would start with these.




回答3:


Got it...

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



回答4:


This is what worked for me, I wanted to find all SPs that I have access to:

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

Columns in USER_TAB_PRIVS include GRANTEE, OWNER, GRANTOR, TABLE_NAME (in this case, the SP name) and PRIVILEGE, so in my opinion, this is perfect.

My understanding is that dpbradley and Omnipresent's answers won't work for a normal user because they can't access DBA_* tables.



来源:https://stackoverflow.com/questions/2156775/oracle-query-to-find-priveleges-on-a-stored-procedure

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!