sql >> Databasteknik >  >> RDS >> PostgreSQL

Hämtar alla objektbehörigheter för specifik roll

Det finns ingen sådan vy direkt, men den data som behövs för att skapa den finns i systemkatalogerna:

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

Det finns till exempel en relacl fältet i pg_class :

select oid::regclass, relacl from pg_class;

Det finns liknande fält i andra kataloger, nämligen typacl i pg_type och proacl i pg_proc .

Du kommer förmodligen att vilja använda ytterligare två kataloger, nämligen pg_authid för att veta vilka roller som är har superanvändarbehörigheter och pg_auth_members att veta vem som har vilken roll.

(pg_default_acl används bara när objekt skapas, så det är inte användbart.)

Det finns ett par aclitem-relaterade interna funktioner som kan vara användbara för att skapa vyn. Du kan lista dem i psql som så:

\df+ *acl*

I synnerhet aclexplode() . Följande exempel räcker förhoppningsvis för att du ska komma igång:

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;

Den kan optimeras genom att först utöka acl-raderna, t.ex.:

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

Det leder dig direkt till önskat resultat.

Såvitt jag är medveten om är det ungefär lika bra som det blir med de inbyggda verktygen. (Naturligtvis kan du skriva din egen uppsättning operatorer i C om du vill försöka optimera detta ytterligare.)

När det gäller dina extra frågor, är jag rädd att de bara kan besvaras av en handfull människor i världen, aka kärnutvecklarna själva. De hänger på pg-hackarlistan oftare än de gör här.



  1. KNIME

  2. Använder pyspark för att ansluta till PostgreSQL

  3. Referensdatamönstret:utbyggbart och flexibelt

  4. SQL Server Azure / 2022 Databas Ledger Tables från Linux.