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:
GRANTEEadalah nama, peran, atau pengguna yang diberi hak istimewa.PRIVILEGEadalah hak istimewa yang diberikan.ADMIN_OPTIONmenunjukkan apakah hak istimewa yang diberikan juga mencakupADMINpilihan.
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:
GRANTEEadalah nama pengguna dengan akses yang diberikan.TABLE_NAMEadalah nama objek (tabel, indeks, urutan, dll).PRIVILEGEadalah hak istimewa yang diberikan kepadaGRANTEEuntuk 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.