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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a dba.stackexchange
scroll top