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

Cari tahu apakah pengguna mendapat izin untuk memilih/memperbarui/... tabel/fungsi/... di PostgreSQL

Saya telah menemukan bahwa pendekatan yang lebih baik (dan sepertinya saya ingat ini diambil dari beberapa kueri yang dibangun ke dalam psql, atau mungkin tampilan information_schema) adalah dengan menggunakan has_*_privilege fungsi, dan hanya menerapkannya ke satu set semua kemungkinan kombinasi pengguna dan objek. Ini akan memperhitungkan memiliki akses ke objek melalui beberapa peran grup juga.

Misalnya, ini akan menunjukkan pengguna mana yang memiliki akses ke tabel dan tampilan non-katalog:

select usename, nspname || '.' || relname as relation,
       case relkind when 'r' then 'TABLE' when 'v' then 'VIEW' end as relation_type,
       priv
from pg_class join pg_namespace on pg_namespace.oid = pg_class.relnamespace,
     pg_user,
     (values('SELECT', 1),('INSERT', 2),('UPDATE', 3),('DELETE', 4)) privs(priv, privorder)
where relkind in ('r', 'v')
      and has_table_privilege(pg_user.usesysid, pg_class.oid, priv)
      and not (nspname ~ '^pg_' or nspname = 'information_schema')
order by 2, 1, 3, privorder;

Hak istimewa yang mungkin dirinci dalam deskripsi has_*_privilege berfungsi di http://www .postgresql.org/docs/current/static/functions-info.html#FUNCTIONS-INFO-ACCESS-TABLE .

'CREATE TEMP' adalah hak istimewa tingkat basis data:memungkinkan pengguna untuk menggunakan pg_temp_* skema. Itu dapat diuji dengan has_database_privilege(useroid, datoid, 'TEMP') .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. @Tailable(spring-data-reactive-mongodb) setara di spring-data-r2dbc

  2. Referensi kolom ambigu di INSERT ... ON CONFLICT DO UPDATE

  3. operator tidak ada:uuid =bytea Java dengan Postgres

  4. Bagaimana cara menghasilkan hash dari hasil yang ditetapkan di Postgress?

  5. PostgreSQL - database yang dipulihkan lebih kecil dari aslinya