¿Cuáles son los archivos clave para configurar PostgreSQL?
PostgreSQL es un sistema de bases de datos muy potente y flexible. Sin embargo, su configuración puede ser un desafío si no conocemos bien las herramientas adecuadas. Es crucial familiarizarse con tres archivos fundamentales que suelen ser la causa de problemas o soluciones al configurar PostgreSQL:
postgresql.conf
pg_hba.conf
pg_ident.conf
Estos archivos determinan el comportamiento de nuestro sistema de bases de datos y, cuando están correctamente configurados, pueden ahorrarnos muchos dolores de cabeza.
¿Cómo acceder a los archivos de configuración?
Para acceder a los archivos de configuración, no es necesario explorar manualmente todo el sistema operativo. Desde la consola de PostgreSQL o mediante herramientas como PGAdmin, podemos encontrar la ruta de estos archivos utilizando la función SHOW config_file; que nos indica dónde se ubican.
¿Qué contiene el archivo postgresql.conf?
Este archivo es esencial para la configuración de PostgreSQL, ya que contiene una serie de parámetros clave, como:
Configuración de memoria: Determina la cantidad de memoria que PostgreSQL puede utilizar.
Modos de operación: Permite configurar la base de datos para operar en modo maestro o standby.
Conexiones y autenticaciones: Gestiona las direcciones desde donde puede aceptarse la conexión y bajo qué condiciones.
Es importante familiarizarse con este archivo y sus comentarios, que explican con detalle cada parámetro. Esto nos ayudará a identificar y resolver problemas como el uso excesivo de CPU o falta de memoria.
¿Cómo configurar el archivo pg_hba.conf?
El archivo pg_hba.conf se encarga de definir los roles y tipos de acceso a la base de datos. Utiliza cinco columnas para configurar:
Fuente de la conexión
Acciones permitidas
Usuarios que pueden conectarse
Dirección de conexión
Método de autenticación
El manejo adecuado de este archivo es crucial, ya que un error podría bloquear incluso el acceso local a la base de datos. Por ejemplo, la línea de configuración:
# Tipo Base de datos Usuario Dirección Método
host all all 127.0.0.1/32 md5
Esta línea permite el acceso local a todas las bases de datos utilizando el método de autenticación MD5.
¿Qué función tiene el archivo pg_ident.conf?
El archivo pg_ident.conf permite mapear usuarios del sistema operativo a roles específicos dentro de PostgreSQL. Esto es especialmente útil en plataformas como Linux, donde los usuarios root o sudoers pueden tener permisos especiales. Por ejemplo, podemos mapear:
# Sistema PostgreSQL
admin master_user
Esto le indicaría a PostgreSQL que el usuario del sistema operativo admin tiene el rol master_user en la base de datos.
¿Qué debemos considerar al hacer cambios en la configuración?
Reiniciar la base de datos: Para que los cambios en los archivos de configuración surtan efecto, es necesario reiniciar el servicio de PostgreSQL.
Leer la documentación: Aunque se puede comenzar a desarrollar sin leer todos los archivos completamente, comprender cada parámetro nos prepara mejor para resolver cualquier problema potencial.
Seguridad: Es vital configurar correctamente los accesos y roles para proteger la base de datos de accesos no autorizados.
Con estos archivos y configuraciones, tienes el poder de optimizar PostgreSQL para satisfacer las necesidades específicas de tu aplicación. Explora, experimenta y mantén siempre la seguridad como una prioridad.
A través de la sentencia SHOW CONFIG se nos muestra donde están los archivos de configuración. En mi caso la ruta es:
/Library/PostgreSQL/12/data/postgresql.conf
Algo a tener en cuenta es que en la ruta por default de instalación no se puede acceder debido a falta de permisos. Para ingresar basta con un:
sudo cd /Library/PostgreSQL/12/data/
Postgresql.conf: Configuración general de postgres, múltiples opciones referentes a direcciones de conexión de entrada, memoria, cantidad de hilos de pocesamiento, replica, etc.
pg_hba.conf: Muestra los roles así como los tipos de acceso a la base de datos.
pg_ident.conf: Permite realizar el mapeo de usuarios. Permite definir roles a usuarios del sistema operativo donde se ejecuta postgres.
.
Lo mejor es leer todo el documento para saber que parámetros podemos modificar y la configuración actual. Si un valor está comentado con el símbolo de gato(#), significa que es el valor predeterminado. Si lo quiero cambiar hay que quitar el # para desconectarlo y modificarlo.
.
Importante: reiniciar el programa(base de datos), para aplicar los cambios.
.
Replicación en PostgreSQL
.
Uno de los métodos más usados para conseguir la Alta disponibilidad en nuestro servidor Postgres es implementar la Replicación. Con ello nos aseguramos que nuestro sistema esté activo el 99,9% del año. Replicas en "version and platform compatibility".
.
¿Qué es la Replicación?
.
Es la transmisión de información derivada de las operaciones DML de una Base de Datos a otra, es decir, se transmite a otra Base de Datos las instrucciones INSERT, UPDATE y DELETE que se realicen en una Base de datos de forma que ambas BBDD tengan la misma información, así pues, se obtiene una redundancia de datos.
.
Pg_hba.conf
.
Permite proteger las conexiones por roles. Muestra los roles y los tipos de acceso que tiene con la base de datos. Muestra y puede configurar:
.
|> Type <|> Database <|> User <|> Address <|> Method <|
...host ... . . . . All . . . . . . . All . . .127.0.0.1/32 . . . md5
.
Esta configuración permite todas las conexiones a todas las bases de datos locales dentro del equipo por md5.
.
MD5
.
El método md5 utiliza un mecanismo de desafío-respuesta personalizado menos seguro. Evita el rastreo de contraseñas y evita el almacenamiento de contraseñas en el servidor en texto sin formato, pero no brinda protección si un atacante logra robar el hash de la contraseña del servidor. Además, el algoritmo hash MD5 ya no se considera seguro contra determinados ataques.
.
El método md5 no se puede utilizar con la función db_user_namespace.
.
Para facilitar la transición del método md5 al método SCRAM más nuevo, si md5 se especifica como método en pg_hba.conf pero la contraseña del usuario en el servidor está encriptada para SCRAM (ver más abajo), entonces se elegirá automáticamente la autenticación basada en SCRAM. .
.
Replicación en PostgreSQL
.
Uno de los métodos más usados para conseguir la Alta disponibilidad en nuestro servidor Postgres es implementar la Replicación. Con ello nos aseguramos que nuestro sistema esté activo el 99,9% del año.
.
¿Qué es la Replicación?
.
Es la transmisión de información derivada de las operaciones DML de una Base de Datos a otra, es decir, se transmite a otra Base de Datos las instrucciones INSERT, UPDATE y DELETE que se realicen en una Base de datos de forma que ambas BBDD tengan la misma información, así pues, se obtiene una redundancia de datos.
.
Pg_ident.conf
.
Permite a Postgres decir que usuario local del Sistema Operativo corresponde a qué rol de la base de datos.
.
|> mapname <|> system-username <|> pg-username <|
Muestra la ruta de nuestros archivos de configuracion
SHOW config_file;
- postgresql.conf: Configuración general de postgres, múltiples opciones referentes a direcciones de conexión de entrada, memoria, cantidad de hilos de pocesamiento, replica, etc.
- pg_hba.conf: Muestra los roles así como los tipos de acceso a la base de datos.
- pg_ident.conf: Permite realizar el mapeo de usuarios. Permite definir roles a usuarios del sistema operativo donde se ejecuta postgres.
Si no tienes editor para mostrar archivos de texto plano, puedes descargar el que menciona el profe en el video: Visual Studio Code https://code.visualstudio.com/docs/?dv=win64user
Espero les sea útil
Para entrar a la carpeta data desde MacOS debes ir a \Library\Postgres**13** 13 hace referencia a la versión que tengas instalada
Luego haces clic derecho y te vas a Gea Info o Obtener Información
Agregas ahora tu usuario administrador para leer y escribir
Ahora estas listo para ingresar a hacer tu configuración
Si alguien esta intentando conectarse a una base de datos remota verifiquen que el firewall de linux permita la conexión. Ejecuten este comando para permitir las conexiones:
Es interesante cómo en PostgreSQL versión 11 (la de este vídeo) se usaba MD5 y ahora en la versión 13 (la que yo tengo) ahora usa SHA-256. Me imagino que es mucho más seguro.
Si, es otro método de encriptación diferente, más securo que MD5, hay dos cambios principales, cómo PostgreSQL no conoce el texto original de un texto ya encriptado, el usuario de la base de datos debe re ingresar el valor original para que sea encriptado con éste nuevo método (fué introducido en la versión 10),
El backend (php, python, node, net, java, etc...) que se conecte a postgresql para usar ésta función debe también poder soportar scram-sha-256 , si no lo soporta y debes hacer validaciones del lado del backend habrán problemas, por ejemplo cuando estas validando la clave de acceso de un usuario.
en mi caso (yo uso manjaro), tanto la carpeta data como el documento postgresql.conf se encontraban con permisos restringidos, por ende hubo otorgarle permisos con el comando chmod.
sino se hace esto no deja acceder a la carpeta ni abrir el documento.