PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

O não superusuário não pode se conectar se o servidor não solicitar uma senha enquanto estiver usando o dblink


Da documentação :

e

Isso significa que seu dblink chamada está usando dblink_connect implicitamente. Use dblink_connect_u em vez disso ou altere seu método de autenticação para, por exemplo, md5.

Observe que você também precisa conceder privilégio de execução para caixa papel, por exemplo:
GRANT EXECUTE ON FUNCTION dblink_connect_u(text) TO caixa;
GRANT EXECUTE ON FUNCTION dblink_connect_u(text, text) TO caixa;

Exemplo de trabalho (depois 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:

Desculpe pela resposta um pouco enganosa. Claro que você não precisa de dblink_connect_u para conexão autenticada md5. Há uma possibilidade que eu vejo. PostgreSQL tem dois diferentes tipos de conexão:host e local .

Corrida:

psql -h localhost ..

incorpora conexão de host, mas

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

usa local type, portanto, se você tiver um método sem senha para conexão local (por exemplo, método ident ou confiança), ele retornará
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.

Verificar

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

para anfitrião conexão. Para maior clareza, se possível, poste seu pg_hba.conf .

Também verifiquei o que dizer de CONNECT privilégio em vchitta_op DB, mas a mensagem de erro é 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.