sql >> Base de Datos >  >> RDS >> PostgreSQL

El no superusuario no puede conectarse si el servidor no solicita una contraseña mientras usa dblink

De documentación :

y

Eso significa que su dblink la llamada está usando dblink_connect implícitamente. Use dblink_connect_u en su lugar o cambie su método de autenticación a, p. md5.

Tenga en cuenta que también necesita otorgar privilegios de ejecución a caixa rol, por ejemplo por:

GRANT EXECUTE ON FUNCTION dblink_connect_u(text) TO caixa;
GRANT EXECUTE ON FUNCTION dblink_connect_u(text, text) TO caixa;

Ejemplo de trabajo (después de GRANT ):

meta=> SELECT dblink_connect_u('conn1', 'dbname=op');
meta=> SELECT * FROM dblink('conn1','SELECT op_col from op_table')
            AS t(op_col varchar);
 op_col 
--------
 aaa
 bbb
 ccc
(3 rows)
meta=> SELECT dblink_disconnect('conn1');

EDITAR:

Lo siento por la respuesta un poco engañosa. Por supuesto que no necesita dblink_connect_u para conexión autenticada md5. Hay una posibilidad que veo. PostgreSQL tiene dos diferentes tipos de conexión:host y locales .

Corriendo:

psql -h localhost ..

incorpora conexión host, pero

dblink_connect('mycon','dbname=vchitta_op user=caixa password=caixa');

usa local tipo, por lo que si tiene un método sin contraseña para la conexión local (por ejemplo, método de identificación o confianza), entonces regresa

ERROR:  password is required
DETAIL:  Non-superuser cannot connect if the server does not request a password.
HINT:  Target server's authentication method must be changed.

Comprobar

dblink_connect('mycon','hostaddr=127.0.0.1 dbname=vchitta_op user=caixa password=caixa')

para anfitrión conexión. Para mayor claridad, si es posible, publique su pg_hba.conf .

También verifiqué qué pasa con CONNECT privilegio en vchitta_op DB, pero el mensaje de error es diferente:

REVOKE CONNECT ON DATABASE vchitta_op FROM PUBLIC;
REVOKE CONNECT ON DATABASE vchitta_op FROM caixa;

SELECT dblink_connect('mycon','dbname=vchitta_op user=caixa password=caixa');
ERROR:  could not establish connection
DETAIL:  FATAL:  permission denied for database "vchitta_op"
DETAIL:  User does not have CONNECT privilege.