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

Mengambil semua hak objek untuk peran tertentu

Tidak ada tampilan seperti itu di luar kotak, tetapi data yang diperlukan untuk membuatnya ada di katalog sistem:

http://www.postgresql.org/docs/current/static/catalogs.html

Misalnya, ada relacl bidang di pg_class :

select oid::regclass, relacl from pg_class;

Ada field serupa di katalog lain, yaitu typacl di pg_type dan proacl di pg_proc .

Anda mungkin ingin menggunakan dua katalog lagi, yaitu pg_authid untuk mengetahui peran mana yang memiliki hak pengguna super, dan pg_auth_members untuk mengetahui siapa yang memiliki peran apa.

(pg_default_acl hanya digunakan selama pembuatan objek, jadi tidak berguna.)

Ada beberapa fungsi internal terkait aklitem yang mungkin berguna dalam membuat tampilan. Anda dapat mencantumkannya di psql seperti ini:

\df+ *acl*

Khususnya aclexplode() . Contoh berikut semoga cukup untuk membantu Anda memulai:

select oid::regclass,
       (aclexplode(relacl)).grantor,
       (aclexplode(relacl)).grantee,
       (aclexplode(relacl)).privilege_type,
       (aclexplode(relacl)).is_grantable
from pg_class
where relacl is not null;

Itu dapat dioptimalkan dengan memperluas baris acl terlebih dahulu, mis.:

select oid::regclass,
       aclitem.grantee
from (select oid, aclexplode(relacl) as aclitem from pg_class) sub

Ini akan membawa Anda langsung ke hasil yang diinginkan.

Sejauh yang saya ketahui, itu sama baiknya dengan menggunakan alat bawaan. (Tentu saja, Anda dapat menulis set operator Anda sendiri di C jika Anda ingin mencoba mengoptimalkannya lebih lanjut.)

Sehubungan dengan pertanyaan tambahan Anda, saya khawatir mereka hanya dapat dijawab oleh segelintir orang di dunia, alias pengembang inti itu sendiri. Mereka lebih sering nongkrong di daftar peretas pg daripada di sini.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres sql memasukkan kesalahan sintaks kueri dari phpPgAdmin

  2. Java.sql.SQLException yang terkenal:Tidak ditemukan driver yang cocok

  3. Bisakah tipe data Postgres NUMERIC menyimpan nilai yang ditandatangani?

  4. Melewati nama tabel sebagai parameter di psycopg2

  5. Slide pembicaraan:Peningkatan Partisi di PostgreSQL 11