J'ai une obligation d'audit pour interroger tous les rôles accordés aux utilisateurs; répertorié par utilisateur. Par exemple:
Username Roles
user1 role1_rw, role2_ro, rol3_rw
user2 role2_rw
Je ne peux pas utiliser les méta-commandes psql car cet ensemble de résultats sera fusionné avec d'autres requêtes pour effectuer une analyse des subventions. Les rôles ont été créés pour gérer l'accès ro/rw à divers schémas d'application. Dans Oracle, c'est assez simple; Je ne vois pas une seule vue pour retourner cela à Postgres. L'utilisateur interrogateur est un superutilisateur.
Quelqu'un at-il une question à renvoyer? Postgres 9.4 sur Ubuntu
Vous pouvez voir les utilisateurs utilisant le client psql
avec l'option \du+
(comme @dezso déjà expliqué).
Mais si vous le souhaitez, vous pouvez faire une requête sur pg_roles
, par exemple:
SELECT
r.rolname,
r.rolsuper,
r.rolinherit,
r.rolcreaterole,
r.rolcreatedb,
r.rolcanlogin,
r.rolconnlimit, r.rolvaliduntil,
ARRAY(SELECT b.rolname
FROM pg_catalog.pg_auth_members m
JOIN pg_catalog.pg_roles b ON (m.roleid = b.oid)
WHERE m.member = r.oid) as memberof
, r.rolreplication
, r.rolbypassrls
FROM pg_catalog.pg_roles r
ORDER BY 1;
Veuillez consulter la documentation pour plus de détails: https://www.postgresql.org/docs/current/static/user-manag.html
+1 pour Sebastian réponse .
Je n'ai pas la réputation d'ajouter un commentaire mais j'aimerais également répondre à la question de RonJohn. rolbypassrls
a été introduit dans la version postgresql 9.5
. Vous pouvez le voir en comparant le pg_roles
page doc entre les versions 9.4 et 9.5 . (Vous pouvez également remarquer que l'autre différence est que rolcatupdate
a été supprimée)
Voici l'extrait de Sebastion simplement ajusté pour la colonne manquante:
SELECT
r.rolname,
r.rolsuper,
r.rolinherit,
r.rolcreaterole,
r.rolcreatedb,
r.rolcanlogin,
r.rolconnlimit, r.rolvaliduntil,
ARRAY(SELECT b.rolname
FROM pg_catalog.pg_auth_members m
JOIN pg_catalog.pg_roles b ON (m.roleid = b.oid)
WHERE m.member = r.oid) as memberof
, r.rolreplication
FROM pg_catalog.pg_roles r
ORDER BY 1;