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.
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 ROLEnom
LOGIN; CREATE USERnom
;
(CREATE USER
est équivalent à CREATE ROLE
sauf que CREATE USER
utilise LOGIN
par défaut
alors que CREATE ROLE
ne le fait pas)
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
. Vous devez le faire en tant que superutilisateur.
nom
SUPERUSER
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
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
. Un rôle disposant de l'attribut
nom
CREATEROLECREATEROLE
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
.
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
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
'
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
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
comme un super-utilisateur.
nom
BYPASSRLS
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
.
Notez que les valeurs par défaut spécifiques aux rôles sans droit de connexion
(nom_utilisateur
RESET nom_variable
LOGIN
) sont vraiment inutiles car ils ne seront jamais appelés.