Comment puis-je interroger tous les GRANTS accordés à un objet dans postgres?
Par exemple j'ai la table "ma table":
GRANT SELECT, INSERT ON mytable TO user1
GRANT UPDATE ON mytable TO user2
J'ai besoin de quelque chose qui me donne:
user1: SELECT, INSERT
user2: UPDATE
sql
postgresql
grant
Markus
la source
la source
\z
, sont pour psql. Et psql est l'interface de ligne de commande de PostgreSQL.Si vous voulez vraiment une ligne par utilisateur, vous pouvez grouper par bénéficiaire (nécessite PG9 + pour string_agg)
Cela devrait générer quelque chose comme:
la source
GRANT
sorties exactes comme pg_dump?La requête ci-dessous vous donnera une liste de tous les utilisateurs et leurs autorisations sur la table dans un schéma.
Plus de détails sur
has_table_privilages
peuvent être trouvés ici .la source
has_table_privilege(usename, contact(schemaname, '.', tablename), ...)
d'éviter toute ambiguïté.Cette requête répertorie toutes les tables de toutes les bases de données et schémas (décommentez la ou les lignes dans la
WHERE
clause pour filtrer des bases de données, des schémas ou des tables spécifiques), avec les privilèges affichés dans l'ordre afin qu'il soit facile de voir si un privilège spécifique est accordé ou non:Exemple de sortie:
la source
Ajout de la réponse de @ shruti
Pour interroger les octrois pour toutes les tables d'un schéma pour un utilisateur donné
la source
FROM pg_tables AS a CROSS JOIN pg_user AS b
plutôt que la manière SQL 92 de le faire avec une virgulefrom pg_tables a, pg_user b
Voici un script qui génère des requêtes d'octroi pour une table particulière. Il omet les privilèges du propriétaire.
la source