Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Cara Menampilkan Semua Keistimewaan Database Oracle untuk Pengguna

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 mencakup ADMIN 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 kepada GRANTEE 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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pernyataan FORALL Dengan Klausa Terikat INDICES-OF Dalam Database Oracle

  2. EKSPOR SEBAGAI PERNYATAAN MASUKKAN:Tetapi dalam SQL Plus, baris menimpa 2500 karakter!

  3. Kesalahan ORA-00932 saat menggunakan pilih dengan bidang gabungan dan CLOB

  4. JDBC mengembalikan set hasil kosong

  5. bagaimana cara menggabungkan lebih dari dua kolom di pengembang plsql?