Vazamendo de Dados através de Notificações (mensagens e erros) no PostgreSQL - Por quê VIEWs não garantem segurança?
Imagine que há uma função de nome "print" no banco que emita o valor passado como parâmetro em uma mensagem de log tipo DEBUG, LOG, INFO, NOTICE, WARNING ou EXCEPTION.
E que um usuário tenha acesso direto ao banco (e aos logs de mensagens de uma query) entretanto tenha suas permissões controladas através de VIEWs.
Ele pode usar esta função "print" para visualizar dados sigilosos, chamando-a dentro da cláusula WHERE ao chamar a VIEW "protegida".
Como se defender disso?
Qualquer uma das opções abaixo podem resolver a vulnerabilidade:
- Não ter funções estilo a "print" no banco.
- Não permitir que usuarios não confiáveis tenham acesso a função "print" caso ela exista.
- Criar as VIEWs em questão com o comando "WITH (security_barrier)"
- Usar ROW LEVEL SECURITY
Referências
Como Security Barriers funcionam no PostgreSQL?
https://www.2ndquadrant.com/en/blog/how-do-postgresql-security_barrier-views-work/