Retour au blog

Comment utiliser les rôles et gérer les permissions dans PostgreSQL

Comment utiliser les rôles et gérer les permissions dans PostgreSQL

PostgreSQL est un SGBD open-source qui utilise à son tour SQL. C’est un outil très puissant qui est utilisé pour gérer des applications et héberger des données web sur VPS. Dans ce tutoriel, vous apprendrez à gérer les permissions dans PostgreSQL. Cela vous aidera à attribuer à vos rôles d'application les permissions requises. Nous réaliserons ce tutoriel en utilisant PostgreSQL sur un Ubuntu 18.04 serveur cloud sur CloudSigma.

Installation de PostgreSQL

Pour télécharger et installer PostgreSQL, exécutez les commandes suivantes :

L'installateur créera un utilisateur par défaut – “Postgres” sous lequel opérer. Nous utiliserons cet utilisateur pour la majeure partie de ce tutoriel. Vous pouvez vous connecter à cet utilisateur avec cette commande :

Maintenant que PostgreSQL est installé, vous allez apprendre comment il gère les permissions. Vous pouvez également suivre notre tutoriel sur la configuration de PostgreSQL sur Ubuntu pour un guide détaillé étape par étape du processus d'installation.

Concepts de permissions dans PostgreSQL

Postgres gère les permissions à travers le concept de “rôles”. Avec les rôles, il n'y a pas de distinction entre utilisateurs et groupes. Les rôles sont plus flexibles que le système Unix traditionnel d'utilisateurs et de groupes. Par exemple, un rôle peut agir en tant que membre d'un autre rôle, héritant de ses permissions.

Afficher les rôles dans PostgreSQL

Pour afficher les rôles dans PostgreSQL, vous devez d'abord vous connecter à l'invite de commande à l'aide de la commande suivante :

Ensuite, exécutez ce qui suit pour afficher les rôles :

show roles manage permissions in PostgreSQL

Pour l'instant, il n'y a qu'un seul rôle par défaut avec tous les privilèges.

Comment créer des rôles dans PostgreSQL

Vous pouvez créer des rôles pour Postgres soit depuis la ligne de commande, soit depuis le shell Postgres. Vous pouvez essayer les deux approches suivantes, après quoi vous verrez comment gérer les permissions et les accès dans PostgreSQL.

Comment créer des rôles depuis PostgreSQL

Le moyen le plus simple de créer des rôles est de le faire depuis l'invite de Postgres. Vous pouvez le faire avec la commande suivante :

Pour vérifier s'il est créé, exécutez la commande :

create role from prompt

Cela indique que le nouveau rôle n'a pas de permissions de connexion. Vous apprendrez comment changer cela plus tard dans le tutoriel.

Comment créer des rôles depuis la ligne de commande

L'alternative à la méthode ci-dessus consiste à créer l'utilisateur depuis la ligne de commande. Pour quitter l'invite PostgreSQL, tapez ce qui suit :

Vous pouvez créer un rôle appelé “test” avec la commande suivante :

Une fois que vous avez exécuté la commande ci-dessus, connectez-vous à psql et listez les rôles à l'aide des commandes suivantes :

creating user from commandline

Vous pouvez observer que l'utilisateur créé de cette manière n'a pas les mêmes attributs.

Comment supprimer des rôles dans PostgreSQL

Vous pouvez facilement supprimer des rôles dans PostgreSQL en utilisant la syntaxe suivante :

Vous pouvez supprimer le rôle de démonstration que nous avons créé précédemment à l'aide de la commande :

drop role

Si nous essayons de supprimer un rôle qui n'existe pas, cela lèvera simplement une erreur. Pour voir cela, vous pouvez essayer de supprimer à nouveau le même rôle :

drop role fail

Si vous voulez que la commande ne lève pas d'erreur lorsque le rôle n'existe pas, vous pouvez ajouter ‘IF EXISTS’ dans la commande :

Vous pouvez réessayer de supprimer le rôle avec cette commande :

drop role if exists

Comment définir des privilèges lors de la création d'un rôle

Jusqu'à présent, vous avez créé et supprimé des rôles. Dans cette section, vous allez créer des rôles avec des permissions modifiées. Vous pouvez le faire en spécifiant les permissions pour le rôle avec la commande de création :

Pour voir les options correspondantes, vous pouvez ouvrir l'aide à l'aide de cette commande :

help create user

Si vous souhaitez créer un rôle avec des permissions de connexion, vous pouvez formuler la commande comme ceci :

create role with login manage permissions in PostgreSQL

Comme nous l'avons vu précédemment, si vous souhaitez créer des rôles avec l'autorisation de connexion, vous pouvez également utiliser la commande suivante :

La seule différence entre les deux commandes est que ‘CREATE USER’ donne par défaut l'autorisation de connexion au rôle.

Comment modifier les privilèges des rôles dans PostgreSQL

Jusqu'à présent, vous avez essayé de donner des autorisations lors de la création de l'utilisateur. Dans cette section, vous allez modifier les autorisations des utilisateurs déjà créés. La syntaxe de la commande alter est :

Par exemple, si vous le souhaitez, vous pouvez modifier les autorisations de connexion de demo_role en ‘log in’ avec cette commande :

alter nologin

Pour autoriser à nouveau l'utilisateur à se connecter, vous pouvez modifier les autorisations avec la commande suivante :

Comment se connecter en tant qu'un autre utilisateur dans PostgreSQL

Par défaut, PostgreSQL vous permet de vous connecter uniquement localement si votre nom d'utilisateur correspond au nom d'utilisateur du système. Pour contourner cela, vous pouvez soit modifier le type de connexion, soit configurer PostgreSQL pour utiliser l'interface réseau de bouclage. Cette interface modifierait le type de connexion en connexion distante, même si la connexion est locale.

Dans cette section, vous allez essayer la deuxième option. Pour commencer, vous pouvez définir le mot de passe de l'utilisateur afin que l'authentification soit possible.

Définissez le mot de passe de ‘demo_user’ avec la commande suivante :

Lorsque vous y êtes invité, saisissez et confirmez le mot de passe. Une fois cela fait, vous pouvez quitter l'interface PostgreSQL et revenir à l'utilisateur normal de votre machine :

PostgreSQL exige que vous vous connectiez avec un nom d'utilisateur qui correspond à celui de votre système d'exploitation et que vous vous connectiez également à la base de données avec ce même nom d'utilisateur. Comme ce n'est pas ce que vous faites dans ce cas, vous devrez spécifier explicitement les options que vous souhaitez utiliser. Vous pouvez utiliser la syntaxe suivante :

user : Le nom d'utilisateur avec lequel vous souhaitez vous connecter
DB : Une base de données existante à laquelle vous avez accès
-h 127.0.0.1 : Spécifie à PostgreSQL que vous vous connecterez via une interface réseau à la machine locale. Cette option nous permet de nous authentifier même si le nom d'utilisateur ne correspond pas à celui du système.
-W : Indique à PostgreSQL que vous allez saisir un mot de passe

Pour vous connecter avec notre “test_user”, vous pouvez lancer la commande suivante :

postgresql login through network interface manage permissions in PostgreSQL

Une fois le mot de passe saisi, vous serez connecté au shell. Dans notre exemple, nous utilisons la base de données ‘postgres’, la base de données par défaut configurée automatiquement lors de l'installation.

Dans cette session, selon l'utilisateur que vous avez choisi pour vous connecter, vous serez confronté à un problème : vous ne disposez pas des autorisations nécessaires pour effectuer diverses actions. La raison de ce problème est que vous n'avez pas encore accordé à l'utilisateur les autorisations suffisantes pour administrer les éléments.

Dans la section suivante, vous accorderez les autorisations requises aux utilisateurs. Tout d'abord, vous devrez repasser à un utilisateur administratif :

Gérer les autorisations dans PostgreSQL : Comment accorder des autorisations dans PostgreSQL

Dans PostgreSQL, si une base de données ou une table est créée par un rôle particulier, seul ce rôle a les autorisations de la modifier. L'exception à cela concerne les rôles qui ont des autorisations de superutilisateur. Dans cette section, vous allez accorder des autorisations à d'autres rôles. Vous pouvez accorder des autorisations à d'autres rôles à l'aide de l'instruction ‘GRANT’. La syntaxe est :

Vous pouvez créer une table simple pour exécuter la commande :

Pour voir la table créée, exécutez la commande :

create table manage permissions in PostgreSQL

Now that you have a demo table, you can grant privileges to the ‘demo’ table to ‘demo_role.’ You can give the role ‘UPDATE’ privilege with this command:

Vous pouvez accorder toutes les autorisations à un rôle en spécifiant l'autorisation comme ‘ALL’ :

Si vous souhaitez accorder une autorisation spécifique à tous les rôles du système, vous pouvez utiliser le mot-clé ‘public’ au lieu du rôle, comme dans la commande suivante :

Vous pouvez afficher toutes les autorisations accordées à l'aide de la commande suivante :

granted permissions

Gérer les autorisations dans PostgreSQL : comment supprimer des autorisations dans PostgreSQL

Vous pouvez facilement supprimer les autorisations d'un rôle à l'aide de la commande ‘REVOKE’. Elle est très similaire à la commande d'attribution :

Comme avec GRANT, nous pouvons utiliser les mots-clés – ‘ALL’ and ‘PUBLIC’ pour accorder toutes les autorisations ou accorder des autorisations à tous les rôles :

Comment utiliser les rôles de groupe dans PostgreSQL

Pour permettre un contrôle étendu des autorisations, les rôles sont suffisamment flexibles pour permettre le regroupement avec d'autres rôles. Par exemple, vous pouvez créer un rôle – ‘temporary_role’ puis ajouter ‘demo_role’ et ‘test_user’ à ce rôle :

Vous pouvez maintenant gérer les autorisations de ces deux rôles simplement en gérant les autorisations du rôle ‘temporary_role’. Cela permet une gestion plus facile des autorisations. Vous pouvez voir les informations d'appartenance aux rôles avec cette commande :

role - group manage permissions in PostgreSQL

Tout membre du groupe peut agir en tant que groupe en utilisant la commande ‘set role’. Comme l'utilisateur ‘postgres’ est un superutilisateur, vous pouvez utiliser ‘set role’ même si vous n'êtes pas membre du groupe :

Toutes les tables que vous créerez maintenant appartiendront à temporary_role :

Pour vérifier les propriétaires de la table, exécutez la commande suivante :

create table with temporary_role

Vous pouvez voir que le rôle ‘temporary_role’ possède la nouvelle table et la séquence associée au type de données serial. Pour revenir aux autorisations du rôle d'origine, exécutez la commande suivante :

Si vous souhaitez que le rôle dispose de tous les privilèges du rôle auquel il appartient, vous pouvez spécifier la propriété ‘inherit’ avec la commande ‘alter role’ :

Avec la commande ci-dessus, ‘test_user’ a obtenu tous les privilèges des rôles auxquels il appartient. Pour supprimer un rôle, vous pouvez utiliser la commande ‘drop role’ :

drop role manage permissions in PostgreSQL

La commande ci-dessus renvoie une erreur car nous avons des objets, comme la table ‘hello’, qui en dépendent. Pour le supprimer, vous pouvez transférer la propriété de la table à un autre rôle :

Vous pouvez vérifier que temporary_role ne possède plus aucune table avec la commande suivante :

check ownerships

Vous pouvez maintenant supprimer le rôle ‘temporary_role’ car il n'a plus de dépendances :

Même si la commande ci-dessus supprimera le rôle temporary_users, les anciens membres du groupe de rôles ne sont pas supprimés.

Conclusion

Vous avez terminé le tutoriel, et vous savez maintenant comment gérer les permissions dans PostgreSQL. Vous pouvez administrer les permissions facilement. Savoir gérer les permissions garantit que vos applications ont accès aux bases de données requises tout en n’ayant pas accès à toute autre base de données utilisée par une application différente.

Bonne programmation !

author

Akshay Nagpal

Auteur · CloudSigma

Preslav Dobrev est un designer créatif chez CloudSigma, axé sur une identité commerciale cohérente à travers des canaux marketing traditionnels et innovants. Il excelle à fusionner la vision artistique avec le marketing stratégique pour créer des récits de marque percutants.

Commentaires

Aucun commentaire pour l'instant. Soyez le premier.