Mengambil semua hak pengguna dalam Oracle dapat berkisar dari tugas sederhana menggunakan kueri SQL dasar hingga skrip lanjutan, terutama bergantung pada bagaimana peran dan hak istimewa dikonfigurasi dalam server.
Dalam tutorial singkat ini, kami akan membahas metode kueri SQL dasar serta metode skrip lanjutan sehingga Anda tidak akan mengalami masalah terlepas dari kerumitan penyiapan Anda.
Meminta Tampilan Hak Istimewa DBA/USER
Database administrator (DBA) untuk Oracle dapat dengan mudah mengeksekusi query untuk melihat baris di DBA_SYS_PRIVS
, DBA_TAB_PRIVS
, dan DBA_ROLE_PRIVS
untuk mengambil informasi tentang hak pengguna yang terkait dengan system
, tables
, dan roles
, masing-masing.
Misalnya, DBA yang ingin melihat semua system
hak istimewa yang diberikan kepada semua pengguna akan mengeluarkan kueri berikut:
SELECT
*
FROM
DBA_SYS_PRIVS;
DBA_SYS_PRIVS
tampilan berisi tiga kolom data:
GRANTEE
adalah nama, peran, atau pengguna yang diberi hak istimewa.PRIVILEGE
adalah hak istimewa yang diberikan.ADMIN_OPTION
menunjukkan apakah hak istimewa yang diberikan juga mencakupADMIN
pilihan.
Untuk menentukan pengguna mana yang memiliki langsung berikan akses ke tables
kita akan menggunakan DBA_TAB_PRIVS
lihat:
SELECT
*
FROM
DBA_TAB_PRIVS;
Anda dapat memeriksa dokumentasi resmi untuk informasi lebih lanjut tentang kolom yang dikembalikan dari kueri ini, tetapi kolom kritis adalah:
GRANTEE
adalah nama pengguna dengan akses yang diberikan.TABLE_NAME
adalah nama objek (tabel, indeks, urutan, dll).PRIVILEGE
adalah hak istimewa yang diberikan kepadaGRANTEE
untuk objek terkait.
Terakhir, menanyakan DBA_ROLE_PRIVS
view memiliki banyak informasi yang sama tetapi berlaku untuk roles
sebagai gantinya, di mana GRANTED_ROLE
kolom menentukan peran yang dimaksud:
SELECT
*
FROM
DBA_ROLE_PRIVS;
Meminta Hak Istimewa Pengguna Saat Ini
Jika akses DBA tidak memungkinkan atau diperlukan, mungkin juga sedikit memodifikasi kueri di atas untuk melihat hak istimewa hanya untuk pengguna saat ini .
Ini dilakukan dengan menanyakan USER_
sebagai alternatif versi DBA_
di atas pandangan. Jadi, alih-alih melihat DBA_SYS_PRIVS
kami akan menanyakan USER_SYS_PRIVS
, seperti ini:
SELECT
*
FROM
USER_SYS_PRIVS;
Sejak USER_
tampilan hak istimewa secara efektif sama dengan DBA_
mereka rekanan, tetapi khusus untuk pengguna saat ini saja, jenis data yang dikembalikan dan nama kolom semuanya identik dengan yang saat menanyakan DBA_
dilihat saja.
Script Lanjutan untuk Menemukan Semua Hak Istimewa
Sementara metode di atas akan bekerja untuk konfigurasi sistem dasar, hal-hal mulai menjadi berantakan di Oracle ketika ada banyak peran yang pada gilirannya memberikan hak peran untuk peran lain, dan seterusnya di lubang kelinci. Sejak DBA_
dan USER_
tampilan hak istimewa hanya menampilkan GRANTEES
dengan ditugaskan langsung akses, seringkali hak istimewa yang diwarisi melalui peran lain tidak akan langsung ditampilkan.
Untuk mengatasi ini, disarankan untuk menggunakan skrip lanjutan seperti karya tepercaya Pete Finnigan dan find_all_privs.sql
-nya naskah. Anda juga dapat memilih versi yang dimodifikasi oleh David Arthur, find_all_privs2.sql
.
Dalam kedua kasus tersebut, tujuan skrip ini adalah untuk memungkinkan Anda secara rekursif temukan semua hak istimewa yang diberikan kepada pengguna tertentu. Saat skrip menemukan role
untuk pengguna, secara rekursif mencari peran dan hak istimewa lain yang diberikan kepada peran itu, mengulangi proses sepanjang rantai. Hasil script dapat di-output ke layar atau ke file sesuai keinginan.
Informasi lebih lanjut tentang skrip ini dan penggunaannya dapat ditemukan di petefinnigan.com.