web-dev-qa-db-fra.com

postgres: liste des attributions de rôles pour tous les utilisateurs

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

5
MarkTeehan

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

7
Sebastian Webber

+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;
4
boweeb