Nếu đặc quyền đã được cấp trực tiếp hoặc cho một vai trò, khoản tài trợ sẽ xuất hiện trong DBA_TAB_PRIVS
SELECT grantee, privilege
FROM dba_tab_privs
WHERE owner = 'B'
AND table_name = 'MYPACKAGE'
AND privilege = 'EXECUTE'
Nếu đó grantee
là một vai trò, thì bạn cần phải xem xét dba_role_privs
xem người dùng (hoặc vai trò) nào đã được cấp vai trò đó và tuân theo chuỗi nếu bạn có vai trò được cấp cho các vai trò khác. Nếu bạn cần tính đến những người dùng có trợ cấp vì các khoản trợ cấp (rất nguy hiểm) ANY
(nghĩa là EXECUTE ANY PROCEDURE
), điều đó sẽ yêu cầu một truy vấn riêng.
Tuy nhiên, nếu bạn muốn trở nên tinh vi hơn chỉ đơn giản là thực hiện một truy vấn thẳng dba_tab_privs
, thì có lẽ bạn nên sử dụng các tập lệnh của Pete Finnigan như who_has_priv.sql
(hoặc who_has_priv_procedure.sql
). Pete có lẽ là chuyên gia hàng đầu về bảo mật của Oracle, vì vậy những điều này có nhiều khả năng giải thích cho mọi trường hợp có thể xảy ra hơn bất kỳ điều gì tôi sẽ cố gắng để cùng nhau giải quyết.