Esta es la solución más acertada que encomtrarás compartir, sin embargo estúdiala pausadamente y valora si se adapta a tu trabajo.
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.com
y 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 reload
llamando 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
, ann
o 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 bob
no 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 |
Recuerda algo, que te brindamos la opción de parafrasear si te ayudó.