Outils pour utilisateurs

Outils du site


software:applications:postgresql:start

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
software:applications:postgresql:start [2025/03/22 14:23] yoannsoftware:applications:postgresql:start [2025/03/25 21:52] (Version actuelle) yoann
Ligne 149: Ligne 149:
 Il est également possible de redéfinir spécifiquement le comportement de l'héritage sur une requête ''GRANT'' en utilisant ''WITH INHERIT TRUE'' ou ''WITH INHERIT FALSE''. Il est également possible de redéfinir spécifiquement le comportement de l'héritage sur une requête ''GRANT'' en utilisant ''WITH INHERIT TRUE'' ou ''WITH INHERIT FALSE''.
  
-===== Appartenance au role =====+===== Appartenance à un role =====
  
-En général, on utilise les groupes d'utilisateurs pour gérer plus facilement les droits : de cette manière les opérations d'affectation (GRANT) ou de révocation (REVOKE) de droits sur le groupe s'appliquent à l'ensemble des membres.+En général, on utilise les groupes d'utilisateurs pour gérer plus facilement les droits : de cette manière les opérations d'affectation (GRANT) ou de révocation (REVOKE) de droits sur le groupe s'appliquent à l'ensemble des utilisateurs membres.
  
 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'attribut LOGIN (même s'il peut être définit si besoin). 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'attribut LOGIN (même s'il peut être définit si besoin).
Ligne 176: Ligne 176:
  
 Les membres d'un rôle peuvent utiliser les droits associés à leur rôle de deux manières : 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'option ''SET'' positionnée peuvent utiliser la commande ''SET ROLE'' pour devenir temporairement le role parent lui-même. De cette manière la session à accès aux privilèges du rôle de groupe à la place du rôle de login initial et tout objet créé est considéré comme appartenant au rôle de groupe et non au rôle de login initial. +  - Les membres affectés avec l'option ''SET TRUE'' positionnée peuvent utiliser la commande ''SET ROLE'' pour devenir temporairement le rôle parent lui-même. De cette manière la session à accès aux privilèges du rôle de groupe à la place du rôle de login initial et tout objet créé est considéré comme appartenant au rôle de groupe et non au rôle de login initial. 
-  - Les membres affectés avec l'option ''INHERIT'' au role de groupe, bénéficient de l'ensemble des droits hérités directement ou indirectement au role jusqu'ce que la chaine soit interrompue par un membre n'ayant pas l'option d'héritage active.+  - Les membres affectés avec l'option ''INHERIT'' au rôle de groupe, bénéficient de l'ensemble des droits hérités directement ou indirectement au rôle jusqu’à ce que la chaine soit interrompue par un membre n'ayant pas l'option d'héritage active.
  
 <code sql> <code sql>
Ligne 191: Ligne 191:
 GRANT admin TO joe WITH INHERIT TRUE; GRANT admin TO joe WITH INHERIT TRUE;
  
--- le role admin est membre de wheel mais ne pourra pas transmettre héritage de privileges+-- 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; 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; GRANT island TO joe WITH INHERIT TRUE, SET FALSE;
 </code> </code>
  
 +{{role_membership.png}}
  
 Immédiatement après connexion avec le rôle ''joe'' la session bénéficie des privilèges associés directement au role ''joe'' plus ceux des rôles ''admin'' et ''island'' car ''joe'' hérite de leurs privilèges. Immédiatement après connexion avec le rôle ''joe'' la session bénéficie des privilèges associés directement au role ''joe'' plus ceux des rôles ''admin'' et ''island'' car ''joe'' hérite de leurs privilèges.
Ligne 203: Ligne 206:
 Toutefois les privilèges associés à ''wheel'' ne sont pas disponibles pour ''joe'' car même s'il est indirectement un membre de ''wheel'' cette appartenance se fait au travers du role ''admin'' sans héritage (INHERIT FALSE). Toutefois les privilèges associés à ''wheel'' ne sont pas disponibles pour ''joe'' car même s'il est indirectement un membre de ''wheel'' cette appartenance se fait au travers du role ''admin'' sans héritage (INHERIT FALSE).
  
 +Après la commande :
 +<code sql>
 +SET ROLE ADMIN;
 +</code>
 +
 +La session bénéficiera des privilèges associés exclusivement à ''admin'' et non ceux associés à ''joe'' ou ''island''.
 +
 +Après exécution de la commande :
 +<cdoe sql>
 +SET ROLE wheel;
 +</code>
 +
 +La session bénéficiera des privilèges associés exclusivement à ''wheel'' et non ceux associés à ''joe'' ou ''admin''. Pour restaurer les droits initiaux :
 +
 +<code sql>
 +RESET ROLE
 +
 +-- équivalent
 +SET ROLE NONE;
 +
 +-- équivalent
 +SET ROLE joe;
 +</code>
 +
 +
 +<note>
 +La commande **''SET ROLE''** permet de sélectionner tous les rôles auxquels le rôle de login est directement ou indirectement associé par l'enchainement des appartenances et pour lesquels l'option ''SET TRUE'' est positionnée.
 +
 +Dans l'exemple ci-dessus il n'est pas nécessaire de devenir admin avant de passer wheel mais il est impossible de devenir island. Le role joe bénéficie des droits de island seulement via l'héritage.
 +</note>
 +
 +Les attributs **LOGIN**, **SUPERUSER**, **CREATEDB** et **CREATEROLE** sont des droits spécifiques et ne peuvent pas être hérités comme les autres privilèges. Vous devez utiliser la commande ''SET ROLE'' pour utiliser un role ayant ces attributs.
 +
 +Pour continuer avec l'exemple précédent, on pourrait affecter au rôle ''admin'' à les attributs ''CREATEDB'' et ''CREATEROLE''. La session initiée avec le role de login ''joe'' n'aura pas accès à ces privilèges immédiatement : elle devra utiliser la commande **''SET ROLE admin''**.
 +
 +
 +Lorsque un rôle de type groupe est supprimé via la commande **''DROP ROLE aGroupeRole''** les roles membres du groupe sont automatiquement retirés mais ne sont pas autrement affectés.
  
 +===== 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 238: Ligne 279:
 ===== Commandes élémentaires ===== ===== Commandes élémentaires =====
  
-Quelques commandes élémentaires exécuter depuis le client postgres **psql** après authentification.+Quelques commandes élémentaires à exécuter depuis le client postgres **psql** après authentification. 
 + 
 +Il faut différencier : 
 +  * les **métacommandes** qui commencent par le caractère <key>\</key> et ne se terminent pas par <key>;</key> : elles sont propres au **client psql** et sont interprétées directement par lui  ; 
 +  * Les **commandes SQL** qui sont transmises au SGBD et qui se terminent par <key>;</key>
 + 
 + 
 +==== Aide ==== 
 + 
 +Aide sur les métacommandes psql : 
 +<code> 
 +\? 
 +</code> 
 + 
 +Aide mémoire sur les commandes SQL : 
 +<code> 
 +\h 
 +</code> 
 + 
 +==== Affichage du contexte ==== 
 + 
 +Afficher les informations de connexion : 
 +<code> 
 +\conninfo 
 +</code> 
 + 
 +Afficher ou définir l'encodage du client : 
 +<code> 
 +\encoding 
 +</code> 
 + 
 +Affiche l'utilisateur courant : 
 +<code sql> 
 +SELECT current_user; 
 +</code> 
 + 
 +Afficher la base de données courante : 
 +<code sql> 
 +SELECT current_catalog; 
 + 
 +-- équivalent 
 +SELECT current_database(); 
 +</code> 
 + 
 +<note> 
 +Dans la norme SQL on appelle la base de données **catalogue** et les tables **relations**.  
 +</note> 
 + 
 +Afficher le rôle courant : 
 +<code sql> 
 +SELECT current_role; 
 +</code> 
 + 
 +Afficher les variables d'environnement : 
 +<code> 
 +\set 
 +</code> 
 + 
 +Afficher la variable ''USER''
 +<code> 
 +\echo :USER 
 +</code> 
  
 ==== Lister les bases ==== ==== Lister les bases ====
Ligne 254: Ligne 357:
  
 ==== Lister les tables ==== ==== Lister les tables ====
 +
 +Lister les tables de la base courante :
  
 <code> <code>
 \dt \dt
 </code> </code>
 +
 +Pour afficher les informations détaillées de la table ''a_table_name'' (nom des champs, type, clés etc):
 +<code>
 +\d a_table_name
 +
 +\d+ a_table_name
 +</code>
 +
  
 ==== Quitter ==== ==== Quitter ====
software/applications/postgresql/start.1742653435.txt.gz · Dernière modification : 2025/03/22 14:23 de yoann