PostgreSQLLa base de données la plus sophistiquée au monde.
Documentation PostgreSQL 16.5 » Administration du serveur » Rôles de la base de données » Attributs des rôles

22.2. Attributs des rôles #

Un rôle de bases de données peut avoir un certain nombre d'attributs qui définissent ses droits et interagissent avec le système d'authentification du client.

droit de connexion

Seuls les rôles disposant de l'attribut LOGIN peuvent être utilisés comme nom de rôle initial pour une connexion à une base de données. Un rôle avec l'attribut LOGIN peut être considéré de la même façon qu'un « utilisateur de la base de données ». Pour créer un rôle disposant du droit de connexion, utilisez :

CREATE ROLE nom LOGIN;
CREATE USER nom;

(CREATE USER est équivalent à CREATE ROLE sauf que CREATE USER utilise LOGIN par défaut alors que CREATE ROLE ne le fait pas)

statut de superutilisateur

Les superutilisateurs ne sont pas pris en compte dans les vérifications des droits, sauf le droit de connexion ou d'initier la réplication. Ceci est un droit dangereux et ne devrait pas être utilisé sans faire particulièrement attention ; il est préférable de faire la grande majorité de votre travail avec un rôle qui n'est pas superutilisateur. Pour créer un nouveau superutilisateur, utilisez CREATE ROLE nom SUPERUSER. Vous devez le faire en tant que superutilisateur.

création de bases de données

Les droits de création de bases doivent être explicitement données à un rôle (à l'exception des superutilisateurs qui passent au travers de toute vérification de droits). Pour créer un tel rôle, utilisez CREATE ROLE nom_utilisateur CREATEDB.

création de rôle

Un rôle doit se voir explicitement donné le droit de créer plus de rôles (sauf pour les superutilisateurs vu qu'ils ne sont pas pris en compte lors des vérifications de droits). Pour créer un tel rôle, utilisez CREATE ROLE nom CREATEROLE. Un rôle disposant de l'attribut CREATEROLE peut aussi modifier et supprime les rôles qui avaient l'attribut CREATEROLE avec l'option ADMIN. Cela survient automatiquement quand un utilisateur avec l'attribut CREATEROLE mais sans l'attribut SUPERUSER crée un nouveau rôle, pour que, par défaut, un utilisateur avec l'attribut CREATEROLE puissent modifier et supprimer les rôles qu'ils ont créés. Modifier un rôle inclut beaucoup de changements possibles en utilisant la commande ALTER ROLE, ceci incluant, par exemple, le changement de mot de passe. Cela inclut aussi les modifications à un rôle qui peuvent se faire en utilisant les commandes COMMENT et SECURITY LABEL.

Néanmoins, CREATEROLE ne donne pas la possibilité de créer des rôles SUPERUSER, pas plus qu'il ne donne de pouvoirs sur les rôles existants disposant de l'attribut SUPERUSER. De plus, CREATEROLE n'offre pas la possibilité de créer des utilisateurs disposant de l'attribut REPLICATION, pas plus que la capacité de donner ou supprimer l'attribut REPLICATION ou que la possibilité de modifier les propriétés de ce genre d'utilisateurs. Néanmoins, il permet l'utilisation des commandes ALTER ROLE ... SET et ALTER ROLE ... RENAME sur des rôles disposant de l'attribut REPLICATION, ainsi que l'utilisation des commandes COMMENT ON ROLE, SECURITY LABEL ON ROLE et DROP ROLE. Enfin, CREATEROLE n'offre pas la possibilité de donner ou supprimer l'attribut BYPASSRLS.

initier une réplication

Un rôle doit se voir explicitement donné le droit d'initier une réplication en flux (sauf pour les superutilisateurs, puisqu'ils ne sont pas soumis aux vérifications de permissions). Un rôle utilisé pour la réplication en flux doit avoir le droit LOGIN. Pour créer un tel rôle, utilisez CREATE ROLE nom REPLICATION LOGIN.

mot de passe

Un mot de passe est seulement significatif si la méthode d'authentification du client exige que le client fournisse un mot de passe quand il se connecte à la base. Les méthodes d'authentification par mot de passe et md5 utilisent des mots de passe. Les mots de passe de la base de données ne sont pas les mêmes que ceux du système d'exploitation. Indiquez un mots de passe lors de la création d'un rôle avec CREATE ROLE nom_utilisateur PASSWORD 'le_mot_de_passe'.

héritage des droits

Un rôle hérite des droits des rôles dont il est membre par défaut. Néanmoins, pour créer un rôle qui n'hérite pas des droits par défaut, utilisez CREATE ROLE nom NOINHERIT. Autrement, l'héritage peut être surchargé sur les droits individuels en utilisant WITH INHERIT TRUE ou WITH INHERIT FALSE.

contourner la sécurité niveau lignes

Un rôle doit se voir donner explicitement le droit de contourner chaque politique de sécurité niveau lignes (RLS) (sauf pour les superutilisateurs car ils contournent toutes les vérifications de droits). Pour créer un tel rôle, utilisez CREATE ROLE nom BYPASSRLS en tant que superutilisateur.

limite de connexions

La limite de connexions peut indiquer combien de connexions concurrentes un rôle peut faire. -1 (la valeur par défaut) signifie aucune limite. Précisez une limite de connexion lors de la création d'un rôle avec CREATE ROLE nom CONNECTION LIMIT 'integer'.

héritage des droits

Un rôle se voit donner par défaut le droit d'hériter des droits des rôles dont il est membre. Néanmoins, pour créer un rôle sans le droit, utilisez CREATE ROLE nom NOINHERIT.

contourner la sécurité niveau ligne

Un rôle doit se voir donner explicitement le droit de contourner chaque politique de sécurité niveau ligne (RLS), sauf pour les super-utilisateurs, car ces derniers contournent toutes les vérifications de droits). Pour créer un tel rôle, utilisez CREATE ROLE nom BYPASSRLS comme un super-utilisateur.

limite de connexion

La limite de connexions peut indiquer combien de connexions concurrentes un même rôle peut réaliser. La valeur par défaut, -1, signifie aucune limite. Indiquez une limite de connexion lors de la création d'un rôle avec CREATE ROLE nom CONNECTION LIMIT 'integer'.

Les attributs d'un rôle peuvent être modifiés après sa création avec ALTER ROLE. Regardez les pages de références de CREATE ROLE et de ALTER ROLE pour plus de détails.

Un rôle peut aussi configurer ses options par défaut pour de nombreux paramètres de configuration décris dans le Chapitre 20. Par exemple, si, pour une raison ou une autre, vous voulez désactiver les parcours d'index (conseil : ce n'est pas une bonne idée) à chaque fois que vous vous connectez, vous pouvez utiliser :

ALTER ROLE myname SET enable_indexscan TO off;

Cela sauve les paramètres (mais ne les applique pas immédiatement). Dans les connexions ultérieures de ce rôle, c'est comme si SET enable_indexscan TO off avait été appelé juste avant le démarrage de la session. Vous pouvez toujours modifier les paramètres durant la session. Pour supprimer une configuration par défaut spécifique à un rôle, utilisez ALTER ROLE nom_utilisateur RESET nom_variable. Notez que les valeurs par défaut spécifiques aux rôles sans droit de connexion (LOGIN) sont vraiment inutiles car ils ne seront jamais appelés.

Quand un non-superutilisateur crée un rôle en utilisant l'attribut CREATEROLE, le rôle créé est automatiquement attribué au créateur de l'utilisateur, tout comme si le superutilisateur original a exécuté la commande GRANT created_user TO creating_user WITH ADMIN TRUE, SET FALSE, INHERIT FALSE. Comme un utilisateur CREATEROLE peut seulement exercer des droits spéciaux en regard au rôle existant s'ils ont ADMIN OPTION sur ce droit, ce droit est juste suffisant pour qu'un utilisateur CREATEROLE administre les rôles qu'ils ont créés. Néanmoins, comme il est créé avec INHERIT FALSE, SET FALSE, l'utilisateur CREATEROLE n'hérite pas des droits du rôle créé, par plus qu'il ne peut accéder aux droits de ce rôle en utilisant SET ROLE. Néanmoins, comme tout utilisateur qui a ADMIN OPTION sur un rôle peut donner l'appartenance à ce rôle à n'importe quel rôle, l'utilisateur CREATEROLE peut gagner l'accès au rôle en donnant simplement ce rôle à eux-même avec les options INHERIT et/ou SET. De ce fait, le fait que les droits ne sont pas hérités par défaut et que SET ROLE n'est pas donné par défaut est une fonctionnalité contre les accidents, pas une fonctionnalité de sécurité. De plus, notez que, comme ce don automatique est donné par l'utilisateur original, il ne peut être ni supprimé ni modifié par l'utilisateur CREATEROLE ; néanmoins, tout superutilisateur peut le revoquer, le modifier ou donner des droits supplémentaires à d'autres utilisateurs CREATEROLE. Tout utilisateur CREATEROLE qui a ADMIN OPTION sur un rôle peut l'administrer à tout moment.