PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Il non superutente non può connettersi se il server non richiede una password durante l'utilizzo di dblink

Da documentazione :

e

Ciò significa che il tuo dblink la chiamata sta usando dblink_connect implicitamente. Usa dblink_connect_u invece o cambia il tuo metodo di autenticazione ad es. md5.

Nota che devi anche concedere il privilegio di esecuzione a caixa ruolo, ad esempio da:

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

Esempio funzionante (dopo 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');

MODIFICA:

Scusa per la risposta leggermente fuorviante. Ovviamente non bisogno di dblink_connect_u per connessione autenticata md5. C'è una possibilità che vedo. PostgreSQL ne ha due diversi tipi di connessione:host e locale .

In esecuzione:

psql -h localhost ..

incorpora la connessione host, ma

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

utilizza locale digita, quindi se hai un metodo non password per la connessione locale (ad esempio metodo ident o trust), restituisce

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.

Controlla

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

per host connessione. Per maggiore chiarezza, se possibile, posta il tuo pg_hba.conf .

Ho anche controllato che dire di CONNECT privilegio su vchitta_op DB, ma il messaggio di errore è diverso:

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.