20.1. O arquivo pg_hba.conf #

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.

Nota

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:

local               banco_de_dados  usuário  \
                        método_de_autenticação [opções_de_autenticação]
host                banco_de_dados  usuário  endereço  \
                        método_de_autenticação  [opções_de_autenticação]
hostssl             banco_de_dados  usuário  endereço  \
                        método_de_autenticação  [opções_de_autenticação]
hostnossl           banco_de_dados  usuário  endereço  \
                        método_de_autenticação  [opções_de_autenticação]
hostgssenc          banco_de_dados  usuário  endereço  \
                        método_de_autenticação  [opções_de_autenticação]
hostnogssenc        banco_de_dados  usuário  endereço  \
                        método_de_autenticação  [opções_de_autenticação]
host                banco_de_dados  usuário  endereço_de_IP  máscara_de_IP  \
                        método_de_autenticação  [opções_de_autenticação]
hostssl             banco_de_dados  usuário  endereço_de_IP  máscara_de_IP  \
                        método_de_autenticação  [opções_de_autenticação]
hostnossl           banco_de_dados  usuário  endereço_de_IP  máscara_de_IP  \
                        método_de_autenticação  [opções_de_autenticação]
hostgssenc          banco_de_dados  usuário  endereço_de_IP  máscara_de_IP  \
                        método_de_autenticação  [opções_de_autenticação]
hostnogssenc        banco_de_dados  usuário  endereço_de_IP  máscara_de_IP  \
                        método_de_autenticação  [opções_de_autenticação]
include             arquivo
include_if_exists   arquivo
include_dir         diretório

O significado dos campos está descrito a seguir:

local

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

Nota

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.

hostssl

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

hostgssenc

Este 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ço

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

Nota

À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_IP
má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.

trust

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

Atenção

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.

password

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

peer

Obté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.

ldap

Autentica usando um servidor LDAP. Veja Autenticação LDAP para obter detalhes.

radius

Autentica usando um servidor RADIUS. Veja Autenticação RADIUS para obter detalhes.

cert

Autentica usando certificado SSL no cliente. Veja Autenticação por certificado para obter detalhes.

pam

Autentica usando o serviço Pluggable Authentication Modules (PAM) fornecido pelo sistema operacional. Veja Autenticação PAM para obter detalhes.

bsd

Autentica usando o Serviço de Autenticação BSD fornecido pelo sistema operacional. Veja Autenticação BSD para obter detalhes.

oauth

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

include

Esta linha será substituída pelo conteúdo do arquivo especificado.

include_if_exists

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

Dica

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