Je veux obtenir une liste d'utilisateurs pour une certaine base de données dans psql - par exemple "template0". Qui sont les utilisateurs? Ou pour la base de données "template1": - qui sont les utilisateurs là-bas?
Déjà essayé:
\du+ -- no database is Listed not Users
Select * from "pg_users"; -- no database is listed
Les utilisateurs ne sont pas réellement "pour la base de données", ils sont pour le cluster et reçoivent des autorisations différentes pour accéder aux bases de données. Pour répertorier les utilisateurs \du
devrait suffire, mais vous devez être connecté. Quelque chose comme
psql template1 -c '\du'
à partir de l'invite de ligne de commande devrait faire. (ou \du
de l'invite psql lorsque vous êtes connecté à la base de données).
Vous devez comprendre que dans PostgreSQL, les utilisateurs sont par cluster de base de données . @Michael montre déjà comment obtenir une liste de ceux-ci.
Ainsi, sauf si vous limitez explicitement les autorisations pour une base de données particulière avec REVOKE
et GRANT
, tous les utilisateurs du cluster ont un accès de base à n'importe quelle base de données du cluster.
Pour déterminer si un utilisateur spécifique a réellement un certain privilège ('CONNECT') pour une base de données:
has_database_privilege(user, database, privilege)
En savoir plus sur fonctions de privilège dans le manuel .
Pour déterminer tous les privilèges spécifiques pour une base de données spécifique :
SELECT datname, datacl
FROM pg_database
WHERE datname = 'mydb';
Vous obtenez NULL
pour datacl
si aucune restriction spécifique ne s'applique.
En plus de cela, vous pouvez restreindre l'accès par base de données et par utilisateur dans le pg_hba.conf
fichier. C'est à un niveau inférieur. L'utilisateur ne peut même pas se connecter si pg_hba.conf
ne le laissera pas, même si la base de données elle-même permettrait l'accès.
Pour répertorier les rôles/utilisateur
sélectionnez rolname dans pg_roles;