{{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