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

21.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 super-utilisateurs 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 supprimer d'autres rôles, ainsi que donner ou supprimer l'appartenance à ces rôles. 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.

Comme l'attribut CREATEROLE autorise un utilisateur à donner ou supprimer des rôles même pour des rôles auxquels il n'a pas (encore) accès, un utilisateur disposant de CREATEROLE peut obtenir l'accès aux capacités de chaque rôle prédéfini dans le système, incluant les rôles hautement privilégiés tels que pg_execute_server_program et pg_write_server_files.

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 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 19. 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.