Cuando se usa un sistema de autenticación externo como Ident o GSSAPI, el nombre del usuario del sistema operativo que inició la conexión puede no ser el mismo que el usuario de la base de datos (rol) que se va a usar. En este caso, se puede aplicar una asignación de nombre de usuario para asignar el nombre de usuario del sistema operativo a un usuario de la base de datos. Para utilizar la asignación de nombre de usuario, especifique map=map-name en el campo de opciones de pg_hba.conf. Esta opción es compatible con todos los métodos de autenticación que reciben nombres de usuarios externos. Dado que se pueden necesitar diferentes asignaciones para diferentes conexiones, el nombre de la asignación que se utilizará se especifica en el map-name parámetro en pg_hba.conf para indicar qué mapa usar para cada conexión individual.

Los mapas de nombre de usuario se definen en el archivo de mapa de identificación, que por defecto se llama pg_ident.conf y se almacena en el directorio de datos del clúster. (Sin embargo, es posible colocar el archivo de mapa en otro lugar; consulte el parámetro de configuración ident_file). El archivo de mapa de identificación contiene líneas de la forma general:

map-name system-username database-username

Los comentarios y los espacios en blanco se manejan de la misma manera que en pg_hba.conf. los map-name es un nombre arbitrario que se utilizará para referirse a este mapeo en pg_hba.conf. Los otros dos campos especifican un nombre de usuario del sistema operativo y un nombre de usuario de base de datos coincidente. Lo mismo map-name se puede usar repetidamente para especificar múltiples asignaciones de usuarios dentro de un solo mapa.

No hay restricción en cuanto a cuántos usuarios de la base de datos puede corresponder a un determinado usuario del sistema operativo, ni viceversa. Por lo tanto, las entradas en un mapa deben considerarse como significado este usuario del sistema operativo puede conectarse como este usuario de la base de datos, en lugar de implicar que son equivalentes. La conexión se permitirá si hay alguna entrada en el mapa que empareje el nombre de usuario obtenido del sistema de autenticación externo con el nombre de usuario de la base de datos con el que el usuario solicitó conectarse.

Si el system-username campo comienza con una barra inclinada (/), el resto del campo se trata como una expresión regular. (Consulte la Sección 9.7.3.1 para obtener detalles sobre la sintaxis de expresiones regulares de PostgreSQL). La expresión regular puede incluir una captura única o una subexpresión entre paréntesis, a la que luego se puede hacer referencia en el database-username campo como 1 (barra invertida-uno). Esto permite el mapeo de múltiples nombres de usuario en una sola línea, lo que es particularmente útil para sustituciones de sintaxis simples. Por ejemplo, estas entradas

mymap   /^(.*)@mydomain.com$      1
mymap   /^(.*)@otherdomain.com$   guest

eliminará la parte del dominio para los usuarios con nombres de usuario del sistema que terminan con @mydomain.comy permitir que cualquier usuario cuyo nombre de sistema termine con @otherdomain.com iniciar sesión como guest.

Propina

Tenga en cuenta que, de forma predeterminada, una expresión regular puede coincidir solo con una parte de un string. Por lo general, es aconsejable usar ^ y $como se muestra en el ejemplo anterior, para forzar la coincidencia con todo el nombre de usuario del sistema.

los pg_ident.conf El archivo se lee en el inicio y cuando el proceso del servidor principal recibe un SUSCRÍBETE señal. Si edita el archivo en un sistema activo, deberá señalar al administrador de correo (usando pg_ctl reloadllamando a la función SQL pg_reload_conf()o usando kill -HUP) para que vuelva a leer el archivo.

A pg_ident.conf archivo que podría utilizarse junto con el pg_hba.conf El archivo del ejemplo 20.1 se muestra en el ejemplo 20.2. En este ejemplo, cualquiera inició sesión en una máquina en la red 192.168 que no tiene el nombre de usuario del sistema operativo bryanh, anno robert no se le daría acceso. usuario de Unix robert solo se le permitiría el acceso cuando intente conectarse como usuario de PostgreSQL bobno como robert o cualquier otra persona. ann solo se le permitiría conectarse como ann. Usuario bryanh se le permitiría conectarse como bryanh o como guest1.

Ejemplo 20.2. Un ejemplo pg_ident.conf Expediente

# MAPNAME       SYSTEM-USERNAME         PG-USERNAME

omicron         bryanh                  bryanh
omicron         ann                     ann
# bob has user name robert on these machines
omicron         robert                  bob
# bryanh can also connect as guest1
omicron         bryanh                  guest1
Anterior Arriba Próximo
20.1. los pg_hba.conf Expediente Casa 20.3. Métodos de autenticación