Introduction
Dans ce laboratoire, vous allez explorer la gestion des rôles et des permissions dans PostgreSQL. L'objectif principal est d'apprendre à créer des rôles avec des attributs spécifiques et à gérer les privilèges de la base de données.
Vous commencerez par créer un rôle nommé reporting_role avec l'attribut NOLOGIN, l'empêchant de se connecter directement à la base de données. Ensuite, vous vérifierez la création du rôle. Les étapes suivantes couvriront l'octroi et le test des privilèges de base de données, le changement d'utilisateur pour vérifier l'accès, et la révocation des privilèges d'un rôle.
Créer un rôle
Dans cette étape, vous apprendrez comment créer un rôle dans PostgreSQL. Les rôles sont utilisés pour gérer l'accès et les permissions de la base de données.
Se connecter au serveur PostgreSQL :
Ouvrez un terminal et connectez-vous au serveur PostgreSQL en utilisant l'outil en ligne de commande
psqlen tant qu'utilisateurpostgres.sudo -u postgres psqlVous devriez voir une invite similaire à :
postgres=#Créer le rôle
reporting_role:Maintenant, créons le rôle
reporting_roleen utilisant la commandeCREATE ROLE. Nous spécifierons l'attributNOLOGIN, ce qui signifie que ce rôle ne pourra pas être utilisé pour se connecter directement à la base de données. Il sera uniquement utilisé pour accorder des permissions à d'autres rôles ou utilisateurs.CREATE ROLE reporting_role NOLOGIN;Cette commande crée le rôle. Vous devriez voir la sortie suivante :
CREATE ROLEVérifier la création du rôle :
Pour vérifier que le rôle a été créé, vous pouvez utiliser la commande
\du(raccourci pour\list users). Cette commande liste tous les rôles de la base de données.\duVous devriez voir
reporting_roledans la liste des rôles. La sortie ressemblera à ceci :List of roles Role name | Attributes | Member of ----------------+------------------------------------------------------------+----------- labex | Superuser | {} postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {} reporting_role | Cannot login | {}Quittez le shell psql.
\q
Accorder les privilèges de base de données
Dans cette étape, vous apprendrez comment accorder des privilèges de base de données à un rôle. Nous allons nous baser sur le rôle reporting_role créé à l'étape précédente.
Se connecter au serveur PostgreSQL :
Connectez-vous au serveur PostgreSQL en utilisant l'outil en ligne de commande
psqlen tant qu'utilisateurpostgres.sudo -u postgres psqlCréer une base de données :
Créons une base de données nommée
reporting_dbà laquelle notre rôlereporting_roleaura accès.CREATE DATABASE reporting_db;Vous devriez voir la sortie suivante :
CREATE DATABASESe connecter à la base de données
reporting_db:Connectez-vous à la base de données nouvellement créée :
\c reporting_dbL'invite devrait changer en
reporting_db=#.Créer une table :
Créons une table simple nommée
sales_datadans la base de donnéesreporting_db.CREATE TABLE sales_data ( id SERIAL PRIMARY KEY, product VARCHAR(255), amount DECIMAL );Vous devriez voir la sortie suivante :
CREATE TABLEAccorder le privilège
SELECTsur la tablesales_dataau rôlereporting_role:Maintenant, nous allons accorder le privilège
SELECTsur la tablesales_dataau rôlereporting_role. Cela permettra à tout rôle ou utilisateur membre dereporting_rolede lire les données de la tablesales_data.GRANT SELECT ON sales_data TO reporting_role;Vous devriez voir la sortie suivante :
GRANTQuittez le shell psql.
\q
Créer l'utilisateur et tester les privilèges
Dans cette étape, vous allez créer un utilisateur et lui accorder l'appartenance au rôle reporting_role pour tester les privilèges.
Se connecter au serveur PostgreSQL :
Connectez-vous au serveur PostgreSQL en utilisant l'outil en ligne de commande
psqlen tant qu'utilisateurpostgres.sudo -u postgres psqlSe connecter à la base de données
reporting_db:Connectez-vous à la base de données
reporting_db:\c reporting_dbCréer un utilisateur et lui accorder l'appartenance au rôle
reporting_role:Créons un nouvel utilisateur nommé
report_user. Ensuite, nous accorderons à cet utilisateur l'appartenance au rôlereporting_role. Cela signifie quereport_userhéritera des privilèges accordés àreporting_role.CREATE USER report_user; GRANT reporting_role TO report_user;Vous devriez voir la sortie suivante :
CREATE ROLE GRANT ROLEConfigurer PostgreSQL pour l'authentification sans mot de passe :
Par défaut, PostgreSQL utilise l'authentification
peer, ce qui peut causer des problèmes de connexion dans ce laboratoire. Nous allons la changer entrustpour simplifier l'accès pourreport_user.Tout d'abord, quittez le shell
psql:\qMaintenant, modifiez le fichier
pg_hba.confpour changer la méthode d'authentification. La commandesedci-dessous sauvegardera le fichier original sous le nompg_hba.conf.baket remplacerapeerpartrustpour les connexions locales.sudo sed -i.bak 's/^local\s\+all\s\+all\s\+peer/local all all trust/' /etc/postgresql/14/main/pg_hba.confRechargez PostgreSQL pour appliquer les modifications :
sudo service postgresql reloadInsérer des données dans la table
sales_data:Reconnectez-vous à la base de données en tant qu'utilisateur
postgres.sudo -u postgres psql -d reporting_dbInsérez quelques données d'exemple dans la table
sales_dataà des fins de test.INSERT INTO sales_data (product, amount) VALUES ('Laptop', 1200.00), ('Mouse', 25.00), ('Keyboard', 75.00);Vous devriez voir la sortie suivante :
INSERT 0 3Quittez le shell psql.
\qSe connecter à la base de données
reporting_dben tant quereport_user:Ouvrez une nouvelle fenêtre de terminal et utilisez la commande suivante :
psql -d reporting_db -U report_userVous serez connecté à la base de données en tant que
report_usersans invite de mot de passe.Tester les privilèges :
Maintenant, essayez de sélectionner des données de la table
sales_data:SELECT * FROM sales_data;Vous devriez voir les données que vous avez insérées :
id | product | amount ----+----------+-------- 1 | Laptop | 1200.00 2 | Mouse | 25.00 3 | Keyboard | 75.00 (3 rows)Si vous voyez cette sortie, cela signifie que
report_userpossède le privilègeSELECTsur la tablesales_data, qui a été accordé via le rôlereporting_role.Quittez le shell psql.
\q
Révoquer les privilèges
Dans cette étape, vous allez révoquer le privilège SELECT du rôle reporting_role et vérifier que report_user n'a plus accès à la table sales_data.
Se connecter au serveur PostgreSQL en tant qu'utilisateur
postgres:Retournez au terminal où vous êtes connecté en tant qu'utilisateur
postgres. Connectez-vous au serveur PostgreSQL en utilisant l'outil en ligne de commandepsqlen tant qu'utilisateurpostgres.sudo -u postgres psqlSe connecter à la base de données
reporting_db:Connectez-vous à la base de données
reporting_db:\c reporting_dbRévoquer le privilège SELECT du rôle
reporting_role:Maintenant, nous allons révoquer le privilège
SELECTsur la tablesales_datadu rôlereporting_role.REVOKE SELECT ON sales_data FROM reporting_role;Vous devriez voir la sortie suivante :
REVOKEQuittez le shell psql.
\qSe connecter à la base de données
reporting_dben tant quereport_user:Retournez au terminal où vous êtes connecté en tant que
report_user.psql -d reporting_db -U report_userVérifier le refus d'accès en tant que
report_user:En tant que
report_user, exécutez à nouveau la requêteSELECTpour vérifier que vous n'avez plus accès aux données de la tablesales_data:SELECT * FROM sales_data;Vous devriez voir un message d'erreur similaire à :
ERROR: permission denied for table sales_dataCela confirme que
report_usern'a plus les privilègesSELECTsur la tablesales_datacar le privilège a été révoqué du rôlereporting_role.Quittez le shell psql.
\q
Résumé
Dans ce laboratoire, vous avez appris à créer des rôles, à accorder des privilèges, à créer des utilisateurs, à attribuer des rôles à des utilisateurs et à révoquer des privilèges dans PostgreSQL. Ce sont des concepts fondamentaux pour la gestion de la sécurité de la base de données et du contrôle d'accès.


