Te doy la bienvenida a nuestra web, ahora vas a encontrar la respuesta que estabas buscando.
La autenticación del cliente está controlada por un archivo de configuración, que tradicionalmente se denomina pg_hba.conf
y se almacena en el directorio de datos del clúster de la base de datos. (HBA significa autenticación basada en host). pg_hba.conf
El archivo se instala cuando el directorio de datos es inicializado por initdb
. Sin embargo, es posible colocar el archivo de configuración de autenticación en otro lugar; consulte el parámetro de configuración hba_file.
El formato general del pg_hba.conf
archivo es un conjunto de registros, uno por línea. Las líneas en blanco se ignoran, al igual que cualquier texto después de la #
carácter de comentario. Los registros no pueden continuar entre líneas. Un registro se compone de varios campos separados por espacios y / o tabulaciones. Los campos pueden contener espacios en blanco si el valor del campo está entre comillas dobles. Citando una de las palabras clave en una base de datos, usuario o campo de dirección (p. Ej., all
o replication
) hace que la palabra pierda su significado especial y simplemente haga coincidir una base de datos, un usuario o un host con ese nombre.
Cada registro especifica un tipo de conexión, un rango de direcciones IP del cliente (si es relevante para el tipo de conexión), un nombre de base de datos, un nombre de usuario y el método de autenticación que se utilizará para las conexiones que coincidan con estos parámetros. El primer registro con un tipo de conexión, dirección de cliente, base de datos solicitada y nombre de usuario coincidentes se utiliza para realizar la autenticación. No hay “caer a través“ o “respaldo“: si se elige un registro y la autenticación falla, los registros posteriores no se consideran. Si ningún registro coincide, se deniega el acceso.
Un registro puede tener varios formatos:
localdatabaseuser auth-method [auth-options] host databaseuser address auth-method [auth-options] hostssl databaseuser address auth-method [auth-options] hostnossl databaseuser address auth-method [auth-options] hostgssenc databaseuser address auth-method [auth-options] hostnogssenc databaseuser address auth-method [auth-options] host databaseuser IP-address IP-mask auth-method [auth-options] hostssl databaseuser IP-address IP-mask auth-method [auth-options] hostnossl databaseuser IP-address IP-mask auth-method [auth-options] hostgssenc databaseuser IP-address IP-mask auth-method [auth-options] hostnogssenc databaseuser IP-address IP-mask auth-method [auth-options]
El significado de los campos es el siguiente:
local
-
Este registro coincide con los intentos de conexión que utilizan sockets de dominio Unix. Sin un registro de este tipo, las conexiones de socket de dominio Unix no están permitidas.
host
-
Este registro coincide con los intentos de conexión realizados mediante TCP / IP.
host
los registros coinciden con los intentos de conexión SSL o no SSL, así como con los intentos de conexión cifrados GSSAPI o no GSSAPI.Nota
Las conexiones TCP / IP remotas no serán posibles a menos que el servidor se inicie con un valor apropiado para el parámetro de configuración listen_addresses, ya que el comportamiento predeterminado es escuchar las conexiones TCP / IP solo en la dirección de loopback local.
localhost
. hostssl
-
Este registro coincide con los intentos de conexión realizados mediante TCP / IP, pero solo cuando la conexión se realiza con cifrado SSL.
Para hacer uso de esta opción, el servidor debe estar construido con soporte SSL. Además, SSL debe habilitarse estableciendo el parámetro de configuración ssl (consulte la Sección 18.9 para obtener más información). De lo contrario, el
hostssl
El registro se ignora, excepto para registrar una advertencia de que no puede coincidir con ninguna conexión. hostnossl
-
Este tipo de registro tiene el comportamiento opuesto de
hostssl
; solo coincide con los intentos de conexión realizados a través de TCP / IP que no utilizan SSL. hostgssenc
-
Este registro coincide con los intentos de conexión realizados mediante TCP / IP, pero solo cuando la conexión se realiza con cifrado GSSAPI.
Para hacer uso de esta opción, el servidor debe estar construido con soporte GSSAPI. De lo contrario, el
hostgssenc
El registro se ignora, excepto para registrar una advertencia de que no puede coincidir con ninguna conexión. hostnogssenc
-
Este tipo de registro tiene el comportamiento opuesto a
hostgssenc
; solo coincide con los intentos de conexión realizados a través de TCP / IP que no utilizan el cifrado GSSAPI. database
-
Especifica con qué nombre (s) de base de datos coincide este registro. El valor
all
especifica que coincide con todas las bases de datos. El valorsameuser
especifica que el registro coincide si la base de datos solicitada tiene el mismo nombre que el usuario solicitado. El valorsamerole
especifica que el usuario solicitado debe ser miembro del rol con el mismo nombre que la base de datos solicitada. (samegroup
es una ortografía obsoleta pero aún aceptada desamerole
.) Los superusuarios no se consideran miembros de una función a los efectos desamerole
a menos que sean explícitamente miembros del rol, directa o indirectamente, y no solo en virtud de ser un superusuario. El valorreplication
especifica que el registro coincide si se solicita una conexión de replicación física (tenga en cuenta que las conexiones de replicación no especifican ninguna base de datos en particular). De lo contrario, este es el nombre de una base de datos PostgreSQL específica. Se pueden proporcionar varios nombres de bases de datos separándolos con comas. Se puede especificar un archivo separado que contenga los nombres de la base de datos precediendo el nombre del archivo con@
. user
-
Especifica qué nombre de usuario de la base de datos coincide con este registro. El valor
all
especifica que coincide con todos los usuarios. De lo contrario, este es el nombre de un usuario de base de datos específico o el nombre de un grupo precedido por+
. (Recuerde que no existe una distinción real entre usuarios y grupos en PostgreSQL; una+
marca realmente significa “coincidir con cualquiera de los roles que son directa o indirectamente miembros de este rol“, mientras que un nombre sin un+
mark coincide solo con ese rol específico). Para este propósito, un superusuario solo se considera miembro de un rol si es explícitamente miembro del rol, directa o indirectamente, y no solo en virtud de ser un superusuario. Se pueden proporcionar varios nombres de usuario separándolos con comas. Se puede especificar un archivo separado que contenga los nombres de usuario precediendo el nombre del archivo con@
. address
-
Especifica las direcciones de la máquina cliente con las que este registro coincide. Este campo puede contener un nombre de host, un rango de direcciones IP o una de las palabras clave especiales que se mencionan a continuación.
Un rango de direcciones IP se especifica usando notación numérica estándar para la dirección inicial del rango, luego una barra (
/
) y una longitud de máscara CIDR. La longitud de la máscara indica el número de bits de orden superior de la dirección IP del cliente que deben coincidir. Los bits a la derecha de esto deben ser cero en la dirección IP dada. No debe haber ningún espacio en blanco entre la dirección IP, la/
y la longitud de la máscara CIDR.Ejemplos típicos de un rango de direcciones IPv4 especificado de esta manera son
172.20.143.89/32
para un solo host, o172.20.143.0/24
para una red pequeña, o10.6.0.0/16
para uno más grande. Un rango de direcciones IPv6 podría verse como::1/128
para un solo host (en este caso, la dirección de loopback IPv6) ofe80::7a31:c1ff:0000:0000/96
para una red pequeña.0.0.0.0/0
representa todas las direcciones IPv4 y::0/0
representa todas las direcciones IPv6. Para especificar un solo host, use una longitud de máscara de 32 para IPv4 o 128 para IPv6. En una dirección de red, no omita los ceros finales.Una entrada dada en formato IPv4 coincidirá solo con conexiones IPv4, y una entrada dada en formato IPv6 solo coincidirá con conexiones IPv6, incluso si la dirección representada está en el rango de IPv4 en IPv6. Tenga en cuenta que las entradas en formato IPv6 se rechazarán si la biblioteca C del sistema no admite direcciones IPv6.
También puedes escribir
all
para que coincida con cualquier dirección IP,samehost
para que coincida con cualquiera de las direcciones IP propias del servidor, osamenet
para que coincida con cualquier dirección en cualquier subred a la que el servidor esté conectado directamente.Si se especifica un nombre de host (cualquier cosa que no sea un rango de direcciones IP o una palabra clave especial se trata como un nombre de host), ese nombre se compara con el resultado de una resolución de nombre inversa de la dirección IP del cliente (por ejemplo, DNS inverso búsqueda, si se utiliza DNS). Las comparaciones de nombres de host no distinguen entre mayúsculas y minúsculas. Si hay una coincidencia, entonces se realiza una resolución de nombre de reenvío (por ejemplo, búsqueda de DNS reenviada) en el nombre de host para verificar si alguna de las direcciones a las que se resuelve es igual a la dirección IP del cliente. Si ambas direcciones coinciden, se considera que la entrada coincide. (El nombre de host que se utiliza en
pg_hba.conf
debe ser el que devuelve la resolución de dirección a nombre de la dirección IP del cliente, de lo contrario, la línea no coincidirá. Algunas bases de datos de nombres de host permiten asociar una dirección IP con varios nombres de host, pero el sistema operativo solo devolverá un nombre de host cuando se le solicite que resuelva una dirección IP).Una especificación de nombre de host que comienza con un punto (
.
) coincide con un sufijo del nombre de host real. Entonces.example.com
coincidiríafoo.example.com
(pero no soloexample.com
).Cuando los nombres de host se especifican en
pg_hba.conf
, debe asegurarse de que la resolución de nombres sea razonablemente rápida. Puede resultar ventajoso configurar una memoria caché de resolución de nombres local, comonscd
. Además, es posible que desee habilitar el parámetro de configuraciónlog_hostname
para ver el nombre de host del cliente en lugar de la dirección IP en el registro.Estos campos no se aplican a
local
registros.Nota
Los usuarios a veces se preguntan por qué los nombres de host se manejan de esta manera aparentemente complicada, con dos resoluciones de nombre que incluyen una búsqueda inversa de la dirección IP del cliente. Esto complica el uso de la función en caso de que la entrada DNS inversa del cliente no esté configurada o produzca un nombre de host no deseado. Se hace principalmente por eficiencia: de esta manera, un intento de conexión requiere como máximo dos búsquedas de resolución, una inversa y otra directa. Si hay un problema de resolución con alguna dirección, se convierte únicamente en un problema de ese cliente. Una implementación alternativa hipotética que solo hiciera búsquedas hacia adelante tendría que resolver todos los nombres de host mencionados en
pg_hba.conf
durante cada intento de conexión. Eso podría ser bastante lento si se enumeran muchos nombres. Y si hay un problema de resolución con uno de los nombres de host, se convierte en un problema de todos.Además, es necesaria una búsqueda inversa para implementar la función de coincidencia de sufijos, porque es necesario conocer el nombre de host del cliente real para poder compararlo con el patrón.
Tenga en cuenta que este comportamiento es coherente con otras implementaciones populares de control de acceso basado en nombres de host, como el servidor HTTP Apache y los encapsuladores TCP.
IP-address
IP-mask
-
Estos dos campos se pueden utilizar como alternativa a la
IP-address
/
mask-length
notación. En lugar de especificar la longitud de la máscara, la máscara real se especifica en una columna separada. Por ejemplo,255.0.0.0
representa una longitud de máscara CIDR IPv4 de 8, y255.255.255.255
representa una longitud de máscara CIDR de 32.Estos campos no se aplican a
local
registros. auth-method
-
Especifica el método de autenticación que se utilizará cuando una conexión coincida con este registro. Las posibles opciones se resumen aquí; los detalles se encuentran en la Sección 20.3.
trust
-
Permita la conexión incondicionalmente. Este método permite que cualquiera que pueda conectarse al servidor de base de datos de PostgreSQL inicie sesión como cualquier usuario de PostgreSQL que desee, sin la necesidad de una contraseña o cualquier otra autenticación. Consulte la Sección 20.4 para obtener más detalles.
reject
-
Rechaza la conexión incondicionalmente. Este es útil para “filtrando“ ciertos hosts de un grupo, por ejemplo, un
reject
La línea podría bloquear la conexión de un host específico, mientras que una línea posterior permite que se conecten los hosts restantes en una red específica. scram-sha-256
-
Realice la autenticación SCRAM-SHA-256 para verificar la contraseña del usuario. Consulte la Sección 20.5 para obtener más detalles.
md5
-
Realice la autenticación SCRAM-SHA-256 o MD5 para verificar la contraseña del usuario. Consulte la Sección 20.5 para obtener más detalles.
password
-
Solicite al cliente que proporcione una contraseña no cifrada para la autenticación. Dado que la contraseña se envía en texto sin cifrar a través de la red, no debe utilizarse en redes que no sean de confianza. Consulte la Sección 20.5 para obtener más detalles.
gss
-
Utilice GSSAPI para autenticar al usuario. Esto solo está disponible para conexiones TCP / IP. Consulte la Sección 20.6 para obtener más detalles. Se puede utilizar junto con el cifrado GSSAPI.
sspi
-
Utilice SSPI para autenticar al usuario. Esto solo está disponible en Windows. Consulte la Sección 20.7 para obtener más detalles.
ident
-
Obtenga el nombre de usuario del sistema operativo del cliente poniéndose en contacto con el servidor de identificación en el cliente y verifique si coincide con el nombre de usuario de la base de datos solicitado. La autenticación de identidad solo se puede utilizar en conexiones TCP / IP. Cuando se especifica para conexiones locales, se utilizará la autenticación de pares en su lugar. Consulte la Sección 20.8 para obtener más detalles.
peer
-
Obtenga el nombre de usuario del sistema operativo del cliente del sistema operativo y verifique si coincide con el nombre de usuario de la base de datos solicitado. Esto solo está disponible para conexiones locales. Consulte la Sección 20.9 para obtener más detalles.
ldap
-
Autentíquese mediante un servidor LDAP. Consulte la Sección 20.10 para obtener más detalles.
radius
-
Autentíquese mediante un servidor RADIUS. Consulte la Sección 20.11 para obtener más detalles.
cert
-
Autentíquese mediante certificados de cliente SSL. Consulte la Sección 20.12 para obtener más detalles.
pam
-
Autentíquese mediante el servicio Módulos de autenticación conectables (PAM) que proporciona el sistema operativo. Consulte la Sección 20.13 para obtener más detalles.
bsd
-
Autentíquese mediante el servicio de autenticación BSD proporcionado por el sistema operativo. Consulte la Sección 20.14 para obtener más detalles.
auth-options
-
Después de la
auth-method
campo, puede haber campos del formularioname
=
value
que especifican opciones para el método de autenticación. Los detalles sobre qué opciones están disponibles para qué métodos de autenticación aparecen a continuación.Además de las opciones específicas del método que se enumeran a continuación, hay una opción de autenticación independiente del método
clientcert
, que se puede especificar en cualquierhostssl
registro. Esta opción se puede establecer enverify-ca
overify-full
. Ambas opciones requieren que el cliente presente un certificado SSL válido (confiable), mientras queverify-full
además hace cumplir que elcn
(Nombre común) en el certificado coincide con el nombre de usuario o una asignación aplicable. Este comportamiento es similar alcert
método de autenticación (consulte la Sección 20.12), pero permite emparejar la verificación de certificados de cliente con cualquier método de autenticación que admitahostssl
entradas.
Archivos incluidos por @
las construcciones se leen como listas de nombres, que pueden estar separados por espacios en blanco o comas. Los comentarios son introducidos por #
, al igual que en pg_hba.conf
y anidado @
se permiten construcciones. A menos que el nombre de archivo siguiente @
es una ruta absoluta, se considera relativa al directorio que contiene el archivo de referencia.
Desde el pg_hba.conf
Los registros se examinan secuencialmente para cada intento de conexión, el orden de los registros es significativo. Por lo general, los registros anteriores tendrán parámetros de coincidencia de conexión estrictos y métodos de autenticación más débiles, mientras que los registros posteriores tendrán parámetros de coincidencia más flexibles y métodos de autenticación más sólidos. Por ejemplo, uno podría desear usar trust
autenticación para conexiones TCP / IP locales, pero requiere una contraseña para conexiones TCP / IP remotas. En este caso, un registro que especifique trust
la autenticación para conexiones de 127.0.0.1 aparecería antes de un registro que especifica la autenticación de contraseña para un rango más amplio de direcciones IP de cliente permitidas.
los pg_hba.conf
El archivo se lee en el inicio y cuando el proceso del servidor principal recibe un SIGHUP señal. Si edita el archivo en un sistema activo, deberá avisar al administrador de correos (usando pg_ctl reload
, llamando a la función SQL pg_reload_conf()
, o usando kill -HUP
) para que vuelva a leer el archivo.
Nota
La afirmación anterior no es cierta en Microsoft Windows: allí, cualquier cambio en el
pg_hba.conf
El archivo se aplica inmediatamente mediante nuevas conexiones posteriores.
La vista del sistema pg_hba_file_rules
puede ser útil para realizar pruebas previas de los cambios en el pg_hba.conf
archivo, o para diagnosticar problemas si la carga del archivo no tuvo los efectos deseados. Filas en la vista con valores no nulos error
Los campos indican problemas en las líneas correspondientes del archivo.
Propina
Para conectarse a una base de datos en particular, un usuario no solo debe pasar el
pg_hba.conf
cheques, pero debe tener elCONNECT
privilegio para la base de datos. Si desea restringir qué usuarios pueden conectarse a qué bases de datos, generalmente es más fácil controlar esto otorgando / revocandoCONNECT
privilegio que poner las reglas enpg_hba.conf
entradas.
Algunos ejemplos de pg_hba.conf
Las entradas se muestran en el Ejemplo 20.1. Consulte la siguiente sección para obtener detalles sobre los diferentes métodos de autenticación.
Ejemplo 20.1. Ejemplo pg_hba.conf
Entradas
# Allow any user on the local system to connect to any database with# any database user name using Unix-domain sockets (the default for local# connections).## TYPE DATABASE USER ADDRESS METHODlocalallall trust # The same using local loopback TCP/IP connections.## TYPE DATABASE USER ADDRESS METHOD host allall127.0.0.1/32 trust # The same as the previous line, but using a separate netmask column## TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD host allall127.0.0.1255.255.255.255 trust # The same over IPv6.## TYPE DATABASE USER ADDRESS METHOD host allall ::1/128 trust # The same using a host name (would typically cover both IPv4 and IPv6).## TYPE DATABASE USER ADDRESS METHOD host allall localhost trust # Allow any user from any host with IP address 192.168.93.x to connect# to database "postgres" as the same user name that ident reports for# the connection (typically the operating system user name).## TYPE DATABASE USER ADDRESS METHOD host postgres all192.168.93.0/24 ident # Allow any user from host 192.168.12.10 to connect to database# "postgres" if the user's password is correctly supplied.## TYPE DATABASE USER ADDRESS METHOD host postgres all192.168.12.10/32 scram-sha-256# Allow any user from hosts in the example.com domain to connect to# any database if the user's password is correctly supplied.## Require SCRAM authentication for most users, but make an exception# for user 'mike', who uses an older client that doesn't support SCRAM# authentication.## TYPE DATABASE USER ADDRESS METHOD host all mike .example.com md5 host allall.example.com scram-sha-256# In the absence of preceding "host" lines, these three lines will# reject all connections from 192.168.54.1 (since that entry will be# matched first), but allow GSSAPI-encrypted connections from anywhere else# on the Internet. The zero mask causes no bits of the host IP address to# be considered, so it matches any host. Unencrypted GSSAPI connections# (which "fall through" to the third line since "hostgssenc" only matches# encrypted GSSAPI connections) are allowed, but only from 192.168.12.10.## TYPE DATABASE USER ADDRESS METHOD host allall192.168.54.1/32 reject hostgssenc allall0.0.0.0/0 gss host allall192.168.12.10/32 gss # Allow users from 192.168.x.x hosts to connect to any database, if# they pass the ident check. If, for example, ident says the user is# "bryanh" and he requests to connect as PostgreSQL user "guest1", the# connection is allowed if there is an entry in pg_ident.conf for map# "omicron" that says "bryanh" is allowed to connect as "guest1".## TYPE DATABASE USER ADDRESS METHOD host allall192.168.0.0/16 ident map=omicron # If these are the only three lines for local connections, they will# allow local users to connect only to their own databases (databases# with the same name as their database user name) except for administrators# and members of role "support", who can connect to all databases. The file# $PGDATA/admins contains a list of names of administrators. Passwords# are required in all cases.## TYPE DATABASE USER ADDRESS METHODlocal sameuser all md5 localall@admins md5 localall+support md5 # The last two lines above can be combined into a single line:localall@admins,+support md5 # The database column can also use lists and file names:local db1,db2,@demodbsall md5
Anterior | Hasta | próximo |
Capítulo 20. Autenticación del cliente | Hogar | 20.2. Mapas de nombres de usuario |