Wie kann ich alle GRANTS abfragen, die einem Objekt in Postgres gewährt wurden?
Zum Beispiel habe ich Tabelle "mytable":
GRANT SELECT, INSERT ON mytable TO user1
GRANT UPDATE ON mytable TO user2
Ich brauche etwas, das mir gibt:
user1: SELECT, INSERT
user2: UPDATE
sql
postgresql
grant
Markus
quelle
quelle
\z
für psql. Und psql ist die Befehlszeilenschnittstelle zu PostgreSQL.Wenn Sie wirklich eine Zeile pro Benutzer möchten, können Sie nach Berechtigten gruppieren (PG9 + für string_agg erforderlich).
Dies sollte ungefähr Folgendes ausgeben:
quelle
GRANT
s wie pg_dump-Ausgaben haben?Versuchen Sie die folgende Abfrage. Sie erhalten eine Liste aller Benutzer und ihrer Berechtigungen für die Tabelle.
quelle
has_table_privilege(usename, contact(schemaname, '.', tablename), ...)
, um Mehrdeutigkeiten zu vermeiden.Diese Abfrage listet alle Tabellen in allen Datenbanken und Schemas auf (kommentieren Sie die Zeile (n) in der
WHERE
Klausel aus, um nach bestimmten Datenbanken, Schemas oder Tabellen zu filtern), wobei die Berechtigungen der Reihe nach angezeigt werden, damit Sie leicht erkennen können, ob Ein bestimmtes Privileg wird gewährt oder nicht:Beispielausgabe:
quelle
Hinzufügen zu @ shrutis Antwort
Abfragen von Berechtigungen für alle Tabellen in einem Schema für einen bestimmten Benutzer
quelle
FROM pg_tables AS a CROSS JOIN pg_user AS b
anstelle der SQL 92-Methode, dies mit einem Komma zu tunfrom pg_tables a, pg_user b
Hier ist ein Skript, das Grant-Abfragen für eine bestimmte Tabelle generiert. Es werden die Privilegien des Besitzers weggelassen.
quelle