Dans PostgreSQL, tout est construit autour du concept de rôle .
Lors de la première installation de PostgreSQL sur macOS, le script a créé un rôle avec votre nom d'utilisateur macOS , avec une liste des autorisations accordées.
Il n'y a pas d'utilisateurs dans PostgreSQL, juste des rôles .
En exécutant psql postgres
dans votre terminal, vous vous connecterez automatiquement avec votre nom d'utilisateur macOS à PostgreSQL, accédant ainsi au rôle créé.
Dans mon cas les flaviocopes
rôle a été créé, et je peux le voir en utilisant le \du
commande :
Voir? J'ai les attributs de rôles suivants par défaut :
Superuser
Create role
Create DB
Replication
Bypass RLS
et je ne suis membre d'aucun autre rôle (plus à ce sujet plus tard)
Créer un nouveau rôle
Un nouveau rôle est créé en utilisant le CREATE ROLE
commande :
CREATE ROLE <role>;
Par exemple :
CREATE ROLE testing;
Nous avons un nouveau rôle, avec le Cannot login
attribut de rôle. Notre utilisateur nouvellement créé ne pourra pas se connecter.
Vous pouvez essayer en tapant le \q
commande, puis psql postgres -U testing
, mais vous verrez cette erreur :
Pour résoudre ce problème, nous devons ajouter le LOGIN
attribut de rôle à la création :
CREATE ROLE <role> WITH LOGIN;
Si nous supprimons ce rôle en utilisant :
DROP ROLE <role>;
et ajoutez WITH LOGIN
cette fois :
DROP ROLE testing;
CREATE ROLE testing WITH LOGIN;
Nous pouvons voir que le testing
le rôle peut se connecter, car nous n'avons pas le Cannot login
attribut de rôle cette fois :
Essayez en ajoutant la commande \q
pour quitter, puis psql postgres -U testing
:
Notez que l'invite changé de =#
à =>
car nous n'avons pas le Superuser
attribut de rôle maintenant.
Ajouter un mot de passe à un rôle
Dans le précédent CREATE ROLE
commande, nous avons créé un rôle sans mot de passe. Bien sûr, il est très important d'avoir des mots de passe (sécurisés). Vous pouvez ajouter un mot de passe en utilisant le PASSWORD
mot-clé :
CREATE ROLE <role> WITH LOGIN PASSWORD '<password>';
CRÉER UN UTILISATEUR
Une autre façon de définir les rôles avec le LOGIN
l'attribut automatiquement ajouté (créant effectivement des utilisateurs pouvant se connecter) consiste à utiliser CREATE USER
:
CREATE USER <role> PASSWORD '<password>';
Ajouter un attribut de rôle à un rôle
Un attribut de rôle peut être ajouté ultérieurement à un rôle à l'aide de ALTER ROLE
commande.
Supposons que nous avons créé un rôle sans l'attribut LOGIN :
CREATE ROLE <username> PASSWORD '<password>';
Nous pouvons l'ajouter en utilisant :
ALTER ROLE <role> WITH LOGIN;
Attributs de rôle intégrés
Nous avons vu le LOGIN
attribut de rôle déjà, pour permettre à un rôle de se connecter.
Mais quels sont les autres attributs de rôle intégrés que nous pouvons utiliser ?
LOGIN
/NOLOGIN
:autoriser (ou non) à se connecter à PostgreSQLSUPERUSER
/NOSUPERUSER
:autoriser (ou non) les autorisations de superutilisateur. Un superutilisateur de base de données contournera les autres contrôles d'autorisation, à l'exception deLOGIN
(il doit être accordé séparément).CREATEDB
/NOCREATEDB
:autoriser (ou non) la possibilité de créer de nouvelles bases de donnéesCREATEROLE
/NOCREATEROLE
:autoriser (ou non) la possibilité de créer de nouveaux rôlesCREATEUSER
/NOCREATEUSER
:autoriser (ou non) la possibilité de créer de nouveaux utilisateursINHERIT
/NOINHERIT
:autoriser (ou non) la possibilité de rendre les privilèges héritablesREPLICATION
/NOREPLICATION
:accorder (ou non) des autorisations de réplication (un sujet avancé que nous n'aborderons pas)
Rôles de groupe
Dans PostgreSQL, il n'y a pas de groupes d'utilisateurs.
Au lieu de cela, vous pouvez créer des rôles avec certaines autorisations, puis accorder ces rôles à d'autres rôles.
Les rôles hériteront des autorisations des rôles qui leur sont accordés, si ces rôles ont l'attribut INHERIT.
Créer un rôle de groupe
Pour créer un rôle de groupe, saisissez
CREATE ROLE <groupname>;
La syntaxe est la même que pour créer un rôle.
Une fois le rôle de groupe créé, vous pouvez ajouter des rôles au rôle de groupe à l'aide de GRANT
:
GRANT <groupname> TO <role>
Par exemple, nous pouvons créer un flavio
rôle d'utilisateur, un rôle de groupe « employé » et affectez l'utilisateur au rôle de groupe :
CREATE USER flavio PASSWORD 'superSecret123$';
CREATE ROLE employee;
GRANT employee TO flavio;
Vous pouvez supprimer un rôle d'un rôle de groupe en utilisant :
REVOKE <groupname> FROM <username>
Exemple :
REVOKE employee FROM flavio;
Attributs de rôle de groupe
Par défaut, l'ajout d'un rôle à un rôle de groupe ne sera pas faites en sorte que le rôle hérite des attributs (autorisations) du rôle de groupe.
Vous devez créer le rôle de groupe avec le INHERIT
attribut.
Supposons que vous créiez le rôle de groupe d'employés et que vous lui attribuiez le CREATEDB
attribut :
CREATE ROLE employee WITH CREATEDB INHERIT;
Créez maintenant un nouveau rôle en utilisant INHERIT
:
CREATE ROLE flavio;
GRANT employee TO flavio;