Z dokumentacji :
i
Oznacza to, że Twój dblink
połączenie używa dblink_connect
niejawnie. Użyj dblink_connect_u
zamiast tego lub zmień metodę uwierzytelniania na np. md5.
Pamiętaj, że musisz również przyznać uprawnienia do wykonywania do caixa
rola, na przykład przez:
GRANT EXECUTE ON FUNCTION dblink_connect_u(text) TO caixa;
GRANT EXECUTE ON FUNCTION dblink_connect_u(text, text) TO caixa;
Przykład pracy (po 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');
EDYTUJ:
Przepraszam za nieco mylącą odpowiedź. Oczywiście nie potrzebujesz dblink_connect_u
dla uwierzytelnionego połączenia md5. Widzę jedną możliwość. PostgreSQL ma dwa różne typy połączeń:host i lokalne .
Bieganie:
psql -h localhost ..
zawiera połączenie z hostem, ale
dblink_connect('mycon','dbname=vchitta_op user=caixa password=caixa');
używa lokalnego type, więc jeśli masz metodę bez hasła dla połączenia lokalnego (na przykład metodę ident lub trust), to zwraca
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.
Sprawdź
dblink_connect('mycon','hostaddr=127.0.0.1 dbname=vchitta_op user=caixa password=caixa')
dla hosta połączenie. Dla jasności, jeśli to możliwe, opublikuj swój pg_hba.conf
.
Sprawdziłem też co z CONNECT
przywilej vchitta_op
DB, ale komunikat o błędzie jest inny:
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.