Skip to main content

Gérer les utilisateurs

Se connecter à PostgreSQL

psql -h localhost -p 5432 -U <username> -W

Il est possible que la commande psql vous sorte une erreur de type : commande inconnue.

Dans ce cas vous allez devoir vous connecter sur l'utilisateur Linux possédant les droits d'utilisation de la commande psql. 

su - postgres


Lister les utilisateurs 

Dans l'interface de psql :

\du


Créer un utilisateur

Il existe deux commandes différentes pour réaliser cette action.

CREATE USER <username>;

ou

CREATE ROLE <username> WITH LOGIN;


Créer un utilisateur avec l'utilitaire

La création interactive d'un utilisateur est une option pratique disponible uniquement pour l'utilitaire client. Pour créer un utilisateur de manière interactive, exécutez la commande suivante :

sudo -u postgres createuser --interactive


Créer un super utilisateur

Un super utilisateur de base de données contourne toutes les vérifications, ce qui est dangereux du point de vue de la sécurité. Utilisez cette action avec précaution et évitez de travailler avec un compte super utilisateur sauf en cas de nécessité absolue.

Sur PostgreSQL le "super user" est postgres mais dans certain cas il est possible de vouloir créer son propre super user. 

Pour créer un super utilisateur :

CREATE USER <username> SUPERUSER;

Si cet utilisateur doit avoir un mot de passe :

CREATE USER <username> WITH SUPERUSER PASSWORD 'passwordstring';
Mot de passe

Dans le cas ou vous avez créé un utilisateur sans mot de passe il possible de lui rajouter le mot de passe via la commande suivante.

ALTER USER <username> WITH PASSWORD '<password>';

Créer un utilisateur avec des droits

CREATE USER <name> WITH <option>;
Option Syntax PSQL Explanation
-s
--superuser
SUPERUSER Add the superuser privilege.
-S
--no-superuser
NOSUPERUSER No superuser privilege (default).
-d
--createdb
CREATEDB Allows the user to create databases.
-D
--no-createdb
NOCREATEDB Not allowed to create databases (default).
-r
--createrole
CREATEROLE Allows the user to make new roles.
-R
--no-createrole
NOCREATEROLE Not allowed to create roles (default).
-i
--inherit
INHERIT Automatically inherit the privileges of roles (default).
-I
--no-inherit
NOINHERIT Do not inherit privileges of roles.
-l
--login
LOGIN Allows the user to log into a session with the role name (default).
-L
--no-login
NOLOGIN Not allowed to log into a session with the role name.
--replication REPLICATION Allows initiating streaming replication and activating/deactivating backup mode.
--no-replication NOREPLICATION Not allowed to initiate streaming replication or backup mode (default).
-P
--pwprompt
PASSWORD '<password>' Initiates password creation prompt or adds provided password to the user. Avoid using this option to create a passwordless user.
/ PASSWORD NULL Specifically sets the password to null. Every password authentication fails for this user.
-c <number>
--connection-limit=<number>
CONNECTION LIMIT <number> Sets the maximum number of connections for user. Default is without limit.


Changer les droits d'un utilisateur

Par exemple pour donner les droits de création d'une base de donnée a un utilisateur :

ALTER USER <username> CREATEDB;

Dans le même ordre d'idée on peux donner les droits super utilisateur :

ALTER USER <username> WITH SUPERUSER;

Mais aussi les enlever :

ALTER USER <username> WITH NOSUPERUSER;

Changer le mot de passe d'un utilisateur

ALTER USER user_name WITH PASSWORD 'new_password';

Supprimer un utilisateur

DROP USER [IF EXISTS] <username>;

Si l'utilisateur que vous essayez de supprimer possède des dépendances, la suppression échouera.

Vous allez devoir transférer les dépendances a un autre utilisateur. 

1) Par exemple, pour transférer les objets appartenant à myuser à postgres, exécutez :

REASSIGN OWNED BY <old_user> TO <new_user>;

 2) Supprimer les connexions de l'objet de la base de données à l'utilisateur avec :

DROP OWNED BY <username>;

3) Maintenant vous pouvez supprimer l'utilisateur


Supprimer un rôle 

DROP ROLE [IF EXISTS] <name>;


Donner l'accès à une BDD à un utilisateur

GRANT ALL PRIVILEGES ON DATABASE <db_name> TO <username>;