oracle - daftar pengguna dengan akses ke tabel tertentu

28

Saya yakin ini telah ditanyakan sebelumnya, tetapi sepertinya saya tidak dapat menemukan detail yang relevan untuk yang berikut.

Apakah ada semacam tabel pre-built yang dapat melakukan hal berikut (Saya telah menggunakan dba_tab_privs tetapi terbatas dan tidak memenuhi semua kebutuhan saya), jika tidak ada yang punya pertanyaan untuk menjawab yang berikut?

  1. Daftar semua pengguna yang telah diberi peran tertentu?
  2. Daftar semua peran yang diberikan kepada pengguna?
  3. Daftar semua hak istimewa yang diberikan kepada pengguna?
  4. Daftar tabel mana peran tertentu memberikan akses SELECT?
  5. Buat daftar semua tabel yang bisa dipilih oleh pengguna?
  6. Sebutkan semua pengguna yang dapat PILIH di atas meja tertentu (baik melalui diberi peran yang relevan atau melalui hibah langsung (yaitu, pilih hibah yang dapat diubah ke joe))? Hasil dari kueri ini juga harus menunjukkan melalui peran mana pengguna memiliki akses ini atau apakah itu hibah langsung.
dgf
sumber

Jawaban:

33

Daftar semua pengguna yang telah diberi peran tertentu

-- Change 'DBA' to the required role
select * from dba_role_privs where granted_role = 'DBA'

Daftar semua peran yang diberikan kepada pengguna

-- Change 'PHIL@ to the required user
select * from dba_role_privs where grantee = 'PHIL';

Daftar semua hak istimewa yang diberikan kepada pengguna

select
  lpad(' ', 2*level) || granted_role "User, his roles and privileges"
from
  (
  /* THE USERS */
    select 
      null     grantee, 
      username granted_role
    from 
      dba_users
    where
      username like upper('%&enter_username%')
  /* THE ROLES TO ROLES RELATIONS */ 
  union
    select 
      grantee,
      granted_role
    from
      dba_role_privs
  /* THE ROLES TO PRIVILEGE RELATIONS */ 
  union
    select
      grantee,
      privilege
    from
      dba_sys_privs
  )
start with grantee is null
connect by grantee = prior granted_role;

Catatan: Diambil dari http://www.adp-gmbh.ch/ora/misc/recursively_list_privilege.html

Daftar tabel mana peran tertentu memberikan akses SELECT?

-- Change 'DBA' to the required role.
select * from role_tab_privs where role='DBA' and privilege = 'SELECT';

Buat daftar semua tabel yang bisa dipilih oleh pengguna?

--Change 'PHIL' to the required user
select * from dba_tab_privs where GRANTEE ='PHIL' and privilege = 'SELECT';

Sebutkan semua pengguna yang dapat PILIH di atas meja tertentu (baik melalui diberi peran yang relevan atau melalui hibah langsung (yaitu, pilih hibah yang dapat diubah ke joe))? Hasil dari kueri ini juga harus menunjukkan melalui peran mana pengguna memiliki akses ini atau apakah itu hibah langsung.

-- Change 'TABLENAME' below
select Grantee,'Granted Through Role' as Grant_Type, role, table_name
from role_tab_privs rtp, dba_role_privs drp
where rtp.role = drp.granted_role
and table_name = 'TABLENAME' 
union
select Grantee,'Direct Grant' as Grant_type, null as role, table_name
from dba_tab_privs
where table_name = 'TABLENAME' ;
Philᵀᴹ
sumber
Ini adalah awal yang baik, tetapi # 3 tidak termasuk hak objek, # 5 tidak termasuk SELECThak yang tersedia karena peran dan # 6 tidak ada.
Leigh Riffel
Opps, butuh CONNECT BY .. SEBELUMNYA untuk # 6
Philᵀᴹ
Apakah jawaban Anda untuk # 5 menyertakan tabel yang dapat dipilih pengguna melalui peran yang telah ditentukan?
dgf
Apakah ini berfungsi jika pengguna mendapatkan hak istimewa dari peran yang diberikan peran lain?
jpmc26
2

Ada banyak cara untuk mendapatkan informasi yang ingin Anda gunakan:

tampilan kamus data

hadir di oracle.

Anda bisa menanyakan tampilan dan mengambil detailnya: Misalnya:

pilih * dari DBA_COL_PRIVS;

pilih * dari ALL_COL_PRIVS;

pilih * dari USER_COL_PRIVS;

Ini memberitahu Anda:

Tampilan DBA menggambarkan semua objek hibah kolom dalam database. SEMUA tampilan menjelaskan semua objek hibah kolom yang pengguna saat ini atau PUBLIC adalah pemilik objek, pemberi, atau penerima. Tampilan USER menguraikan hibah objek kolom yang pengguna saat ini adalah pemilik objek, pemberi, atau penerima.

Untuk info lebih lanjut, lihat ini

Semoga ini membantu.

Vimalnath
sumber
1
Ini sepertinya tidak menjawab pertanyaan: bagaimana DBA menemukan apa yang dapat diakses oleh pengguna sewenang-wenang tertentu?
Jon of All Trades