sql >> Database >  >> RDS >> PostgreSQL

Zoek uit of de gebruiker toestemming heeft gekregen om een ​​tabel/functie/... te selecteren/bijwerken/... in PostgreSQL

Ik heb ontdekt dat een betere benadering (en ik meen me te herinneren dat dit is overgenomen van enkele query's die in psql zijn ingebouwd, of misschien de information_schema-weergaven) is om de has_*_privilege te gebruiken functies en pas ze eenvoudig toe op een set van alle mogelijke combinaties van gebruiker en object. Dit houdt ook rekening met toegang tot een object via een groepsrol.

Dit laat bijvoorbeeld zien welke gebruikers welke toegang hebben tot niet-catalogustabellen en weergaven:

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;

De mogelijke privileges worden gedetailleerd beschreven in de beschrijving van de has_*_privilege functies op http://www .postgresql.org/docs/current/static/functions-info.html#FUNCTIONS-INFO-ACCESS-TABLE .

'CREATE TEMP' is een privilege op databaseniveau:het staat een gebruiker toe om een ​​pg_temp_* te gebruiken schema. Het kan worden getest met has_database_privilege(useroid, datoid, 'TEMP') .



  1. SQL Server String of binaire gegevens worden afgekapt

  2. Postgres bytea-kolom retourneert string (char-array) in plaats van byte-array

  3. Terug naar de sqlplus-prompt

  4. Koppelingen verwijderen uit berichten in wordpress met behulp van query