20.5. Autenticação por senha #

Existem vários métodos de autenticação baseados em senha. Estes métodos operam de maneira semelhante, mas diferem sobre como as senhas dos usuários são armazenadas no servidor, e como a senha fornecida pelo cliente é enviada pela conexão.

scram-sha-256

O método scram-sha-256 realiza a autenticação SCRAM-SHA-256, conforme descrito no RFC 7677 [134]. É um esquema de desafio-resposta que evita a detecção de senhas em conexões não seguras, ​​e oferece suporte ao armazenamento de senhas no servidor em um formato de hash criptográfico que é considerado seguro.

Este é o mais seguro dos métodos fornecidos no momento, mas não possui suporte por bibliotecas de cliente mais antigas.

md5

O método md5 usa um mecanismo personalizado menos seguro de desafio-resposta. Este método impede a detecção de senhas, e evita o armazenamento de senhas no servidor em texto puro (não encriptado), mas não oferece proteção se o invasor conseguir roubar o hash da senha no servidor. Além disso, atualmente o algoritmo de hash MD5 não é mais considerado seguro contra determinados ataques.

Para facilitar a transição do método md5 para o método SCRAM mais recente, se for especificado md5 como método no arquivo pg_hba.conf, mas a senha do usuário no servidor estiver encriptada para SCRAM, (veja abaixo), então será escolhida a autenticação baseada em SCRAM automaticamente.

Atenção

O suporte para senhas encriptadas por MD5 está obsoleto e será removido em uma versão futura do PostgreSQL. Consulte o texto abaixo para obter detalhes sobre como migrar para outro tipo de senha.

password

O método password envia a senha em texto limpo e, portanto, é vulnerável a ataques de farejamento (sniffing) de senha. Deve ser sempre evitado, se possível. Se a conexão for protegida por encriptação SSL, o método password poderá ser usado com segurança. (Embora a autenticação por certificado SSL possa ser uma escolha melhor, se alguém depender do uso de SSL).

As senhas do banco de dados PostgreSQL são separadas das senhas de usuário do sistema operacional. A senha para cada usuário do banco de dados é armazenada no catálogo do sistema pg_authid. As senhas podem ser gerenciadas com os comandos SQL CREATE ROLE e ALTER ROLE, por exemplo, CREATE ROLE foo WITH LOGIN PASSWORD 'segredo', ou com o meta-comando \password do psql. Se não for configurada nenhuma senha para o usuário, a senha armazenada será nula, e a autenticação por senha sempre irá falhar para este usuário.

A disponibilidade dos diferentes métodos de autenticação baseados em senha depende de como a senha de um usuário no servidor é encriptada (ou hashed, para ser mais preciso). Isto é controlado pelo parâmetro de configuração password_encryption no momento em que a senha é definida. Se a senha foi encriptada usando a configuração scram-sha-256, então ela poderá ser usada pelos métodos de autenticação scram-sha-256 e password (mas a transmissão da senha será feita em texto puro no último caso). A especificação do método de autenticação md5 mudará automaticamente para usar o método scram-sha-256 neste caso, conforme explicado acima, portanto também funcionará. Se a senha tiver sido encriptada usando a configuração md5, ela poderá ser usada apenas para as especificações de método de autenticação md5 e password (novamente, com a senha transmitida em texto puro no último caso). (As versões anteriores do PostgreSQL forneciam suporte ao armazenamento da senha no servidor em texto limpo. Isto não é mais possível.) Para consultar os hashes de senha armazenados no momento, deve-se consultar o catálogo do sistema pg_authid.

Para atualizar uma instalação existente de md5 para scram-sha-256, após garantir que todas as bibliotecas de cliente em uso sejam novas o suficiente para oferecer suporte a SCRAM, deve-se definir password_encryption = 'scram-sha-256' no arquivo postgresql.conf, fazer com que todos os usuários definam novas senhas, e alterar as especificações do método de autenticação no arquivo pg_hba.conf para scram-sha-256.



[134] RFC 7677: Este documento registra os mecanismos SASL (Simple Authentication and Security Layer) SCRAM-SHA-256 e SCRAM-SHA-256-PLUS, fornece orientação para implementação segura do mecanismo original SCRAM-SHA-1-PLUS, e atualiza os procedimentos de registro SCRAM da RFC 5802. (N. T.)