it-swarm.com.de

postgres: Liste der Rollengewährungen für alle Benutzer

Ich habe eine Überwachungsanforderung, um alle Rollen abzufragen, die Benutzern gewährt wurden. vom Benutzer aufgelistet. Zum Beispiel:

Username   Roles
user1      role1_rw, role2_ro, rol3_rw
user2      role2_rw

Ich kann keine psql-Meta-Befehle verwenden, da diese Ergebnismenge mit einigen anderen Abfragen zusammengeführt wird, um die Zuschüsse zu analysieren. Die Rollen wurden erstellt, um den Ro/RW-Zugriff auf verschiedene Anwendungsschemata zu verwalten. In Oracle ist dies recht einfach. Ich sehe keine einzige Ansicht, um dies in Postgres zurückzugeben. Der abfragende Benutzer ist ein Superuser.

Hat jemand eine Anfrage, um dies zurückzugeben? Postgres 9.4 auf Ubuntu

5
MarkTeehan

Sie können die Benutzer sehen, die den Client psql mit der Option \du+ Verwenden (wie bereits @dezso erklärt).

Wenn Sie möchten, können Sie jedoch eine Abfrage zu pg_roles Durchführen, z.

  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;

Weitere Informationen finden Sie in der Dokumentation: https://www.postgresql.org/docs/current/static/user-manag.html

7

+1 für Sebastians Antwort .

Ich habe nicht den Ruf, einen Kommentar hinzuzufügen, aber ich möchte auch RonJohns Frage beantworten. rolbypassrls wurde in der postgresql-Version 9.5 eingeführt. Sie können dies sehen, indem Sie die Dokumentseite pg_roles Zwischen den Versionen 9.4 und 9.5 vergleichen. (Möglicherweise stellen Sie auch fest, dass der andere Unterschied darin besteht, dass rolcatupdate entfernt wurde.)

Hier ist Sebastions Snippet, das einfach für die fehlende Spalte angepasst wurde:

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