Dapatkah seseorang memberi tahu saya cara menampilkan semua hak istimewa / aturan dari pengguna tertentu di konsol-sql?
sumber
Dapatkah seseorang memberi tahu saya cara menampilkan semua hak istimewa / aturan dari pengguna tertentu di konsol-sql?
Anda dapat mencoba tampilan di bawah ini.
SELECT * FROM USER_SYS_PRIVS;
SELECT * FROM USER_TAB_PRIVS;
SELECT * FROM USER_ROLE_PRIVS;
DBA dan power user lainnya dapat menemukan hak istimewa yang diberikan kepada pengguna lain dengan DBA_
versi tampilan yang sama ini. Mereka tercakup dalam dokumentasi .
Tampilan tersebut hanya menunjukkan hak istimewa yang diberikan langsung kepada pengguna. Menemukan semua hak istimewa, termasuk yang diberikan secara tidak langsung melalui peran, membutuhkan pernyataan SQL rekursif yang lebih rumit:
select * from dba_role_privs connect by prior granted_role = grantee start with grantee = '&USER' order by 1,2,3;
select * from dba_sys_privs where grantee = '&USER' or grantee in (select granted_role from dba_role_privs connect by prior granted_role = grantee start with grantee = '&USER') order by 1,2,3;
select * from dba_tab_privs where grantee = '&USER' or grantee in (select granted_role from dba_role_privs connect by prior granted_role = grantee start with grantee = '&USER') order by 1,2,3,4;
Ada berbagai skrip yang beredar yang akan melakukan itu tergantung pada seberapa gila Anda ingin mendapatkannya. Saya pribadi akan menggunakan skrip find_all_privs Pete Finnigan .
Jika Anda ingin menulisnya sendiri, kueri akan menjadi agak menantang. Pengguna dapat diberikan hak istimewa sistem yang terlihat di DBA_SYS_PRIVS
. Mereka dapat diberikan hak istimewa objek yang terlihat di DBA_TAB_PRIVS
. Dan mereka dapat diberikan peran yang terlihat di DBA_ROLE_PRIVS
(peran dapat default atau non-default dan dapat memerlukan sandi juga, jadi hanya karena pengguna telah diberikan peran tidak berarti bahwa pengguna dapat menggunakan hak istimewa yang dia miliki. diperoleh melalui peran secara default). Tapi peran-peran dapat, pada gilirannya, menjadi hak istimewa yang diberikan sistem, hak istimewa objek, dan peran tambahan yang dapat dilihat dengan melihat ROLE_SYS_PRIVS
, ROLE_TAB_PRIVS
dan ROLE_ROLE_PRIVS
. Skrip Pete menelusuri hubungan tersebut untuk menunjukkan semua hak istimewa yang akhirnya mengalir ke pengguna.
SYS
hak istimewa dan hanya ingin melihat keistimewaan akun kita sendiri, skrip ini sama sekali tidak berharga. Saya tidak memiliki akses keUTL_FILE
atau untukDBA_SYS_PRIVS
dan lainnyaDBA
danSYS
daerah script terlihat di.ROLE_SYS_PRIVS
,ROLE_TAB_PRIVS
danROLE_ROLE_PRIVS
kebutuhan untuk diperiksa. Dokumen menunjukkan bahwa mereka untuk pengguna saat ini .Sumber daya berguna lainnya:
http://psoug.org/reference/roles.html
sumber
DBA
atauSYS
, dan Anda hanya ingin mencari hak istimewa akun Anda sendiri.Meskipun jawaban Raviteja Vutukuri berfungsi dan cepat disatukan, itu tidak terlalu fleksibel untuk memvariasikan filter dan tidak terlalu membantu jika Anda ingin melakukan sesuatu secara terprogram. Jadi saya mengumpulkan kueri saya sendiri:
Keuntungan:
WHERE
klausa itu.DBMS_OUTPUT
atau sesuatu (dibandingkan dengan skrip terkait Pete Finnigan). Ini membuatnya berguna untuk penggunaan terprogram dan untuk mengekspor.GRANT
.sumber
USER_SYS_PRIVS
(hak istimewa sistem yang diberikan secara langsung),USER_TAB_PRIVS
(hak pribadi objek yang diberikan secara langsung)USER_ROLE_PRIVS
(peran yang diberikan langsung oleh pengguna),ROLE_ROLE_PRIVS
(untuk mendapatkan peran yang diwariskan),ROLE_SYS_PRIVS
(privasi sistem melalui peran) danROLE_TAB_PRIVS
(privasi objek melalui peran). Ugh. Oracle sangat rumit.Anda dapat menggunakan kode di bawah ini untuk mendapatkan semua daftar hak istimewa dari semua pengguna.
sumber
Untuk menampilkan semua hak istimewa:
sumber