Table des matières

, , , , ,

PostgreSQL : Vérifier les privilèges

SELECT grantee AS USER, CONCAT(table_schema, '.', TABLE_NAME) AS TABLE, 
    CASE 
        WHEN COUNT(privilege_type) = 7 THEN 'ALL'
        ELSE ARRAY_TO_STRING(ARRAY_AGG(privilege_type), ', ')
    END AS grants
FROM information_schema.role_table_grants
GROUP BY TABLE_NAME, table_schema, grantee;

Tester la présence d'un privilège sur un objet

Un ensemble de fonctions permet de tester ou déterminer si un rôle donné possède certains privilèges sur un objet donné, notamment :

-- teste si le role yoann peut se connecter à la base postgres
SELECT has_database_privilege('yoann', 'postgres', 'CONNECT');
 
-- Détermine si le role yoann peut mettre à jour la relation pg_user
SELECT has_table_privilege('yoann', 'pg_catalog.pg_user', 'INSERT, UPDATE, DELETE');

La liste exhaustive des fonctions disponibles est fournie par la documentation Postgres : https://www.postgresql.org/docs/current/functions-info.html#FUNCTIONS-INFO-ACCESS

Lister les roles affectés à un rôle utilisateur

SELECT roleid, rolname, usename, member  
FROM pg_auth_members 
JOIN pg_roles ON pg_roles.oid = pg_auth_members.roleid 
JOIN pg_user ON pg_user.usesysid = pg_auth_members.member  
WHERE usename = 'yoann' ;  

Références