Liste des utilisateurs de PostgreSQL
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?
Déjà essayé:
du+ -- no database is Listed not Users
Select * from "pg_users"; -- no database is listed
3 réponses
les utilisateurs ne sont pas réellement, "pour la base de données", ils sont pour le cluster et sont donnés des permissions différentes pour accéder aux bases de données. À la liste des utilisateurs \du
devrait faire, mais vous devez être connectés. Quelque chose comme
psql template1 -c '\du'
à partir de l'invite de ligne de commande devrait le faire. (ou \du
a partir de psql invite lorsque vous êtes connecté à la base de données).
vous devez comprendre que dans PostgreSQL les utilisateurs sont par grappe de bases de données. @Michael démontre déjà comment obtenir une liste de ceux-ci.
donc, sauf si vous restreignez explicitement les permissions pour une base de données particulière avec REVOKE
et GRANT
, tous les utilisateurs du cluster ont accès à une base de données dans le cluster.
pour déterminer si un utilisateur possède en fait un certain privilège ('CONNECT') pour un 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 un base de données:
SELECT datname, datacl
FROM pg_database
WHERE datname = 'mydb';
Vous obtenez NULL
datacl
si aucune restriction particulière ne s'applique.
En outre, vous pouvez restreindre l'accès par base de données et par utilisateur dans le pg_hba.conf
fichier. C'est sur un niveau inférieur. L'utilisateur ne peut pas même se connecter, si pg_hba.conf
ne lui permettra pas, même si la base de données elle-même permettrait l'accès.
Pour la liste des rôles d'utilisateur/
sélectionner rolname de pg_roles;