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
superutilisateurs 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 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
.
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 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
. Autrement, l'héritage peut être surchargé sur les
droits individuels en utilisant nom
NOINHERITWITH INHERIT TRUE
ou WITH INHERIT FALSE
.
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
en tant que
superutilisateur.
nom
BYPASSRLS
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
'
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 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
.
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.
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.