Estou no meio de uma migração de servidor de banco de dados e não consigo descobrir (depois de pesquisar e pesquisar aqui) como posso listar os privilégios do banco de dados (ou todos os privilégios no servidor) no PostgreSQL usando a psql
ferramenta de linha de comando?
Estou no Ubuntu 11.04 e minha versão do PostgreSQL é 8.2.x.
Os documentos sobre Privilégios fornecem uma explicação de como interpretar a saída. Para privilégios específicos em uma tabela do banco de dados atual, use
\z myTable
.talvez você queira listar usuários e seus privilégios para um banco de dados - não posso dizer com a pergunta:
Você pode fazer isso seguindo:
Isso lhe dá este tipo de saída:
Usando
psql
meta-comandos:https://www.postgresql.org/docs/current/static/app-psql.html
Percorrer a página com Ctrl + F dá:
Também mencionado acima, mas não encontrado com a palavra "privilégios" na página de manual:
\du+
para funções com login e\dg+
para funções sem - terá um arquivo"Member of"
onde você encontra funções concedidas a funções.Eu deliberadamente pulo privilégios de função e idioma aqui, encontrados no
psql
manual como mal manipulados (e se você usar esses privilégios, não virá aqui para um conselho). mesmo para tipos definidos pelo usuário, domínios e assim por diante - usar "+" após o meta-comando mostrará privilégios, se aplicável.Uma maneira um pouco extrema de verificar os privilégios é descartar o usuário na transação, por exemplo:
Quando a lista é maior que N, (pelo menos em 9.3), o aviso com a lista de privilégios é recolhido, mas você ainda pode encontrá-lo cheio nos logs...
Undercovers psql usa a consulta abaixo quando você emite o
\du
comando.É assim que você pode listar todos os privilégios de uma função (concedido):
Vai resultar em:
Funciona no PG 10
Uma etapa adicional (possivelmente óbvia) é se tornar o usuário postgres, caso contrário, você poderá obter erros sobre funções não existentes.
ou
Esta é a minha consulta composta por várias respostas sobre esta pergunta:
Isso resulta em algo assim:
Você pode inserir seguindo:
e você vai conseguir
talvez aqui você pense que há muitos papéis e, desta vez, você pode usar WHERE para selecionar qual papel deseja ver
Na verdade, você também pode simplesmente inserir
e você verá todas as funções que criou em vez do padrão
listar proprietários de banco de dados
docs: pg_database e pg_roles
relacionado: teste para um privilégio específico:
docs: has_database_privilege ( via )