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 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)
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éer un superutilisateur donne par défaut les droits pour initier une réplication en flux. Pour une sécurité accrue, cela peut être interdit en utilisant la requête CREATE ROLE nom SUPERUSER NOREPLICATION.
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 nom CREATEROLE. Un rôle disposant du droit CREATEROLE peut aussi modifier et supprimer d'autres rôles, ainsi que donner ou supprimer l'appartenance à ces rôles. Néanmoins, pour créer, modifier, supprimer ou changer l'appartenance à un rôle superutilisateur, le statut de superutilisateur est requis ; CREATEROLE n'est pas suffisant pour cela.
Un rôle doit se voir explicitement donné le droit d'initier une réplication en flux. Un rôle utilisé pour la réplication en flux doit toujours 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'.
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(7) et de ALTER ROLE(7) pour plus de détails.
Une bonne pratique est de créer un rôle qui dispose des droits CREATEDB et CREATEROLE mais qui n'est pas un superutilisateur, et d'utiliser ce rôle pour toute la gestion des bases de données et des rôles. Cette approche évite les dangers encourus en travaillant en tant que superutilisateur pour des tâches qui n'ont pas besoin de cet état.
Un rôle peut aussi configurer ses options par défaut pour de nombreux paramètres de configuration décris dans le Chapitre 18, Configuration du serveur. 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.