From 12878f186d80222ce9766b66daf24bb967492cbb Mon Sep 17 00:00:00 2001 From: whirigoyen Date: Mon, 28 Feb 2022 16:02:34 +0100 Subject: [PATCH] =?UTF-8?q?D=C3=A9placement=20des=20instructions=20de=20ge?= =?UTF-8?q?stion=20des=20utilisateurs=20dans=20des=20sous-sections=20d?= =?UTF-8?q?=C3=A9di=C3=A9es=20de=20"Gestion=20des=20utilisateurs=20et=20pe?= =?UTF-8?q?rmissions"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HowtoPostgreSQL.md | 130 +++++++++++++++++++++++++-------------------- 1 file changed, 73 insertions(+), 57 deletions(-) diff --git a/HowtoPostgreSQL.md b/HowtoPostgreSQL.md index 8e228d9d..9476579c 100644 --- a/HowtoPostgreSQL.md +++ b/HowtoPostgreSQL.md @@ -227,6 +227,7 @@ On peut remarquer que toute l'arborescence est organisée en fonction des versio # Gestion des utilisateurs et permissions PostgreSQL permet de lier un utilisateur Unix à un utilisateur PostgreSQL. C'est le cas pour l'utilisateur *postgres* (superadmin PostgreSQL), qui est lié à l'utilisateur Unix *postgres*. + Ainsi pour passer superadmin PostgreSQL : ~~~ @@ -255,6 +256,78 @@ Bien s'assurer que les utilisateurs PostgreSQL ont un mot de passe de défini av Pour plus de détails on pourra consulter la [documentation](https://www.postgresql.org/docs/current/static/auth-pg-hba-conf.html). +## Lister les utilisateurs (ou rôles) + +~~~ +$ su - postgres +$ psql +=# SELECT * FROM pg_user; +~~~ + +On peut utiliser aussi la commande courte PostgreSQL `\du`. + + +## Créer un utilisateur et une base de données + +Note : Par défaut la base sera créée avec l’encodage du système. Si le système est en UTF-8 par défaut, la base créée sera en UTF-8. On peut spécifier un encodage alternatif avec l’option `-E`. + + +### Créer un utilisateur et une base de données liés à un compte Unix + +~~~ +$ su - postgres +$ createuser +$ createdb +~~~ + + +### Créer un utilisateur et une base de données (non-liés à un compte Unix) + +~~~ +$ su - postgres +$ apg -n1 -m15 +$ createuser -P +$ createdb -O +~~~ + + +### Créer un utilisateur avec des droits en lecture seule sur une ou plusieurs bases + +~~~ +$ su - postgres +$ apg -n1 -m15 +$ createuser -P $user +~~~ + +Puis, ajouter les droits : + +~~~ +$ psql -d +=# GRANT CONNECT ON DATABASE TO ; +=# GRANT USAGE ON SCHEMA public TO ; +=# GRANT SELECT ON ALL TABLES IN SCHEMA public TO ; +=# ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO ; +~~~ + +Note : Le schéma `public` est celui par défaut à la création de la base, si aucun schéma n'a été spécifié. + + +## Changer le mot de passe d'un utilisateur + +~~~ +$ su - postgres +$ psql -c "ALTER USER WITH PASSWORD ''" +~~~ + + +## Supprimer un utilisateur + +~~~ +$ su - postgres +$ dropuser +~~~ + + ## pgpass Pour se connecter plus facilement à postgresql (avec `psql` mais aussi `pgdump` etc), on peut utiliser le fichier `~/.pgpass` avec comme format : @@ -328,63 +401,18 @@ UPDATE pg_settings SET setting = 5000 WHERE name = 'log_min_duration_statement'; Toutes les commandes d'administration doivent être exécutées depuis l'utilisateur Unix *postgres*. -* Création d'un utilisateur avec un mot de passe : - -~~~ -$ createuser -P -~~~ - -* Création d'une base de données, en définissant l'utilisateur précédemment créé comme propriétaire de la base : - -~~~ -$ createdb -O -~~~ - -Comme pour les instances, par défaut la base sera créée avec l'encodage du système. Si le système est en UTF-8 par défaut, la base créée sera en UTF-8. On peut spécifier un encodage alternatif avec l'option `-E`. - * Se conmecter avec un utilisateur à une base psql en local : ~~~ postgres:~$ psql -h 127.0.0.1 -U USER -W -d DB ~~~ -* Création d'un utilisateur en lecture seule sur une ou plusieurs bases : - -Il faut tout d'abord créer l'utilisateur comme ceci : - -~~~ -$ createuser -P -~~~ - -Il faut ensuite ajuster les droits pour cet utilisateur sur la ou les bases : - -**On prend exemple sur la base postgres, mais il faudra vous connecter sur la base concerné avec `psql -d ` avec l'user unix postgres** - -~~~ -postgres=# GRANT CONNECT ON DATABASE TO ; -postgres=# GRANT USAGE ON SCHEMA public TO ; -postgres=# GRANT SELECT ON ALL TABLES IN SCHEMA public TO ; -postgres=# ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO ; -~~~ - * Suppression d'une base de données : ~~~ $ dropdb ~~~ -* Mise à jour du mot de passe d'un utilisateur : - -~~~ -$ psql -c "ALTER USER WITH PASSWORD 'foo'" -~~~ - -* Suppression d'un utilisateur : - -~~~ -$ dropuser -~~~ - * Sélectionner une base de données (l'équivalent de *use* dans le monde MySQL) : ~~~ @@ -415,18 +443,6 @@ ou encore : =# \d+ ~~~ -* Lister les utilisateurs (aussi appelés rôles) : - -~~~ -=# SELECT * FROM pg_user; -~~~ - -ou : - -~~~ -=# \du -~~~ - * Lister les indexes : ~~~