Autorisations utilisateur PostgreSQL

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 postgresdans votre terminal, vous vous connecterez automatiquement avec votre nom d'utilisateur macOS à PostgreSQL, accédant ainsi au rôle créé.

Dans mon cas, leflaviocopesle rôle a été créé et je peux le voir en utilisant le\ducommander:

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 ROLEcommander:

CREATE ROLE <role>;

Par exemple:

CREATE ROLE testing;

Nous avons un nouveau rôle, avec leCannot loginattribut de rôle. Notre utilisateur nouvellement créé ne pourra pas se connecter.

Vous pouvez essayer en tapant le\qcommande, puispsql postgres -U testing, mais vous verrez cette erreur:

Pour résoudre ce problème, nous devons ajouter leLOGINattribut 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 LOGINcette fois:

DROP ROLE testing;
CREATE ROLE testing WITH LOGIN;

Nous pouvons voir que letestingrôle peut se connecter, car nous n'avons pas leCannot loginattribut de rôle cette fois:

Essayez en ajoutant la commande\qpour quitter, puispsql postgres -U testing:

Notez que lerapidechangé de=#à=>parce que nous n'avons pas leSuperuserattribut de rôle maintenant.

Ajouter un mot de passe à un rôle

Dans le précédentCREATE ROLEcommande 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 lePASSWORDmot-clé:

CREATE ROLE <role> WITH LOGIN PASSWORD '<password>';

CRÉER UN UTILISATEUR

Une autre façon de définir les rôles avec leLOGINl'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 ROLEcommander.

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 leLOGINattribut 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 à PostgreSQL
  • SUPERUSER/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ées
  • CREATEROLE/NOCREATEROLE: autoriser (ou non) la possibilité de créer de nouveaux rôles
  • CREATEUSER/NOCREATEUSER: autoriser (ou non) la possibilité de créer de nouveaux utilisateurs
  • INHERIT/NOINHERIT: autoriser (ou non) la possibilité de rendre les privilèges héritables
  • REPLICATION/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 unflaviorôle d'utilisateur, un rôle de groupe «employé» et affectez l'utilisateur au rôle de groupe:

CREATE USER flavio PASSWORD 'superSecret123
;CRÉER RÔLEemployé;ACCORDERemployéÀ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 groupene pasfaire 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 leINHERITattribut.

Supposons que vous créez le rôle de groupe d'employés et que vous lui attribuez leCREATEDBattribut:

CREATE ROLE employee WITH CREATEDB INHERIT;

Créez maintenant un nouveau rôle en utilisantINHERIT:

CREATE ROLE flavio;
GRANT employee TO flavio;


Plus de didacticiels sur les bases de données: