Eu tenho um banco de dados Postgresql 9.2. Dois usuários são criados nesse banco de dados. Quando executo a seguinte consulta como superusuário, posso ver tudo.
select * from pg_stat_activity
No entanto, é possível obter o mesmo resultado sem estar conectado como superusuário?
Qual privilégio / função devo conceder / criar para obter os resultados que um superusuário pode ver?
postgresql
postgresql-9.2
permissions
role
Stephan
fonte
fonte
Respostas:
Neste ponto, não há o direito de conceder, é codificado para o superusuário. Isso tem sido discutido recentemente na lista de discussão e pode mudar na versão 9.5 se alguém encontrar tempo para trabalhar nela.
Como solução alternativa, você pode criar uma
SECURITY DEFINER
função pertencente ao superusuário e executar a consulta desejada. Isso permitirá que não-usuários vejam o conteúdopg_stat_activity
chamando a função.Por exemplo, execute como um superusuário:
Observe que o acesso gratuito a
pg_stat_activity
é restrito por um motivo. É possível bisbilhotar informações confidenciais de consultas de outras pessoas - imagine, por exemplo, se outro usuário estivesse usando pgcrypto. Em vez de conceder direitos,public
você deve concedê-los apenas a um usuário ou função específico que deve atuar como um usuário substituto para monitoramento.fonte
A partir do PostgreSQL 10, você pode conceder a função
pg_read_all_stats
para alcançar o resultado desejado.fonte