PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Autorisations utilisateur PostgreSQL

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 à PostgreSQL
  • SUPERUSER / NOSUPERUSER :autoriser (ou non) les autorisations de superutilisateur. Un superutilisateur de base de données contournera les autres contrôles d'autorisation, à l'exception de LOGIN (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 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;