A autenticação de cliente é controlada por um arquivo de configuração
armazenado no diretório de dados do agrupamento de bancos de dados,
que tradicionalmente se chama pg_hba.conf.
(HBA significa autenticação baseada no hospedeiro/
host-based authentication.)
Quando o diretório de dados é inicializado pelo utilitário
initdb, é instalado o arquivo
pg_hba.conf padrão.
É possível mudar a especificação do arquivo de configuração
da autenticação de cliente; veja o parâmetro de configuração
hba_file.
O arquivo pg_hba.conf é lido na ativação e
quando o processo principal do servidor recebe um sinal
SIGHUP.
Se o arquivo for editado em um sistema ativo, será necessário enviar
um sinal para o postmaster
(usando pg_ctl reload, chamando a função
SQL pg_reload_conf(),
ou usando kill -HUP) para que seja relido o arquivo.
A afirmação anterior não é verdadeira no
Microsoft Windows:
neste caso, quaisquer alterações no arquivo
pg_hba.conf são aplicadas imediatamente pelas
novas conexões subsequentes.
A visão do sistema pg_hba_file_rules
pode ser útil para testar previamente alterações no arquivo
pg_hba.conf, ou para diagnosticar problemas caso
o carregamento do arquivo não tenha produzido os efeitos esperados.
As linhas na visão com campos error não
nulos indicam problemas nas linhas correspondentes do arquivo.
O formato geral do arquivo pg_hba.conf é um
conjunto de registros, um por linha.
As linhas em branco são ignoradas, assim como qualquer texto após
o caractere de comentário #.
O registro pode ser continuado na próxima linha, terminando a linha
por uma contrabarra (como visto abaixo e no
Exemplo 20.3) (as contrabarras
não são caracteres especiais, exceto no final da linha.)
O registro é composto por vários campos separados por espaços e/ou
tabulações.
Os campos poderão conter espaços em branco, se o valor do campo
estiver entre aspas.
Delimitar uma palavra-chave nos campos de banco de dados, usuário ou
endereço (por exemplo, all ou
replication), faz com que a palavra-chave perca
seu significado especial, e corresponda apenas ao banco de dados,
usuário ou hospedeiro com este nome.
A contrabarra de continuação da linha se aplica mesmo em
texto delimitado ou comentários.
Cada registro de autenticação especifica um tipo de conexão, um intervalo de endereços de IP do cliente (se relevante para o tipo de conexão), um nome de banco de dados, um nome de usuário e o método de autenticação a ser usado para conexões que correspondam a estes parâmetros. O primeiro registro que apresentar correspondência em tipo de conexão, endereço do cliente, banco de dados requisitado e nome de usuário será usado para realizar a autenticação. Não há continuação (“fall-through” ou “backup”): se um registro for escolhido e a autenticação falhar, os registros subsequentes não serão considerados. Se nenhum registro corresponder, o acesso será negado.
Cada registro pode ser uma diretiva de inclusão ou um registro de
autenticação.
As diretivas de inclusão especificam arquivos que podem ser incluídos
e que contêm registros adicionais.
Os registros serão inseridos no lugar das diretivas de inclusão.
As diretivas de inclusão contêm apenas dois campos: a diretiva
include, include_if_exists ou
include_dir e o arquivo ou diretório a ser incluído.
O arquivo ou diretório pode ser um caminho relativo, ou absoluto,
e pode estar entre aspas.
Para a diretiva include_dir, todos os arquivos
que não começam por ponto (.) e terminam por
.conf serão incluídos.
Os vários arquivos presentes em um diretório de inclusão são
processados na ordem de seus nomes (segundo as regras de localidade
C, ou seja, números antes das letras e letras
maiúsculas antes das minúsculas).
O registro pode ter vários formatos:
localbanco_de_dadosusuário\método_de_autenticação[opções_de_autenticação] hostbanco_de_dadosusuárioendereço\método_de_autenticação[opções_de_autenticação] hostsslbanco_de_dadosusuárioendereço\método_de_autenticação[opções_de_autenticação] hostnosslbanco_de_dadosusuárioendereço\método_de_autenticação[opções_de_autenticação] hostgssencbanco_de_dadosusuárioendereço\método_de_autenticação[opções_de_autenticação] hostnogssencbanco_de_dadosusuárioendereço\método_de_autenticação[opções_de_autenticação] hostbanco_de_dadosusuárioendereço_de_IPmáscara_de_IP\método_de_autenticação[opções_de_autenticação] hostsslbanco_de_dadosusuárioendereço_de_IPmáscara_de_IP\método_de_autenticação[opções_de_autenticação] hostnosslbanco_de_dadosusuárioendereço_de_IPmáscara_de_IP\método_de_autenticação[opções_de_autenticação] hostgssencbanco_de_dadosusuárioendereço_de_IPmáscara_de_IP\método_de_autenticação[opções_de_autenticação] hostnogssencbanco_de_dadosusuárioendereço_de_IPmáscara_de_IP\método_de_autenticação[opções_de_autenticação] includearquivoinclude_if_existsarquivoinclude_dirdiretório
O significado dos campos está descrito a seguir:
localEste registro corresponde às tentativas de conexão usando soquetes de domínio Unix. Sem um registro desse tipo, as conexões por soquete de domínio Unix não são permitidas.
host
Este registro corresponde às tentativas de conexão feitas usando
TCP/IP.
Os registros host correspondem a tentativas
de conexão SSL, ou não, bem como às tentativas
de conexão usando
GSSAPI, encriptadas ou não.
As conexões TCP/IP remotas não serão possíveis, a menos que o servidor seja iniciado com um valor apropriado para o parâmetro de configuração listen_addresses, porque o comportamento padrão é aceitar conexões TCP/IP somente no endereço de retorno local localhost.
hostsslEste registro corresponde às tentativas de conexão feitas usando TCP/IP, mas somente quando a conexão é feita com encriptação SSL.
Para usar esta opção, o servidor deve ser construído com suporte
a SSL.
Além disso, o SSL deve ser ativado definindo
o parâmetro de configuração ssl
(veja Conexões TCP/IP seguras com SSL para obter mais informações).
Caso contrário, o registro hostssl é ignorado,
exceto para registrar um aviso de não poder corresponder a
nenhuma conexão.
hostnossl
Este tipo de registro tem o comportamento oposto a
hostssl; corresponde apenas às tentativas
de conexão feitas por TCP/IP que não usam
SSL.
hostgssencEste tipo de registro corresponde às tentativas de conexão feitas usando TCP/IP, mas somente quando a conexão é feita com encriptação GSSAPI.
Para usar esta opção, o servidor deve ser construído com suporte
a GSSAPI.
Caso contrário, o registro hostgssenc é
ignorado, exceto para registrar um aviso de não poder
corresponder a nenhuma conexão.
hostnogssenc
Este tipo de registro tem o comportamento oposto a
hostgssenc; corresponde apenas às tentativas
de conexão feitas por TCP/IP que não usam
a encriptação GSSAPI.
banco_de_dados
Especifica a qual(is) nome(s) de banco de dados este registro
corresponde.
O valor all especifica que corresponde a todos
os bancos de dados.
O valor sameuser especifica que o registro
irá corresponder se o banco de dados solicitado tiver o mesmo
nome do usuário solicitante.
O valor samerole especifica que o usuário
solicitante deve ser membro de uma função de banco de dados
com o mesmo nome do banco de dados solicitado
(samegroup é uma grafia obsoleta, mas ainda
aceita, de samerole).
Os superusuários não são considerados membros da função
de banco de dados para fins de samerole,
a menos que sejam explicitamente membros da função de banco
de dados, direta ou indiretamente, e não apenas em virtude de
ser um superusuário.
O valor replication especifica que o registro
irá corresponder se for solicitada uma conexão de replicação
física, entretanto não corresponde a conexões de replicação
lógica.
Note-se que as conexões de replicação física não especificam
nenhum banco de dados específico, enquanto as conexões de
replicação lógica especificam.
Caso contrário, trata-se do nome de um banco de dados do
PostgreSQL específico ou de uma
expressão regular.
Podem ser fornecidos vários nomes de banco de dados e/ou
expressões regulares, separados por vírgulas.
Se o nome do banco de dados começar por uma barra
(/), o restante do nome será tratado como
uma expressão regular.
(Veja Detalhes sobre expressões regulares para obter
informações sobre a sintaxe de expressões regulares do
PostgreSQL.)
Pode ser especificado um arquivo separado contendo nomes de
bancos de dados e/ou expressões regulares precedendo o nome do
arquivo com @.
usuário
Especifica a qual(is) nome(s) de usuário do banco de dados este
registro corresponde.
O valor all especifica que corresponde a
todos os usuários.
Caso contrário, trata-se do nome de um usuário específico do
banco de dados ou de uma expressão regular (quando iniciado por
uma barra) (/), ou um nome de grupo quando
iniciado por +.
(Lembre-se de que não há distinção real entre usuários e grupos
no PostgreSQL; um caractere
+ inicial significa realmente que
“corresponde a qualquer uma das funções de banco de dados
(roles) que sejam direta ou
indiretamente membros desta função de banco de dados”,
enquanto um nome sem o caractere + inicial
corresponde apenas àquela função de banco de dados específica.)
Para esta finalidade, um superusuário só é considerado membro de
uma função de banco de dados se for explicitamente membro dessa
função de banco de dados, direta ou indiretamente, e não apenas
por ser um superusuário.
Podem ser fornecidos vários nomes de usuário e/ou expressões
regulares separados por vírgulas.
Se o nome do usuário começar por uma barra
(/), o restante do nome será tratado como
uma expressão regular.
(Veja Detalhes sobre expressões regulares para obter
informações sobre a sintaxe de expressões regulares do
PostgreSQL.)
Pode ser especificado um arquivo separado contendo nomes de
usuários e/ou expressões regulares precedendo o nome do
arquivo com @.
endereçoEspecifica o(s) endereço(s) da máquina cliente aos quais este registro corresponde. Este campo pode conter um nome de hospedeiro, um intervalo de endereços de IP, ou uma das palavras-chave especiais mencionadas abaixo.
O intervalo de endereços de IP é especificado
usando a notação numérica padrão para o endereço inicial do
intervalo, seguido por uma barra (/),
e o comprimento de máscara CIDR
(Classless Inter-Domain Routing).
O comprimento da máscara indica o número de bits de ordem
superior do endereço de IP do cliente que
deve corresponder.
Os bits à direita devem ser zero no endereço de
IP fornecido.
Não deve haver nenhum espaço em branco entre o endereço
IP, a /, e o comprimento
da máscara CIDR.
Exemplos típicos de intervalo de endereço de IPv4
especificado dessa maneira são 172.20.143.89/32
para um único hospedeiro, 172.20.143.0/24
para uma pequena rede, ou 10.6.0.0/16 para
uma rede maior.
Um intervalo de endereços de IPv6 pode parecer
::1/128 para um único hospedeiro (neste caso,
o endereço de loopback IPv6), ou
fe80::7a31:c1ff:0000:0000/96 para uma pequena
rede.
0.0.0.0/0 representa todos os endereços
IPv4, e ::0/0 representa
todos os endereços de IPv6.
Para especificar um único hospedeiro é usado o comprimento
de máscara de 32 para o IPv4, ou 128 para
IPv6.
Em um endereço de rede os zeros à direita não são omitidos.
Uma entrada fornecida no formato IPv4 corresponderá apenas a conexões IPv4, e uma entrada fornecida no formato IPv6 corresponderá apenas a conexões IPv6, mesmo que o endereço representado esteja no intervalo IPv4-no-IPv6. Note-se que as entradas no formato IPv6 serão rejeitadas se a biblioteca C do sistema não tiver suporte para endereços de IPv6.
Também pode ser escrito all para corresponder
a qualquer endereço de IP,
samehost para corresponder a qualquer endereço
IP do próprio servidor,
ou samenet para corresponder a qualquer
endereço em qualquer sub-rede à qual o servidor está diretamente
conectado.
Se for especificado um nome de hospedeiro (qualquer coisa que
não seja um intervalo de endereços de IP, ou
uma palavra-chave especial, será tratado como nome de hospedeiro),
este nome será comparado com o resultado de uma resolução de
nome reversa do endereço de IP do cliente
(por exemplo,
pesquisa de DNS reversa, se for usado o DNS).
As comparações de nomes de hospedeiro não diferenciam letras
maiúsculas de minúsculas.
Havendo correspondência, uma resolução de nome de
encaminhamento (por exemplo, pesquisa de DNS de encaminhamento)
é executada no nome do hospedeiro para verificar se algum dos
endereços para os quais ele resolve é igual ao endereço
IP do cliente.
Se as duas direções corresponderem, a entrada será considerada
correspondente.
(O nome do hospedeiro usado em pg_hba.conf
deve ser aquele que a resolução de endereço para nome do endereço
de IP do cliente retorna, caso contrário
a entrada não será correspondida.
Alguns bancos de dados de nomes de hospedeiro permitem associar
um endereço de IP a vários nomes de hospedeiro,
mas o sistema operacional retornará apenas um nome de hospedeiro
quando solicitado a resolver um endereço de IP.)
Uma especificação de nome de hospedeiro começando por um ponto
(.), corresponde ao sufixo do nome do
hospedeiro real.
Portanto, .example.com corresponde a
foo.example.com
(mas não a example.com apenas).
Quando são especificados nomes de hospedeiro no arquivo
pg_hba.conf, deve-se certificar que
a resolução de nomes seja razoavelmente rápida.
Pode ser vantajoso configurar um
cache de resolução de nome local,
como o nscd.
Além disso, se pode ativar o parâmetro de configuração
log_hostname para ver o nome de hospedeiro
do cliente, em vez do endereço de IP, no registro.
Estes campos não se aplicam a registros do tipo
local.
Às vezes os usuários se perguntam por que os nomes de
hospedeiro são tratados dessa maneira aparentemente complicada,
com duas resoluções de nome, incluindo uma pesquisa reversa do
endereço de IP do cliente.
Isto complica o uso da funcionalidade caso a entrada de DNS
reverso do cliente não esteja configurada, ou produza algum
nome de hospedeiro indesejado.
É feito principalmente para eficiência: dessa forma, uma
tentativa de conexão requer no máximo duas pesquisas de
resolução, uma reversa e outra direta.
Havendo problema com algum endereço, torna-se apenas um
problema desse cliente.
Uma implementação alternativa hipotética, que fizesse apenas
pesquisas diretas, teria que resolver cada nome de hospedeiro
mencionado em pg_hba.conf durante cada
tentativa de conexão.
Isto poderá ser bastante lento se forem listados muitos nomes.
E havendo um problema com um dos nomes de hospedeiro, isto se
tornará um problema de todos.
Além disso, uma pesquisa reversa é necessária para implementar o recurso de correspondência de sufixo, porque o nome real do hospedeiro do cliente precisa ser conhecido para combiná-lo com o padrão.
Note-se que este comportamento é consistente com outras implementações populares de controle de acesso baseado em nome de hospedeiro, como o Servidor Apache e o TCP Wrapper.
endereço_de_IPmáscara_de_IP
Estes dois campos podem ser usados como uma alternativa à notação
endereço_de_IP/comprimento_da_máscara.
Em vez de especificar o comprimento da máscara, a máscara real
é especificada em uma coluna separada.
Por exemplo, 255.0.0.0 representa um
comprimento de máscara CIDR
IPv4 de 8, e 255.255.255.255
representa um comprimento de máscara CIDR de 32.
Estes campos não se aplicam a registros do tipo
local.
método_de_autenticação
Especifica o método de autenticação a ser usado quando uma
conexão corresponder a este registro.
As escolhas possíveis estão resumidas aqui;
os detalhes estão em Métodos de autenticação.
Todas as opções são em letras minúsculas, e tratadas fazendo
distinção entre letras maiúsculas e minúsculas, portanto, mesmo
acrônimos como ldap devem ser especificados
com letras minúsculas.
trustPermite a conexão incondicionalmente. Este método permite que qualquer pessoa que possa se conectar ao servidor de banco de dados PostgreSQL se conecte com qualquer usuário do PostgreSQL que desejar, sem a necessidade de senha ou qualquer outra autenticação. Veja Autenticação por confiança para obter detalhes.
reject
Rejeita a conexão incondicionalmente.
Serve para “filtrar” certos hospedeiros de um
grupo. Por exemplo, uma linha reject pode
bloquear a conexão de um determinado hospedeiro, enquanto uma
linha posterior permite que os hospedeiros restantes da
mesma rede possam se conectar.
scram-sha-256
Realiza a autenticação SCRAM-SHA-256 para
verificar a senha do usuário.
Veja Autenticação por senha para obter detalhes.
md5
Realiza a autenticação SCRAM-SHA-256 ou
MD5 para verificar a senha do usuário.
Veja Autenticação por senha para obter detalhes.
O suporte para senhas encriptadas por MD5
está obsoleto e será removido em uma versão futura do
PostgreSQL.
Veja Autenticação por senha para obter detalhes
sobre como migrar para outro tipo de senha.
passwordRequer que o cliente forneça uma senha não encriptada para autenticação. Como a senha é enviada em texto não encriptado pela rede, não deve ser usado em redes não confiáveis. Veja Autenticação por senha para obter detalhes.
gss
Usa GSSAPI para autenticar o usuário.
Só está disponível para conexões TCP/IP.
Veja Autenticação GSSAPI para obter detalhes.
Pode ser usado em conjunto com a encriptação
GSSAPI.
sspi
Usa SSPI para autenticar o usuário.
Só está disponível no
Windows.
Veja Autenticação SSPI para obter detalhes.
ident
Obtém o nome de usuário do sistema operacional do cliente
entrando em contato com o servidor de identidade do cliente,
e verificando se corresponde ao nome de usuário do banco
de dados especificado.
Esta forma de autenticação só pode ser usada em conexões
TCP/IP.
Quando especificado para conexões locais, será usada a
autenticação peer).
Veja Autenticação Ident para obter detalhes.
peerObtém do sistema operacional o nome de usuário do cliente, e verifica se corresponde ao nome de usuário do banco de dados especificado. Só está disponível para conexões locais. Veja Autenticação entre pares para obter detalhes.
ldapAutentica usando um servidor LDAP. Veja Autenticação LDAP para obter detalhes.
radiusAutentica usando um servidor RADIUS. Veja Autenticação RADIUS para obter detalhes.
certAutentica usando certificado SSL no cliente. Veja Autenticação por certificado para obter detalhes.
pamAutentica usando o serviço Pluggable Authentication Modules (PAM) fornecido pelo sistema operacional. Veja Autenticação PAM para obter detalhes.
bsdAutentica usando o Serviço de Autenticação BSD fornecido pelo sistema operacional. Veja Autenticação BSD para obter detalhes.
oauthAutoriza e, opcionalmente, autentica usando um provedor de identidade OAuth 2.0 de terceiros. Veja Autorização/Autenticação OAuth para obter detalhes.
opções_de_autenticação
Após o campo método_de_autenticação,
podem existir campos com a forma
nome=valor
que especificam opções para o método de autenticação.
Detalhes sobre quais opções estão disponíveis para quais métodos
de autenticação estão descritos abaixo.
Além das opções específicas do método listadas abaixo, há a
opção de autenticação clientcert
independente do método, que pode ser especificada em qualquer
registro hostssl.
Esta opção pode ser definida como verify-ca,
ou verify-full.
As duas opções exigem que o cliente apresente um certificado
SSL válido (confiável), enquanto
verify-full reforça adicionalmente que o
cn (nome comum) no certificado corresponda
ao nome do usuário, ou a um mapeamento aplicável.
Este comportamento é semelhante ao método de autenticação
cert (veja Autenticação por certificado),
mas permite parear a verificação de certificados de cliente
com qualquer método de autenticação que suporte entradas
hostssl.
Em qualquer registro usando autenticação de certificado do cliente
(ou seja, usando o método de autenticação cert,
ou usando a opção clientcert), pode-se
especificar qual parte das credenciais do certificado do cliente
deve corresponder usando a opção clientname.
Esta opção pode ter um dos dois valores possíveis.
Se for especificado clientname=CN, o padrão,
o nome do usuário será comparado com o
Common Name (CN) do certificado.
Se, em vez disso, for especificado clientname=DN,
o nome do usuário será comparado com todo o
Distinguished Name (DN) do certificado.
Esta opção é provavelmente melhor usada em conjunto com um mapa
de nome de usuário.
A comparação é feita com o DN no formato do
RFC 2253.
Para ver o DN de um certificado de cliente
neste formato, se executa:
openssl x509 -in myclient.crt -noout -subject -nameopt RFC2253 | sed "s/^subject=//"
Deve-se tomar cuidado ao usar esta opção, especialmente ao usar
correspondência de expressão regular com o DN.
includeEsta linha será substituída pelo conteúdo do arquivo especificado.
include_if_existsEsta linha será substituída pelo conteúdo do arquivo especificado, caso o arquivo exista. Caso contrário, uma mensagem é registrada indicando que o arquivo foi ignorado.
include_dir
Esta linha será substituída pelo conteúdo de todos os arquivos
encontrados no diretório, se não começarem por ponto
(.) e terminarem por .conf,
processados na ordem de nome do arquivo
(segundo as regras de localidade C, ou seja,
números antes das letras e letras maiúsculas antes das minúsculas).
Os arquivos incluídos pelas construções @ são
lidos como listas de nomes, que podem ser separados por espaços
em branco ou vírgulas.
Os comentários são introduzidos por #, assim como
no arquivo pg_hba.conf, e são permitidas
construções @ aninhadas.
A menos que o nome do arquivo após o @ seja um
caminho absoluto, será considerado sendo relativo ao diretório que
contém o arquivo que faz a referência.
Como os registros do arquivo pg_hba.conf são
examinados sequencialmente para cada tentativa de conexão, a ordem
dos registros tem significado.
Normalmente os primeiros registros terão parâmetros de
correspondência de conexão rígidos, e métodos de autenticação mais
fracos, enquanto registros posteriores terão parâmetros de
correspondência mais flexíveis e métodos de autenticação mais fortes.
Por exemplo, pode-se desejar usar o método de autenticação
trust para conexões TCP/IP
locais, mas exigir uma senha para conexões TCP/IP
remotas.
Neste caso, um registro especificando o método de autenticação
trust para conexões de 127.0.0.1
apareceria antes de um registro especificando a autenticação por
senha para um intervalo mais amplo de endereços IP
de clientes permitidos.
Para se conectar a um determinado banco de dados, o usuário não só
tem de passar nas verificações do arquivo
pg_hba.conf, como também tem que ter o
privilégio CONNECT para o banco de dados.
Se for desejado restringir quais usuários podem se conectar
a quais bancos de dados, é geralmente mais fácil controlar isto
concedendo/revogando o privilégio CONNECT,
do que colocar as regras nas entradas do arquivo
pg_hba.conf.
Alguns exemplos de entradas no arquivo
pg_hba.conf são mostrados no
Exemplo 20.1.
Veja nas próximas seções detalhes sobre os diferentes métodos de
autenticação.
Exemplo 20.1. Exemplo de entradas no arquivo pg_hba.conf
# Permite que qualquer usuário no sistema local se conecte a qualquer
# banco de dados com qualquer nome de usuário de banco de dados usando
# soquetes de domínio Unix (o padrão para conexões locais).
#
# TYPE DATABASE USER ADDRESS METHOD
local all all trust
# O mesmo usando conexões TCP/IP de loopback (retorno) local.
#
# TYPE DATABASE USER ADDRESS METHOD
host all all 127.0.0.1/32 trust
# O mesmo que a linha anterior, mas usando uma coluna de máscara de rede separada.
#
# TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD
host all all 127.0.0.1 255.255.255.255 trust
# O mesmo para IPv6.
#
# TYPE DATABASE USER ADDRESS METHOD
host all all ::1/128 trust
# O mesmo usando um nome de hospedeiro
# (que normalmente abrangeria tanto IPv4 quanto IPv6).
#
# TYPE DATABASE USER ADDRESS METHOD
host all all localhost trust
# O mesmo usando uma expressão regular para DATABASE, permitindo a
# conexão a qualquer banco de dados cujo nome comece por "db" e termine
# por um número de dois a quatro dígitos (como "db1234" ou "db12").
#
# TYPE DATABASE USER ADDRESS METHOD
host "/^db\d{2,4}$" all localhost trust
# Permite que qualquer usuário de qualquer hospedeiro com endereço de
# IP 192.168.93.x se conecte ao banco de dados "postgres" com o mesmo
# nome de usuário que o comando ident reporta para a conexão
# (normalmente o nome de usuário do sistema operacional).
#
# TYPE DATABASE USER ADDRESS METHOD
host postgres all 192.168.93.0/24 ident
# Permite que qualquer usuário do hospedeiro 192.168.12.10 se conecte
# ao banco de dados "postgres" se a senha do usuário for fornecida
# corretamente.
#
# TYPE DATABASE USER ADDRESS METHOD
host postgres all 192.168.12.10/32 scram-sha-256
# Permite que qualquer usuário de hospedeiros no domínio "example.com"
# se conecte a qualquer banco de dados, desde que a senha do usuário
# seja fornecida corretamente.
#
# Requer autenticação SCRAM para a maioria dos usuários, mas abre uma
# exceção para o usuário "mike", que usa um cliente mais antigo que não
# oferece suporte à autenticação SCRAM#.
#
# TYPE DATABASE USER ADDRESS METHOD
host all mike .example.com md5
host all all .example.com scram-sha-256
# Na ausência de linhas "host" precedentes, estas três linhas irão
# rejeitar todas as conexões de 192.168.54.1 (já que esta entrada será
# correspondida primeiro), mas vão permitirã conexões encriptadas por
# GSSAPI de qualquer outro lugar na Internet.
# A máscara zero faz com que nenhum bit do endereço de IP do hospedeiro
# seja considerado, portanto, ela corresponde a qualquer hospedeiro.
# Conexões GSSAPI não encriptadas (que "passam" para a terceira linha,
# já que "hostgssenc" só corresponde a conexões GSSAPI encriptadas)
# são permitidas, mas apenas oriundas de 192.168.12.10.
#
# TYPE DATABASE USER ADDRESS METHOD
host all all 192.168.54.1/32 reject
hostgssenc all all 0.0.0.0/0 gss
host all all 192.168.12.10/32 gss
# Permite que usuários de hospedeiros 192.168.x.x se conectem a qualquer
# banco de dados, se passarem na verificação de identidade.
# Se, por exemplo, "ident" indicar que o usuário é "bryanh" e ele
# solicitar a conexão como usuário PostgreSQL "guest1", a conexão será
# permitida havendo uma entrada em pg_ident.conf para o mapa "omicron"
# que diga que "bryanh" tem permissão para se conectar como "guest1".
#
# TYPE DATABASE USER ADDRESS METHOD
host all all 192.168.0.0/16 ident map=omicron
# Se estas forem as únicas quatro linhas para conexões locais, elas
# permitirão que os usuários locais se conectem apenas aos seus próprios
# bancos de dados (bancos de dados com o mesmo nome que o nome de usuário
# do banco de dados) exceto para usuários cujos nomes terminam por
# "helpdesk", administradores e membros da função de banco de dados
# "support", quem podem se conectar a todos os bancos de dados.
# O arquivo $PGDATA/admins contém uma lista com nomes dos administradores.
# É obrigatório o uso de senha em todos os casos.
#
# TYPE DATABASE USER ADDRESS METHOD
local sameuser all scram-sha-256
local all /^.*helpdesk$ scram-sha-256
local all @admins scram-sha-256
local all +support scram-sha-256
# As duas últimas linhas acima podem ser combinadas em uma única linha.
local all @admins,+support scram-sha-256
# A coluna DATABASE também pode usar listas e nomes de arquivos.
local db1,db2,@demodbs all scram-sha-256