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.
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.)