Documentation PostgreSQL 14.22 » Administration du serveur » Rôles de la base de données » Attributs des rôles

Précédent | Niveau supérieur | Suivant
22.1. Rôles de la base de données | Sommaire | 22.3. Appartenance d'un rôle

## 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 super-utilisateur

  Les super-utilisateurs 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 super-utilisateur. Pour créer un nouveau super-utilisateur, utilisez `CREATE ROLE `nom` SUPERUSER`. Vous devez le faire en tant que super-utilisateur.

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 super-utilisateurs, 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 mot 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 qu'il n'y a 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.