¿Todos los usuarios necesitan acceso a la base de datos Postgres en PG_HBA.Conf?
-
22-10-2019 - |
Pregunta
Estaba probando el proceso de creación de usuarios en Pgadmin. Tengo una base de datos db1
para el cual quiero crear un usuario para poder conectarse a él. Quiero que esta sea la única base de datos a la que el usuario puede conectarse.
Después de crear el usuario, abrí mi pg_hba.conf
archivo y agregó un par de líneas:
host db1 dbuser 127.0.0.1/32 md5
host db1 dbuser ::1/128 md5
El usuario de Postgres tiene acceso a todas las bases de datos:
host all postgres 127.0.0.1/32 md5
host all postgres ::1/128 md5
Cuando me conecto al servidor a través de PGADmin, recibo un error que indica que dbuser
no tiene acceso al postgres
base de datos.
¿Esto es normal? ¿Debería DBUSER incluso requerir acceso a la base de datos de Postgres, cuando quiero que solo acceda? db1
? Tan pronto como agrego Postgres a la lista de bases de datos para dbuser
, Puedo conectarme.
Solución
Lo que ves es pgadmin conectarse al configurado Mantenimiento DB - cual es postgres
por defecto. Seleccione un servidor en el panel del navegador de objetos y elija "Propiedades" en el menú contextual (haga clic derecho). El menú desplegable solo ofrece las opciones típicas, pero puede Simplemente escriba cualquier nombre de base de datos.
Si el acceso de un usuario se limita a una base de datos en pg_hba.conf
(cual es El lugar más eficiente para hacerlo), puede hacer que funcione con PGADmin configurando Éste base de datos como mantenimiento db. No saldrá nada malo.
La otra opción es otorgar acceso al DB de mantenimiento (postgres
o lo que sea) en pg_hba.conf
Adicionalmente.
También puedes abrir todas las puertas en pg_hba.conf
y regular el acceso con permisos de base de datos, como @A_Horse explicó en su respuesta. Esto es más fácil de administrar, pero restringiendo el acceso en pg_hba.conf
es más seguro y más rápido, más robusto contra los ataques de DOS y la carga pesada. Sin embargo, no hará una gran diferencia en la mayoría de los casos.
Citando el Documentación de Pgadmin 1.22 (Lanzamiento final de Pgadmin III):
El campo DB de mantenimiento se utiliza para especificar la base de datos inicial a la que se conecta Pgadmin, y se espera que tenga el pgagenteesquema y administrador Objetos instalados (ambos opcionales). En PostgreSQL 8.1 y superior, el DB de mantenimiento normalmente se llama 'Postgres', y en versiones anteriores 'plantilla1' se usa a menudo, aunque es preferible crear una base de datos 'Postgres' para este propósito para evitar el desorden de la base de datos de la plantilla.
Otros consejos
No necesita hacer esto a través del PG_HBA.Conf.
Simplemente revoque el privilegio de conexión en la base de datos de ese usuario.
Sin embargo, por defecto, el público se otorga el privilegio de Connect. Así que primero debes revocar eso:
revoke connect on db1 from public;
grant connect on db1 to dbuser;
Necesitas ejecutar el revoke ... from public
Declaración para todas las bases de datos para asegurarse de que solo los usuarios específicos puedan conectarse.
Una vez que haya hecho eso, puede dejar pg_hba.conf "abierto" para todos los usuarios y todas las bases de datos.