Cách liệt kê tất cả người dùng có tài trợ qua một gói


9

Tôi đang tìm kiếm một số truy vấn để liệt kê tất cả người dùng có tài trợ qua một gói.

Ví dụ: người dùng Schema_A đã được cấp để thực thi gói: B.MyPackage.

Tôi đang truy vấn các chế độ xem hoặc bảng như: role_tab_privs, role_sys_privs, sys.dba_sys_privs, dba_role_privs ... nhưng tôi không thể tìm thấy những gì tôi đang tìm kiếm.

Câu trả lời:


15

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 đó granteelà một vai trò, thì bạn cần phải xem xét dba_role_privsxem 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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.