Como posso consultar todos os GRANTS concedidos a um objeto no postgres?
Por exemplo, tenho a tabela "mytable":
GRANT SELECT, INSERT ON mytable TO user1
GRANT UPDATE ON mytable TO user2
Eu preciso de algo que me dê:
user1: SELECT, INSERT
user2: UPDATE
sql
postgresql
grant
Markus
fonte
fonte
\z
, são para psql. E o psql é a interface de linha de comando do PostgreSQL.Se você realmente deseja uma linha por usuário, pode agrupar por beneficiário (requer PG9 + para string_agg)
Isso deve resultar em algo como:
fonte
GRANT
as saídas do pg_dump?A consulta abaixo fornecerá uma lista de todos os usuários e suas permissões na tabela em um esquema.
Mais detalhes sobre
has_table_privilages
podem ser encontrados aqui .fonte
has_table_privilege(usename, contact(schemaname, '.', tablename), ...)
para evitar ambigüidades.Esta consulta irá listar todas as tabelas em todos os bancos de dados e esquemas (descomente a (s) linha (s) na
WHERE
cláusula para filtrar por bancos de dados, esquemas ou tabelas específicos), com os privilégios mostrados em ordem para que seja fácil ver se um privilégio específico é concedido ou não:Saída de amostra:
fonte
Adicionando à resposta de @ shruti
Para consultar concessões para todas as tabelas em um esquema para um determinado usuário
fonte
FROM pg_tables AS a CROSS JOIN pg_user AS b
em vez da maneira SQL 92 de fazer isso com uma vírgulafrom pg_tables a, pg_user b
Aqui está um script que gera consultas de concessão para uma tabela específica. Ele omite os privilégios do proprietário.
fonte