Cara daftar semua pengguna yang memiliki hibah atas paket

9

Saya sedang mencari beberapa permintaan untuk mendaftar semua pengguna yang memiliki hibah lebih dari satu paket.

Misalnya, pengguna Schema_A telah diberikan untuk menjalankan paket: B.MyPackage.

Saya meminta tampilan atau tabel seperti: role_tab_privs, role_sys_privs, sys.dba_sys_privs, dba_role_privs ... tapi saya tidak dapat menemukan apa yang saya cari.

Delmonte
sumber

Jawaban:

15

Jika hak istimewa telah diberikan secara langsung atau ke suatu peran, hibah akan muncul di DBA_TAB_PRIVS

SELECT grantee, privilege
  FROM dba_tab_privs
 WHERE owner = 'B'
   AND table_name = 'MYPACKAGE'
   AND privilege = 'EXECUTE'

Jika granteeperan adalah, maka Anda perlu melihat dba_role_privsuntuk melihat apa pengguna (atau peran) telah diberikan peran itu dan mengikuti rantai jika Anda memiliki peran yang diberikan kepada peran lain. Jika Anda perlu memperhitungkan pengguna yang memiliki hibah karena hibah (sangat berbahaya) ANY(yaitu EXECUTE ANY PROCEDURE), itu akan memerlukan kueri terpisah.

Namun, jika Anda ingin menjadi lebih canggih daripada sekadar melakukan query langsung dba_tab_privs, Anda mungkin lebih baik menggunakan skrip Pete Finnigan seperti who_has_priv.sql(atau who_has_priv_procedure.sql). Pete mungkin adalah pakar terkemuka dalam keamanan Oracle, jadi ini jauh lebih mungkin untuk memperhitungkan setiap kasus sudut yang mungkin daripada apa pun yang saya coba gabungkan bersama.

Gua Justin
sumber