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/08/10 07:50] – yoann | software:applications:postgresql:start [2025/03/25 21:52] (Version actuelle) – yoann | ||
|---|---|---|---|
| Ligne 21: | Ligne 21: | ||
| </ | </ | ||
| - | - Création du groupe de base de données = groupe de catalogues; | + | - Création du groupe de base de données = groupe de catalogues ; |
| - | - Initialiser un emplacement de stockage pour les bases de données avec la commande initdb | + | - Initialiser un emplacement de stockage pour les bases de données avec la commande |
| - | - commande à invoquer sous l' | + | - commande à invoquer sous l’utilisateur exécutant |
| - La commande se charge de créer la base systeme pg_database et le super utilisateur postgres | - La commande se charge de créer la base systeme pg_database et le super utilisateur postgres | ||
| Ligne 41: | Ligne 41: | ||
| </ | </ | ||
| - | Dans PostgreSQL les droits d' | + | ===== Les rôles ===== |
| - | Un rôle possède des objet et peut affecter des droits d' | ||
| - | Les rôles 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 65: | 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 72: | 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 attributs des roles | + | Dans l'exemple ci-dessus '' |
| - | # SUPERUSER: le role a tous les droits | + | |
| - | # CREATEDB: le role peut creer de nouvelles bases de données | + | |
| - | # LOGIN: le role peut initer | + | |
| - | # CREATEROLE: le role peut creer d'autres roles | + | |
| - | # PASSWORD: authentification | + | |
| + | ==== Quelques attributs ==== | ||
| + | |||
| + | * **CREATEDB** : pour permettre la création de base de données ; | ||
| + | * **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 des privilèges ==== | ||
| + | |||
| + | 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 connexion avec le rôle '' | ||
| + | |||
| + | |||
| + | 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 94: | 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 119: | 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 135: | 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 ==== | ||