PostgreSQL Prático/Configurações/Configurar acessos: diferenças entre revisões

Origem: Wikilivros, livros abertos por um mundo aberto.
[edição não verificada][edição não verificada]
Conteúdo apagado Conteúdo adicionado
Ribafs (discussão | contribs)
Nova página: == 9.1 - ph_hba.conf == Ao instalar o PostgreSQL 8.1.4 via fontes ele cria (e alerta) o arquivo pg_hba.conf com autenticação do tipo trust (conexão local sem senha). Para autent...
 
Ribafs (discussão | contribs)
Sem resumo de edição
Linha 1: Linha 1:
== 11.1 - ph_hba.conf ==


== 9.1 - ph_hba.conf ==


Ao instalar o PostgreSQL 8.1.4 via fontes ele cria (e alerta) o arquivo pg_hba.conf com autenticação do tipo trust (sem senha mas somente para conexão local).


Ao instalar o PostgreSQL 8.1.4 via fontes ele cria (e alerta) o arquivo pg_hba.conf com autenticação do tipo trust (conexão local sem senha).


Para autenticar exigindo um dos tipos com senha, devemos antes, ainda no trust, alterar os usuários adicionando senha:
Para autenticar exigindo um dos tipos com senha, devemos antes, ainda no trust, alterar os usuários adicionando senha:



ALTER ROLE nomeuser WITH PASSWORD 'senhadopg';
ALTER ROLE nomeuser WITH PASSWORD 'senhadopg';



Somente então devemos alterar o pg_hba.conf para pedir senha e restartar o PostgreSQL.
Somente então devemos alterar o pg_hba.conf para pedir senha e restartar o PostgreSQL.



As configurações principais são feitas nos arquivos pg_hba.conf e postgresql.conf. Se instalado através dos fontes ficam no subdiretório data de instalação do PostgreSQL, normalmente em /usr/local/pgsql. Se instalado via binários da distribuição vai variar com a distribuição. No Slackware estão no diretório /usr/share/postgresql.
As configurações principais são feitas nos arquivos pg_hba.conf e postgresql.conf. Se instalado através dos fontes ficam no subdiretório data de instalação do PostgreSQL, normalmente em /usr/local/pgsql. Se instalado via binários da distribuição vai variar com a distribuição. No Slackware estão no diretório /usr/share/postgresql.



O pg_hba.conf controla que máquinas terão acesso ao PostgreSQL e a autenticação dessas máquinas clientes (sem autenticação ou através de outras formas, trust, md5, crypt, etc).
O pg_hba.conf controla que máquinas terão acesso ao PostgreSQL e a autenticação dessas máquinas clientes (sem autenticação ou através de outras formas, trust, md5, crypt, etc).



O pg_hba.conf é muito rico e podemos controlar o acesso pelo IP, pela máscara, pelo banco, pelo usuário, pelo método (trust, md5, password, etc).
O pg_hba.conf é muito rico e podemos controlar o acesso pelo IP, pela máscara, pelo banco, pelo usuário, pelo método (trust, md5, password, etc).



Resumo sobre o pg_hba.conf
'''Resumo sobre o pg_hba.conf'''


Arquivo de configuração da autenticação dos clientes do PostgreSQL
Arquivo de configuração da autenticação dos clientes do PostgreSQL



Este arquivo controla:
Este arquivo controla:

- Quais hosts têm permissão de conectar
- Quais hosts têm permissão de conectar

- Como os clientes são autenticados
- Como os clientes são autenticados

- Nomes dos usuários que podem usar
- Nomes dos usuários que podem usar

- Quais bancos eles podem acessar
- Quais bancos eles podem acessar



Os registros deste arquivo têm as formas seguintes:
Os registros deste arquivo têm as formas seguintes:


# local DATABASE USER METHOD [OPTION]
# local DATABASE USER METHOD [OPTION]

Este método de conexão é para uso somente através sockets de domínio UNIX
Este método de conexão é para uso somente através sockets de domínio UNIX

Sem um registro tipo local essa conexão é negada
Sem um registro tipo local essa conexão é negada



# host DATABASE USER CIDR-ADDRESS METHOD [OPTION]
# host DATABASE USER CIDR-ADDRESS METHOD [OPTION]

Conexão via TCP/IP. Este tipo de conexão só é possível quando o valor do parâmetro
Conexão via TCP/IP. Este tipo de conexão só é possível quando o valor do parâmetro
listen_address (IP) é adequado no postgresql.conf. Por default somente localhost é permitido.
listen_address (IP) é adequado no postgresql.conf. Por default somente localhost é permitido.
São permitidas conexões com ou sem SSL.
São permitidas conexões com ou sem SSL.



# hostssl DATABASE USER CIDR-ADDRESS METHOD [OPTION]
# hostssl DATABASE USER CIDR-ADDRESS METHOD [OPTION]

Semelhante ao host, sendo que neste usa-se criptografia SSL.
Semelhante ao host, sendo que neste usa-se criptografia SSL.



# hostnossl DATABASE USER CIDR-ADDRESS METHOD [OPTION]
# hostnossl DATABASE USER CIDR-ADDRESS METHOD [OPTION]

Apenas para conexões que não usam SSL.
Apenas para conexões que não usam SSL.



# DATABASE can be "all", "sameuser", "samerole", a database name, or
# DATABASE can be "all", "sameuser", "samerole", a database name, or

# a comma-separated list thereof.
# a comma-separated list thereof.

DATABASE pode ser:
DATABASE pode ser:

- "all"
- "all"

- "sameuser" (para quando o usuário tiver o mesmo nome do banco)
- "sameuser" (para quando o usuário tiver o mesmo nome do banco)

- "samerole" (para quando o usuário for membro de uma role (papel) com o mesmo nome de um banco)
- "samerole" (para quando o usuário for membro de uma role (papel) com o mesmo nome de um banco)

- um nome de banco ou
- um nome de banco ou

- uma lista separados por vírgula
- uma lista separados por vírgula



USER pode ser:
USER pode ser:

- "all" (para qualquer usuário)
- "all" (para qualquer usuário)

- um nome de usuário
- um nome de usuário

- um nome de grupo prefixado por "+"
- um nome de grupo prefixado por "+"

- uma lista separados por vírgula
- uma lista separados por vírgula



Tanto no campo DATABASE quanto no USER podemos também escrever um nome de arquivo
Tanto no campo DATABASE quanto no USER podemos também escrever um nome de arquivo
prefixado com "@" para incluir nomes em um arquivo separado
prefixado com "@" para incluir nomes em um arquivo separado



CIDR-ADDRESS especifica uma faixa de IPs. Através de um endereço de IP e de
CIDR-ADDRESS especifica uma faixa de IPs. Através de um endereço de IP e de
uma máscara que é um inteiro (entre 0 e 32 para IPV4 ou de 128 para IPV6),que
uma máscara que é um inteiro (entre 0 e 32 para IPV4 ou de 128 para IPV6),que
especifica o número de bits significativos da máscara.
especifica o número de bits significativos da máscara.

Alternativamente podemos escrever o IP separado da máscara em colunas diferentes
Alternativamente podemos escrever o IP separado da máscara em colunas diferentes
para especificar o conjunto de hosts.
para especificar o conjunto de hosts.



Exemplos (IPV4):
Exemplos (IPV4):

172.20.143.89/32 para um único host
172.20.143.89/32 para um único host

172.20.143.0/24 para uma rede
172.20.143.0/24 para uma rede



O campo CIDR-ADDRESS somente se aplica aos registros host, hostssl e hostnossl.
O campo CIDR-ADDRESS somente se aplica aos registros host, hostssl e hostnossl.



IP-address e IP-mask
IP-address e IP-mask

Estes campos podem ser utilizados como alternativa à notação CIDR-ADDRESS. ao invés
Estes campos podem ser utilizados como alternativa à notação CIDR-ADDRESS. ao invés
de especificar o comprimento da máscara, a atual máscara é especificada em uma coluna
separada.


de especificar o comprimento da máscara, a atual máscara é especificada em uma coluna separada.
Exemplo:


'''Exemplo:'''

255.0.0.0 representa uma máscara CIDR em IPV4 com comprimenro 8
255.0.0.0 representa uma máscara CIDR em IPV4 com comprimenro 8

255.255.255.255 representa uma máscara CIDR com comprimenro 32
255.255.255.255 representa uma máscara CIDR com comprimenro 32



172.20.143.89 255.255.255.255
172.20.143.89 255.255.255.255



Estes campos somente se aplica aos registros host, hostssl e hostnossl.
Estes campos somente se aplica aos registros host, hostssl e hostnossl.



METHOD pode ser "trust", "reject", "md5", "crypt", "password",
METHOD pode ser "trust", "reject", "md5", "crypt", "password",

# "krb5", "ident", ou "pam"
# "krb5", "ident", ou "pam"



trust - permite conexão a qualquer um incondicionalmente (sem senha)
trust - permite conexão a qualquer um incondicionalmente (sem senha)

reject - rejeita conexão incondicionalmente para o user/host especificado
reject - rejeita conexão incondicionalmente para o user/host especificado

crypt - recomendada somente para versões inferiores a 7.2. Atualmente recomenda-se md5
crypt - recomendada somente para versões inferiores a 7.2. Atualmente recomenda-se md5

krb5 - somente disponível para conexões via TCP/IP
krb5 - somente disponível para conexões via TCP/IP

ident - Obtém o nome do usuário do sistema operacional. Para conexões TCP/IP contacta o
ident - Obtém o nome do usuário do sistema operacional. Para conexões TCP/IP contacta o
servidor ident no cliente. Para conexões locais, recebendo este do sistema operacional.
servidor ident no cliente. Para conexões locais, recebendo este do sistema operacional.

pam - usando o serviço PAM (Pluggable Authentication Modules) do sistema operacional
pam - usando o serviço PAM (Pluggable Authentication Modules) do sistema operacional

password - envia senha em texto claro
password - envia senha em texto claro

md5 - deve ser preferido, pois envia senhas criptografadas
md5 - deve ser preferido, pois envia senhas criptografadas



# TYPE DATABASE USER CIDR-ADDRESS METHOD
# TYPE DATABASE USER CIDR-ADDRESS METHOD



# IPv4 local connections:
# IPv4 local connections:

host all all 127.0.0.1/32 md5
host all all 127.0.0.1/32 md5

# IPv6 local connections:
# IPv6 local connections:

#host all all ::1/128 md5
#host all all ::1/128 md5



Alerta: este arquivo é examinado sequencialmente para cada tentativa de conexão.
Alerta: este arquivo é examinado sequencialmente para cada tentativa de conexão.
A ordem dos registros é significativa.



Caso um registro que venha primeiro entre em conflito com outro que vem em seguida,
'''A ordem dos registros é significativa.'''
o primeiro será executado e o segundo, não.

Caso um registro que venha primeiro entre em conflito com outro que vem em seguida, o primeiro será executado e o segundo, não.



Exemplos:
Exemplos:



#TYPE DATABASE USER CIDR-ADDRESS METHOD
#TYPE DATABASE USER CIDR-ADDRESS METHOD

local all all md5
local all all md5

local all all trust
local all all trust



Acima todas as conexões locais exigirão senha md5.
Acima todas as conexões locais exigirão senha md5.



local all all trust
local all all trust

local all all md5
local all all md5


Já este acima aceitará todas as conexões locais incondicionalmente (sem senha)
Já este acima aceitará todas as conexões locais incondicionalmente (sem senha)

A segunda linha será ignorada.
A segunda linha será ignorada.



Veja vários exemplos do pg_hba.conf e mais detlahes no capítulo 20 do manual oficial do
Veja vários exemplos do pg_hba.conf e mais detlahes no capítulo 20 do manual oficial do PostgreSQL em
PostgreSQL em


Observe que conexões locais não usam o campo CIDR-ADDRESS.
Observe que conexões locais não usam o campo CIDR-ADDRESS.



Exemplos no pg_hba.conf:
'''Exemplos no pg_hba.conf:'''



Conexão local via socket
Conexão local via socket

local all all md5
local all all md5



Conexão local via TCP/IP
Conexão local via TCP/IP

host all all 127.0.0.1/32 md5
host all all 127.0.0.1/32 md5



Conexão local via TCP/IP com máscara separada
Conexão local via TCP/IP com máscara separada

host all all 127.0.0.1 255.255.255.255 md5
host all all 127.0.0.1 255.255.255.255 md5



Conexão para uma rede (ident sameuser) via TCP/IP
Conexão para uma rede (ident sameuser) via TCP/IP

host banco usuario 192.168.93.0/24 ident sameuser
host banco usuario 192.168.93.0/24 ident sameuser



Conexão rejeitada via TCP/IP para o IP, usuário e banco
Conexão rejeitada via TCP/IP para o IP, usuário e banco

host banco usuario 192.168.93.1/32 reject
host banco usuario 192.168.93.1/32 reject



ident
'''ident'''

Obtém o nome de usuário do sistema operacional do cliente (para conexões TCP/IP fazendo contato com o servidor de identificação no cliente, para conexões locais obtendo a partir do sistema operacional) e verifica se o usuário possui permissão para se conectar como o usuário de banco de dados solicitado consultando o mapa especificado após a palavra chave ident.
Obtém o nome de usuário do sistema operacional do cliente (para conexões TCP/IP fazendo contato com o servidor de identificação no cliente, para conexões locais obtendo a partir do sistema operacional) e verifica se o usuário possui permissão para se conectar como o usuário de banco de dados solicitado consultando o mapa especificado após a palavra chave ident.



Exemplo para Ubuntu (facilmente adaptável para outras distros e SOs).
Exemplo para Ubuntu (facilmente adaptável para outras distros e SOs).



Se instalsdo pelo repositório:
Se instalado pelo repositório:



- sudo gedit /etc/postgresql/8.1/main/postgresql.conf
- sudo gedit /etc/postgresql/8.1/main/postgresql.conf



Altere:
Altere:

#listen_addresses = 'localhost'
#listen_addresses = 'localhost'

para:
para:

listen_addresses = '*'
listen_addresses = '*'

Aqui também existem outras importantes configurações, como datestyle = 'sql, dmy' # Datas no estilo brasileiro dd/mm/aaaa
Aqui também existem outras importantes configurações, como datestyle = 'sql, dmy' # Datas no estilo
brasileiro dd/mm/aaaa

client_encoding = latin1 # suporte à nossa acentuação
client_encoding = latin1 # suporte à nossa acentuação


- sudo gedit /etc/postgresql/8.1/main/pg_hba.conf
- sudo gedit /etc/postgresql/8.1/main/pg_hba.conf



# TIPO BANCO USUÁRIO CIDR-ADDRESS MÉTODO
# TIPO BANCO USUÁRIO CIDR-ADDRESS MÉTODO

# "local" é para domínios Unix somente com conexões via socket
# "local" é para domínios Unix somente com conexões via socket

# não requer IP
# não requer IP

local all all md5
local all all md5



# Conexões locais via IPv4:
# Conexões locais via IPv4:

host all all 127.0.0.1/32 md5
host all all 127.0.0.1/32 md5



# Conexões locais via IPv6:
# Conexões locais via IPv6:

host all all ::1/128 md5
host all all ::1/128 md5



# Conexões para todos os IPs de uma subrede (10.0.0.0)
# Conexões para todos os IPs de uma subrede (10.0.0.0)

# TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD
# TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD

host all all 10.43.0.0 255.0.0.0 md5
host all all 10.43.0.0 255.0.0.0 md5



Opção para permitir acesso através de toda a internet:
Opção para permitir acesso através de toda a internet:



# Aceitar toda a Internet, exceto 200.217.23.234
# Aceitar toda a Internet, exceto 200.217.23.234

# TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD
# TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD

host all all 200.217.23.234 255.255.255.255 reject
host all all 200.217.23.234 255.255.255.255 reject

host all all 0.0.0.0 0.0.0.0 md5
host all all 0.0.0.0 0.0.0.0 md5



Mais detalhes sobre o pg_hba.conf em:
'''Mais detalhes sobre o pg_hba.conf em:'''

http://pgdocptbr.sourceforge.net/pg80/client-authentication.html
http://pgdocptbr.sourceforge.net/pg80/client-authentication.html

Revisão das 21h57min de 21 de maio de 2007

11.1 - ph_hba.conf

Ao instalar o PostgreSQL 8.1.4 via fontes ele cria (e alerta) o arquivo pg_hba.conf com autenticação do tipo trust (sem senha mas somente para conexão local).


Para autenticar exigindo um dos tipos com senha, devemos antes, ainda no trust, alterar os usuários adicionando senha:


ALTER ROLE nomeuser WITH PASSWORD 'senhadopg';


Somente então devemos alterar o pg_hba.conf para pedir senha e restartar o PostgreSQL.


As configurações principais são feitas nos arquivos pg_hba.conf e postgresql.conf. Se instalado através dos fontes ficam no subdiretório data de instalação do PostgreSQL, normalmente em /usr/local/pgsql. Se instalado via binários da distribuição vai variar com a distribuição. No Slackware estão no diretório /usr/share/postgresql.


O pg_hba.conf controla que máquinas terão acesso ao PostgreSQL e a autenticação dessas máquinas clientes (sem autenticação ou através de outras formas, trust, md5, crypt, etc).


O pg_hba.conf é muito rico e podemos controlar o acesso pelo IP, pela máscara, pelo banco, pelo usuário, pelo método (trust, md5, password, etc).


Resumo sobre o pg_hba.conf

Arquivo de configuração da autenticação dos clientes do PostgreSQL


Este arquivo controla:

- Quais hosts têm permissão de conectar

- Como os clientes são autenticados

- Nomes dos usuários que podem usar

- Quais bancos eles podem acessar


Os registros deste arquivo têm as formas seguintes:

  1. local DATABASE USER METHOD [OPTION]

Este método de conexão é para uso somente através sockets de domínio UNIX

Sem um registro tipo local essa conexão é negada


  1. host DATABASE USER CIDR-ADDRESS METHOD [OPTION]

Conexão via TCP/IP. Este tipo de conexão só é possível quando o valor do parâmetro listen_address (IP) é adequado no postgresql.conf. Por default somente localhost é permitido. São permitidas conexões com ou sem SSL.


  1. hostssl DATABASE USER CIDR-ADDRESS METHOD [OPTION]

Semelhante ao host, sendo que neste usa-se criptografia SSL.


  1. hostnossl DATABASE USER CIDR-ADDRESS METHOD [OPTION]

Apenas para conexões que não usam SSL.


  1. DATABASE can be "all", "sameuser", "samerole", a database name, or
  1. a comma-separated list thereof.

DATABASE pode ser:

- "all"

- "sameuser" (para quando o usuário tiver o mesmo nome do banco)

- "samerole" (para quando o usuário for membro de uma role (papel) com o mesmo nome de um banco)

- um nome de banco ou

- uma lista separados por vírgula


USER pode ser:

- "all" (para qualquer usuário)

- um nome de usuário

- um nome de grupo prefixado por "+"

- uma lista separados por vírgula


Tanto no campo DATABASE quanto no USER podemos também escrever um nome de arquivo prefixado com "@" para incluir nomes em um arquivo separado


CIDR-ADDRESS especifica uma faixa de IPs. Através de um endereço de IP e de uma máscara que é um inteiro (entre 0 e 32 para IPV4 ou de 128 para IPV6),que especifica o número de bits significativos da máscara.

Alternativamente podemos escrever o IP separado da máscara em colunas diferentes para especificar o conjunto de hosts.


Exemplos (IPV4):

172.20.143.89/32 para um único host

172.20.143.0/24 para uma rede


O campo CIDR-ADDRESS somente se aplica aos registros host, hostssl e hostnossl.


IP-address e IP-mask

Estes campos podem ser utilizados como alternativa à notação CIDR-ADDRESS. ao invés

de especificar o comprimento da máscara, a atual máscara é especificada em uma coluna separada.


Exemplo:

255.0.0.0 representa uma máscara CIDR em IPV4 com comprimenro 8

255.255.255.255 representa uma máscara CIDR com comprimenro 32


172.20.143.89 255.255.255.255


Estes campos somente se aplica aos registros host, hostssl e hostnossl.


METHOD pode ser "trust", "reject", "md5", "crypt", "password",

  1. "krb5", "ident", ou "pam"


trust - permite conexão a qualquer um incondicionalmente (sem senha)

reject - rejeita conexão incondicionalmente para o user/host especificado

crypt - recomendada somente para versões inferiores a 7.2. Atualmente recomenda-se md5

krb5 - somente disponível para conexões via TCP/IP

ident - Obtém o nome do usuário do sistema operacional. Para conexões TCP/IP contacta o servidor ident no cliente. Para conexões locais, recebendo este do sistema operacional.

pam - usando o serviço PAM (Pluggable Authentication Modules) do sistema operacional

password - envia senha em texto claro

md5 - deve ser preferido, pois envia senhas criptografadas


  1. TYPE DATABASE USER CIDR-ADDRESS METHOD


  1. IPv4 local connections:

host all all 127.0.0.1/32 md5

  1. IPv6 local connections:
  1. host all all  ::1/128 md5


Alerta: este arquivo é examinado sequencialmente para cada tentativa de conexão.


A ordem dos registros é significativa.

Caso um registro que venha primeiro entre em conflito com outro que vem em seguida, o primeiro será executado e o segundo, não.


Exemplos:


  1. TYPE DATABASE USER CIDR-ADDRESS METHOD

local all all md5

local all all trust


Acima todas as conexões locais exigirão senha md5.


local all all trust

local all all md5

Já este acima aceitará todas as conexões locais incondicionalmente (sem senha)

A segunda linha será ignorada.


Veja vários exemplos do pg_hba.conf e mais detlahes no capítulo 20 do manual oficial do PostgreSQL em

Observe que conexões locais não usam o campo CIDR-ADDRESS.


Exemplos no pg_hba.conf:


Conexão local via socket

local all all md5


Conexão local via TCP/IP

host all all 127.0.0.1/32 md5


Conexão local via TCP/IP com máscara separada

host all all 127.0.0.1 255.255.255.255 md5


Conexão para uma rede (ident sameuser) via TCP/IP

host banco usuario 192.168.93.0/24 ident sameuser


Conexão rejeitada via TCP/IP para o IP, usuário e banco

host banco usuario 192.168.93.1/32 reject


ident

Obtém o nome de usuário do sistema operacional do cliente (para conexões TCP/IP fazendo contato com o servidor de identificação no cliente, para conexões locais obtendo a partir do sistema operacional) e verifica se o usuário possui permissão para se conectar como o usuário de banco de dados solicitado consultando o mapa especificado após a palavra chave ident.


Exemplo para Ubuntu (facilmente adaptável para outras distros e SOs).


Se instalado pelo repositório:


- sudo gedit /etc/postgresql/8.1/main/postgresql.conf


Altere:

  1. listen_addresses = 'localhost'

para:

listen_addresses = '*'

Aqui também existem outras importantes configurações, como datestyle = 'sql, dmy' # Datas no estilo brasileiro dd/mm/aaaa

client_encoding = latin1 # suporte à nossa acentuação

- sudo gedit /etc/postgresql/8.1/main/pg_hba.conf


  1. TIPO BANCO USUÁRIO CIDR-ADDRESS MÉTODO
  1. "local" é para domínios Unix somente com conexões via socket
  1. não requer IP
local all   all 				md5


  1. Conexões locais via IPv4:

host all all 127.0.0.1/32 md5


  1. Conexões locais via IPv6:

host all all ::1/128 md5


  1. Conexões para todos os IPs de uma subrede (10.0.0.0)
  1. TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD
 host all 	 all  10.43.0.0 		255.0.0.0	   	   md5


Opção para permitir acesso através de toda a internet:


  1. Aceitar toda a Internet, exceto 200.217.23.234
  1. TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD
 host all 	 all  200.217.23.234 	255.255.255.255   reject
 host all 	 all  0.0.0.0 		0.0.0.0	   	   	   md5


Mais detalhes sobre o pg_hba.conf em:

http://pgdocptbr.sourceforge.net/pg80/client-authentication.html