Outils pour utilisateurs

Outils du site


software:applications:postgresql:verifier_privileges

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 :

  • has_database_privilege() : teste si le rôle possède un des privilèges CREATE, CONNECT ou TEMPORARY ;
  • has_table_privilege() : teste si le rôle possède un des privilèges SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER ou MAINTAIN
-- 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

software/applications/postgresql/verifier_privileges.txt · Dernière modification : 2025/03/23 11:06 de yoann