Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
software:applications:postgresql:start [2021/02/01 21:51] – modification externe 127.0.0.1 | software:applications:postgresql:start [2025/03/25 21:52] (Version actuelle) – yoann | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
{{tag> | {{tag> | ||
- | ====== | + | ====== |
Notes à propos du SGBD Postgres SQL. | Notes à propos du SGBD Postgres SQL. | ||
Ligne 17: | Ligne 17: | ||
===== Installation ===== | ===== Installation ===== | ||
- | # Creation | + | < |
- | # Initialiser un emplacement de stockage pour les bases de données avec la commande initdb | + | La procédure ci-dessous décrit une installation sur le système local. Une installation par conteneur docker est également détaillée [[software: |
- | # commande à invoquer sous l' | + | </ |
- | # La commande se charge de créer la base systeme pg_database et le super utilisateur postgres | + | |
+ | - Création | ||
+ | | ||
+ | | ||
+ | | ||
< | < | ||
Ligne 37: | Ligne 41: | ||
</ | </ | ||
- | Dans PostgreSQL les droits d' | + | ===== Les rôles ===== |
- | Un role possède des objet et peut affecter des droits d' | ||
- | Les roles définis sont communs au groupe de catalogue (groupe de base de données). | ||
- | Lister | + | Les droits d' |
- | < | + | |
- | \du | + | < |
+ | Un rôle peut être considéré soit comme un utilisateur soit comme un groupe d' | ||
+ | </ | ||
+ | |||
+ | Un rôle peut être le propriétaire d'un objet (relations, tables, fonctions etc) et peut autoriser l' | ||
+ | |||
+ | Il est possible d' | ||
+ | |||
+ | < | ||
+ | Le concept de rôle généralise celui d' | ||
+ | </ | ||
+ | |||
+ | |||
+ | Les rôles | ||
+ | |||
+ | Afin de pouvoir démarrer et initialiser le SGBDR, un rôle super-utilisateur ayant le droit se connecter est créé. Ce role est souvent nommé **postgres**. | ||
+ | |||
+ | Afin de pouvoir gérer d' | ||
+ | |||
+ | < | ||
+ | # depuis le compte root local | ||
+ | su - postgres | ||
+ | psql | ||
</ | </ | ||
+ | |||
+ | ==== Lister les rôles ==== | ||
+ | |||
Les rôles sont enregistrés dans la table pg_roles, on peut également les lister via une requête SQL: | Les rôles sont enregistrés dans la table pg_roles, on peut également les lister via une requête SQL: | ||
+ | |||
<code SQL> | <code SQL> | ||
SELECT rolname from pg_roles; | SELECT rolname from pg_roles; | ||
</ | </ | ||
+ | |||
+ | Pour lister les rôles autorisés à se connecter : | ||
+ | <code sql> | ||
+ | SELECT rolname FROM pg_roles WHERE rolcanlogin; | ||
+ | </ | ||
+ | |||
+ | Depuis psql, on peut également utiliser la méta-commande '' | ||
+ | < | ||
+ | \du | ||
+ | </ | ||
+ | |||
+ | ==== Créer/ | ||
Pour créer un nouveau rôle | Pour créer un nouveau rôle | ||
Ligne 61: | Ligne 101: | ||
DROP ROLE mon_role; | DROP ROLE mon_role; | ||
</ | </ | ||
+ | |||
+ | Pour simplifier la gestion des rôles depuis la ligne de commande, il existe également les commandes **createuser** et **dropuser**. | ||
+ | |||
# Par convention un rôle est propriétaire du groupe de catalogues créé, postgres (équivalent super utilisateur) | # Par convention un rôle est propriétaire du groupe de catalogues créé, postgres (équivalent super utilisateur) | ||
Ligne 68: | Ligne 111: | ||
</ | </ | ||
- | Les attributs | + | ===== Les attributs |
- | Yoann est un rôle avec autorisation d’établir une connexion a la base de données (équivaut | + | Les attributs associés au rôle permettent |
+ | |||
+ | Les attributs doivent être explicitement définis lors de la création via la commande [[https:// | ||
<code sql> | <code sql> | ||
- | CREATE ROLE yoann LOGIN | + | CREATE ROLE yoann LOGIN ; |
- | ALTER ROLE yoann SET PASSWORD TO ' | + | |
+ | -- equivalent | ||
+ | CREATE USER yoann ; | ||
</ | </ | ||
- | # Principaux | + | Dans l' |
- | # SUPERUSER: le role a tous les droits | + | |
- | # CREATEDB: le role peut creer de nouvelles bases de données | + | ==== Quelques |
- | # LOGIN: le role peut initer une connexion au serveur | + | |
- | # CREATEROLE: le role peut creer d' | + | * **CREATEDB** : pour permettre la création de base de données ; |
- | # PASSWORD: authentification | + | * **CREATEROLE** : gérer les rôles ; |
+ | * **PASSWORD** : n'est significatif que si la méthode d' | ||
+ | * **CONNECTION LIMIT** : spécifier le nombre de connexions en parallèle autorisées pour un même role (par défaut -1 = illimité). | ||
+ | |||
+ | |||
+ | <code sql> | ||
+ | CREATE USER yoann PASSWORD ' | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Héritage | ||
+ | |||
+ | Par défaut, un rôle **hérite des privilèges**/ | ||
+ | |||
+ | <code sql> | ||
+ | CREATE ROLE aRoleName NOINHERIT ; | ||
+ | </ | ||
+ | |||
+ | Il est également possible de redéfinir spécifiquement le comportement de l' | ||
+ | |||
+ | ===== Appartenance à un role ===== | ||
+ | |||
+ | En général, on utilise les groupes d' | ||
+ | |||
+ | Dans Postgres on crée un role qui représente le groupe. En général un role représentant un groupe n'a pas d' | ||
+ | |||
+ | <code sql> | ||
+ | CREATE ROLE users ; | ||
+ | </ | ||
+ | |||
+ | Une fois que le rôle existe, on peut ajouter ou retirer des membres via les commandes [[https:// | ||
+ | |||
+ | <code sql> | ||
+ | -- Affecter les privilèges du role aGroupeRole à n autres roles | ||
+ | GRANT aGroupRole TO aUserRole1, aUserRole2, ... ; | ||
+ | |||
+ | -- Retirer les privilèges du role aGroupeRole à n autres roles | ||
+ | REVOQUE aGroupRole FROM aUserRole1, aUserRole2, ... ; | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | Le SGDB ne permettra pas : | ||
+ | * Les références circulaires ; | ||
+ | * L' | ||
+ | </ | ||
+ | |||
+ | Les membres d'un rôle peuvent utiliser les droits associés à leur rôle de deux manières | ||
+ | - Les membres affectés avec l' | ||
+ | - Les membres affectés avec l' | ||
+ | |||
+ | <code sql> | ||
+ | -- Creation d'un role "de type utilisateur" | ||
+ | CREATE ROLE joe LOGIN; | ||
+ | |||
+ | -- Creation de roles "de type groupes" | ||
+ | CREATE ROLE admin; | ||
+ | CREATE ROLE wheel; | ||
+ | CREATE ROLE island; | ||
+ | |||
+ | -- joe hérite des privilèges du role admin | ||
+ | GRANT admin TO joe WITH INHERIT TRUE; | ||
+ | |||
+ | -- le role admin est membre de wheel mais les droits spécifiques à | ||
+ | -- wheel ne pourront pas être transmis | ||
+ | GRANT wheel TO admin WITH INHERIT FALSE; | ||
+ | |||
+ | -- joe hérite de island mais ne pourra pas | ||
+ | GRANT island TO joe WITH INHERIT TRUE, SET FALSE; | ||
+ | </ | ||
+ | |||
+ | {{role_membership.png}} | ||
+ | |||
+ | Immédiatement après | ||
+ | |||
+ | |||
+ | Toutefois les privilèges associés à '' | ||
+ | |||
+ | Après la commande | ||
+ | <code sql> | ||
+ | SET ROLE ADMIN; | ||
+ | </ | ||
+ | |||
+ | La session bénéficiera des privilèges associés exclusivement à '' | ||
+ | |||
+ | Après exécution de la commande : | ||
+ | <cdoe sql> | ||
+ | SET ROLE wheel; | ||
+ | </ | ||
+ | |||
+ | La session bénéficiera des privilèges associés exclusivement à '' | ||
+ | |||
+ | <code sql> | ||
+ | RESET ROLE | ||
+ | |||
+ | -- équivalent | ||
+ | SET ROLE NONE; | ||
+ | |||
+ | -- équivalent | ||
+ | SET ROLE joe; | ||
+ | </ | ||
+ | |||
+ | |||
+ | < | ||
+ | La commande **'' | ||
+ | |||
+ | Dans l' | ||
+ | </ | ||
+ | |||
+ | Les attributs **LOGIN**, **SUPERUSER**, | ||
+ | |||
+ | Pour continuer avec l' | ||
+ | |||
+ | |||
+ | Lorsque un rôle de type groupe est supprimé via la commande **'' | ||
+ | |||
+ | ===== Suppression des roles ===== | ||
+ | |||
Droits des roles | Droits des roles | ||
SELECT, INSERT, UPDATE, DELETE, REFERENCES, TRIGGER, CREATE, CONNECT, TEMPORARY, EXECUTE, USAGE | SELECT, INSERT, UPDATE, DELETE, REFERENCES, TRIGGER, CREATE, CONNECT, TEMPORARY, EXECUTE, USAGE | ||
Ligne 90: | Ligne 254: | ||
Le mot clé ALL désigne tous les droits et PUBLIC tous le roles utilisateurs. | Le mot clé ALL désigne tous les droits et PUBLIC tous le roles utilisateurs. | ||
- | #creation d'un groupe (role sans attribut connexion | + | #creation d'un groupe (role sans attribut connexion) |
CREATE ROLE users; | CREATE ROLE users; | ||
Ligne 115: | Ligne 279: | ||
===== Commandes élémentaires ===== | ===== Commandes élémentaires ===== | ||
- | Quelques commandes élémentaires | + | Quelques commandes élémentaires |
+ | |||
+ | Il faut différencier : | ||
+ | * les **métacommandes** qui commencent par le caractère < | ||
+ | * Les **commandes SQL** qui sont transmises au SGBD et qui se terminent par < | ||
+ | |||
+ | |||
+ | ==== Aide ==== | ||
+ | |||
+ | Aide sur les métacommandes psql : | ||
+ | < | ||
+ | \? | ||
+ | </ | ||
+ | |||
+ | Aide mémoire sur les commandes SQL : | ||
+ | < | ||
+ | \h | ||
+ | </ | ||
+ | |||
+ | ==== Affichage du contexte ==== | ||
+ | |||
+ | Afficher les informations de connexion : | ||
+ | < | ||
+ | \conninfo | ||
+ | </ | ||
+ | |||
+ | Afficher ou définir l' | ||
+ | < | ||
+ | \encoding | ||
+ | </ | ||
+ | |||
+ | Affiche l' | ||
+ | <code sql> | ||
+ | SELECT current_user; | ||
+ | </ | ||
+ | |||
+ | Afficher la base de données courante : | ||
+ | <code sql> | ||
+ | SELECT current_catalog; | ||
+ | |||
+ | -- équivalent | ||
+ | SELECT current_database(); | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | Dans la norme SQL on appelle la base de données **catalogue** et les tables **relations**. | ||
+ | </ | ||
+ | |||
+ | Afficher le rôle courant : | ||
+ | <code sql> | ||
+ | SELECT current_role; | ||
+ | </ | ||
+ | |||
+ | Afficher les variables d' | ||
+ | < | ||
+ | \set | ||
+ | </ | ||
+ | |||
+ | Afficher la variable '' | ||
+ | < | ||
+ | \echo :USER | ||
+ | </ | ||
==== Lister les bases ==== | ==== Lister les bases ==== | ||
Ligne 131: | Ligne 357: | ||
==== Lister les tables ==== | ==== Lister les tables ==== | ||
+ | |||
+ | Lister les tables de la base courante : | ||
< | < | ||
\dt | \dt | ||
</ | </ | ||
+ | |||
+ | Pour afficher les informations détaillées de la table '' | ||
+ | < | ||
+ | \d a_table_name | ||
+ | |||
+ | \d+ a_table_name | ||
+ | </ | ||
+ | |||
==== Quitter ==== | ==== Quitter ==== |