Rôles et privilèges
Comment fonctionnent les rôles et les privilèges dans PostgreSQL ?
Dans PostgreSQL, les utilisateurs comme les groupes sont des rôles. GRANT accorde à un rôle des privilèges sur des objets, et un rôle membre d’un autre rôle peut exercer les privilèges de celui-ci.
PostgreSQL contrôle les accès à l’aide de rôles. Un rôle peut faire office d’utilisateur (il possède l’attribut LOGIN), de groupe, ou des deux, et les rôles sont propriétaires des objets de la base de données. Les privilèges comme SELECT, INSERT, UPDATE et USAGE sont accordés sur des objets précis avec GRANT et retirés avec REVOKE.
Faire d’un rôle le membre d’un autre lui permet d’exercer les privilèges de cet autre rôle ; une pratique courante consiste donc à accorder les privilèges à des rôles de groupe et à ajouter les rôles de connexion à ces groupes. Les rôles existent pour l’ensemble du cluster de bases de données, et non par base de données. Le propriétaire d’un objet et les superutilisateurs peuvent tout faire avec celui-ci : séparez donc les rôles applicatifs des propriétaires et des superutilisateurs.
Exemple
L’exemple crée un rôle de groupe nommé reporting, un rôle de connexion nommé analyst qui en est membre, et accorde SELECT au groupe. has_table_privilege confirme qu’analyst peut lire la table mais ne peut pas y insérer de lignes.
CREATE ROLE reporting NOLOGIN;
CREATE ROLE analyst LOGIN IN ROLE reporting;
CREATE TABLE revenue_daily (day date PRIMARY KEY, amount numeric);
GRANT SELECT ON revenue_daily TO reporting;
SELECT has_table_privilege('analyst', 'revenue_daily', 'SELECT') AS can_select,
has_table_privilege('analyst', 'revenue_daily', 'INSERT') AS can_insert;Du SQL simple pour PostgreSQL 16 ou 17 standard, sans aucune extension. Exécutez-le dans une base de données vide que vous pouvez jeter ensuite.
Références
Documentation officielle de PostgreSQL (en anglais).