sql >> Database >  >> RDS >> PostgreSQL

Alle objectrechten voor een specifieke rol ophalen

Een dergelijke weergave is standaard niet beschikbaar, maar de gegevens die nodig zijn om deze te maken, staan ​​in de systeemcatalogi:

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

Er is bijvoorbeeld een relacl veld in pg_class :

select oid::regclass, relacl from pg_class;

Er zijn vergelijkbare velden in andere catalogi, namelijk typacl in pg_type en proacl in pg_proc .

U wilt waarschijnlijk nog twee catalogi gebruiken, namelijk pg_authid om te weten welke rollen superuser-privileges hebben, en pg_auth_members om te weten wie welke rol heeft.

(De pg_default_acl wordt alleen gebruikt tijdens het maken van objecten, dus is niet nuttig.)

Er zijn een aantal acliitem-gerelateerde interne functies die van pas kunnen komen bij het maken van de weergave. Je kunt ze opsommen in psql zoals zo:

\df+ *acl*

In het bijzonder aclexplode() . Het volgende voorbeeld is hopelijk voldoende om u op weg te helpen:

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;

Het kan worden geoptimaliseerd door eerst de acl-rijen uit te breiden, bijvoorbeeld:

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

Het leidt je direct naar het gewenste resultaat.

Voor zover ik weet, is dat ongeveer net zo goed als het wordt met de ingebouwde tools. (Natuurlijk kunt u uw eigen set operators in C schrijven als u dit verder wilt optimaliseren.)

Wat betreft je extra vragen, ik ben bang dat ze alleen kunnen worden beantwoord door een handvol mensen in de wereld, oftewel de kernontwikkelaars zelf. Ze hangen vaker op de pg-hackerslijst dan hier.



  1. MySQL LAST_INSERT_ID() gebruikt met meerdere records INSERT-instructie

  2. Inleiding tot speciale zoekopdrachten

  3. Querygeschiedenis bekijken in SQL Server Management Studio

  4. hoe kan ik een nieuw XML-bestand maken van een bestaande database in de PostgreSQL-database met behulp van java