Eu tenho um banco de dados Postgresql 9.2. Dois usuários são criados neste 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 ter os resultados que um superusuário pode ver?
Neste ponto, não há direito de conceder, é codificado para superusuário. Isso foi discutido na lista de discussão recentemente e pode mudar na versão 9.5 se alguém encontrar tempo para trabalhar nisso.
Como solução alternativa, você pode criar uma
SECURITY DEFINER
função que pertence ao superusuário e executar a consulta desejada. Isso permitirá que não superusuários vejam o conteúdopg_stat_activity
chamando a função.Por exemplo, execute como superusuário:
Observe que o acesso gratuito a
pg_stat_activity
é restrito por um motivo. É possível bisbilhotar informações confidenciais das consultas de outras pessoas - imagine, por exemplo, se outro usuário estiver usando pgcrypto. Em vez de conceder direitos apublic
você, conceda-os apenas a um usuário ou função específica que atuará como um usuário substituto para monitoramento.A partir do PostgreSQL 10, você pode conceder a função
pg_read_all_stats
para obter o resultado desejado.