PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bagaimana saya bisa meninjau semua database dan hibah objek untuk suatu peran?

Kolom relacl dari katalog sistem pg_class berisi semua informasi tentang hak istimewa.

Contoh data dalam skema public dimiliki oleh postgres dengan hibah untuk newuser :

create table test(id int);
create view test_view as select * from test;

grant select, insert, update on test to newuser;
grant select on test_view to newuser;

Membuat kueri pg_class :

select 
    relname, 
    relkind, 
    coalesce(nullif(s[1], ''), 'public') as grantee, 
    s[2] as privileges
from 
    pg_class c
    join pg_namespace n on n.oid = relnamespace
    join pg_roles r on r.oid = relowner,
    unnest(coalesce(relacl::text[], format('{%s=arwdDxt/%s}', rolname, rolname)::text[])) acl, 
    regexp_split_to_array(acl, '=|/') s
where nspname = 'public'
and relname like 'test%';

  relname  | relkind | grantee  | privileges 
-----------+---------+----------+------------
 test      | r       | postgres | arwdDxt      <- owner postgres has all privileges on the table
 test      | r       | newuser  | arw          <- newuser has append/read/write privileges
 test_view | v       | postgres | arwdDxt      <- owner postgres has all privileges on the view
 test_view | v       | newuser  | r            <- newuser has read privilege
(4 rows)

Komentar:

  • coalesce(relacl::text[], format('{%s=arwdDxt/%s}', rolname, rolname)) - Null di relacl berarti pemilik memiliki semua hak istimewa;
  • unnest(...) acl - relacl adalah larik aclitem , satu elemen larik untuk pengguna;
  • regexp_split_to_array(acl, '=|/') s - pisahkan aclitem menjadi:s[1] nama pengguna, s[2] hak istimewa;
  • coalesce(nullif(s[1], ''), 'public') as grantee - nama pengguna kosong berarti public .

Ubah kueri untuk memilih pengguna individu atau jenis hubungan tertentu atau skema lain, dll...

Baca di dokumentasi:

Dengan cara yang sama, Anda bisa mendapatkan informasi tentang hak istimewa yang diberikan pada skema (kolom nspacl di pg_namespace ) dan database (datacl di pg_database )



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. RangeError untuk penetapan bilangan bulat sederhana di Rails 4.2.0 yang harus ditangkap oleh validasi

  2. Menyederhanakan kueri dengan LIMIT dalam subkueri dan klausa WHERE diduplikasi dalam subkueri dan kueri luar

  3. Proses eksekusi fungsi Postgresql

  4. Spring Boot - Repositori yang sama dan entitas yang sama untuk database yang berbeda

  5. postgres mendeteksi pola berulang dari nol