2010-01-28 5 views
9

Welche Abfrage kann ausgeführt werden, um einfach zu sehen, ob ein Benutzer privelege zum Ausführen einer gespeicherten Prozedur hat.Orakelabfrage zum Finden von Privilegien in einer gespeicherten Prozedur

können sagen Benutzer UserA und Name der gespeicherten Prozedur ist my_stored_proc

Ich möchte wissen, ob UserA Ausführungsberechtigung hat auf my_stored_proc

UserA ist nicht der Besitzer des storedproc. Ein anderer Besitzer gewährt ihm die Erlaubnis.

Antwort

10

Um Zuschüsse durch eine Rolle Konto:

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

könnten Sie

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

Diese Sie sagt, wenn UserA der Besitzer ist. Ich nehme an, UserA könnte immer noch Erlaubnis haben, auch wenn nicht der Besitzer. Ich bin mir nicht sicher, wie ich das überprüfen soll.

EDIT: Andere Tabellen zu überprüfen sind

USER_SYS_PRIVS 
USER_TAB_PRIVS 
USER_ROLE_PRIVS 
ROLE_SYS_PRIVS 
ROLE_TAB_PRIVS

ich selten habe abgefragt diese so bin ich nicht sicher, wie genau zu finden, was Sie suchen, aber ich würde mit dieser Start .

+0

ja das ist mein Fall. Er ist nicht der Besitzer. irgendein Eigentümer gewährt ihm die Erlaubnis. – Omnipresent

2

Verstanden ...

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

gut, es sei denn, Zuschüsse sind durch eine Rolle – dpbradley

Verwandte Themen