Dans ce tutoriel, j'expliquerai comment gérer les utilisateurs et les autorisations dans PostgreSQL.
Dans PostgreSQL, tout est construit autour du concept derôle.
Lors de la première installation de PostgreSQL sur macOS, le scripta 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écutantpsql 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, leflaviocopes
le rôle a été créé et je peux le voir en utilisant le\du
commander:
Voir? J'ai ce qui suitattributs de rôlespar 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éé à l'aide duCREATE ROLE
commander:
CREATE ROLE <role>;
Par exemple:
CREATE ROLE testing;
Nous avons un nouveau rôle, avec leCannot login
attribut de rôle. Notre utilisateur nouvellement créé ne pourra pas se connecter.
Vous pouvez essayer en tapant le\q
commande, puispsql postgres -U testing
, mais vous verrez cette erreur:
Pour résoudre ce problème, nous devons ajouter leLOGIN
attribut de rôle lors de la création:
CREATE ROLE <role> WITH LOGIN;
Si nous supprimons ce rôle en utilisant:
DROP ROLE <role>;
et ajouterWITH LOGIN
cette fois:
DROP ROLE testing;
CREATE ROLE testing WITH LOGIN;
Nous pouvons voir que letesting
rôle peut se connecter, car nous n'avons pas leCannot login
attribut de rôle cette fois:
Essayez en ajoutant la commande\q
pour quitter, puispsql postgres -U testing
:
Notez que lerapidechangé de=#
à=>
parce que nous n'avons pas leSuperuser
attribut de rôle maintenant.
Ajouter un mot de passe à un rôle
Dans le précédentCREATE 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 lePASSWORD
mot-clé:
CREATE ROLE <role> WITH LOGIN PASSWORD '<password>';
CRÉER UN UTILISATEUR
Une autre façon de définir les rôles avec leLOGIN
l'attribut automatiquement ajouté (créant effectivement des utilisateurs qui peuvent se connecter) consiste à utiliserCREATE USER
:
CREATE USER <role> PASSWORD '<password>';
Ajout d'un attribut de rôle à un rôle
Un attribut de rôle peut être ajouté ultérieurement à un rôle à l'aide de laALTER ROLE
commander.
Supposons que nous ayons 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 leLOGIN
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
: autorise (ou non) les autorisations de superutilisateur Un super-utilisateur de base de données contournera les autres vérifications 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 ne couvrirons 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 la création d'un rôle.
Une fois le rôle de groupe créé, vous pouvez ajouter des rôles au rôle de groupe en utilisantGRANT
:
GRANT <groupname> TO <role>
Par exemple, nous pouvons créer unflavio
rôle d'utilisateur, un rôle de groupe «employé» et affectez l'utilisateur au rôle de groupe:
CREATE USER flavio PASSWORD 'superSecret123