{{tag>dbadmin db sql postgresql droits 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 ===== * https://dba.stackexchange.com/questions/4286/list-the-database-privileges-using-psql