sql >> Database >  >> RDS >> PostgreSQL

Hoe kan ik alle database- en objecttoekenningen voor een rol bekijken?

De kolom relacl van de systeemcatalogus pg_class bevat alle informatie over privileges.

Voorbeeldgegevens in schema public eigendom van postgres met subsidies aan 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;

Opvragen van de 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)

Opmerkingen:

  • coalesce(relacl::text[], format('{%s=arwdDxt/%s}', rolname, rolname)) - Null in relacl betekent dat de eigenaar alle privileges heeft;
  • unnest(...) acl - relacl is een array van aclitem , één array-element voor een gebruiker;
  • regexp_split_to_array(acl, '=|/') s - splitsen aclitem in:s[1] gebruikersnaam, s[2] privileges;
  • coalesce(nullif(s[1], ''), 'public') as grantee - lege gebruikersnaam betekent public .

Pas de zoekopdracht aan om een ​​individuele gebruiker of een specifiek soort relatie of een ander schema, enz. te selecteren...

Lees in de documentatie:

Op een vergelijkbare manier kunt u informatie krijgen over privileges die zijn verleend op schema's (de kolom nspacl in pg_namespace ) en databases (datacl in pg_database )



  1. MYSQL Invoegen Verzendknop PHP

  2. Hoe doe je Multiple Inner Joins in Linq to Entities

  3. MySQL Workbench - Forward Engineering - Fout 1005:Kan tabel niet maken (fout:150)

  4. Krijg werknemers die onder het gemiddelde salaris zitten na een verhoging