2010-01-28 39 views
9

Tôi có thể chạy truy vấn nào để chỉ xem liệu người dùng có yêu cầu thực hiện một thủ tục được lưu trữ hay không.truy vấn oracle để tìm priveleges trên một thủ tục được lưu trữ

cho phép nói rằng người dùng là UserA và tên thủ tục lưu trữ là my_stored_proc

Tôi muốn biết liệu UserA có quyền thực thi trên my_stored_proc

UserA không phải là chủ sở hữu của storedproc. Một số chủ sở hữu khác cấp cho anh ta sự cho phép.

Trả lời

10

Để giải thích cho các khoản tài trợ thông qua một vai trò:

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

Bạn có thể thử

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

này chỉ cho bạn biết nếu UserA là chủ sở hữu. Tôi cho rằng UserA vẫn có thể được phép ngay cả khi không phải là chủ sở hữu. Bạn không chắc chắn cách kiểm tra điều đó.

EDIT: bảng khác để kiểm tra được

USER_SYS_PRIVS 
USER_TAB_PRIVS 
USER_ROLE_PRIVS 
ROLE_SYS_PRIVS 
ROLE_TAB_PRIVS

Tôi đã hiếm khi truy vấn này vì vậy tôi không chắc chắn chính xác làm thế nào để tìm thấy những gì bạn đang tìm kiếm, nhưng tôi sẽ bắt đầu với những .

+0

vâng thats trường hợp của tôi. anh ta không phải là chủ nhân. một số chủ sở hữu cấp cho anh ta sự cho phép. – Omnipresent

2

Got it ...

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

tốt trừ khi khoản tài trợ thông qua vai trò – dpbradley

Các vấn đề liên quan