Uit documentatie :
en
Dat betekent uw dblink
oproep gebruikt dblink_connect
impliciet. Gebruik dblink_connect_u
in plaats daarvan of wijzig uw auth-methode in b.v. md5.
Merk op dat u ook uitvoeringsrechten moet verlenen aan caixa
rol, bijvoorbeeld door:
GRANT EXECUTE ON FUNCTION dblink_connect_u(text) TO caixa;
GRANT EXECUTE ON FUNCTION dblink_connect_u(text, text) TO caixa;
Werkvoorbeeld (na 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');
BEWERKEN:
Sorry voor enigszins misleidend antwoord. Natuurlijk niet heb dblink_connect_u
. nodig voor md5 geauthenticeerde verbinding. Er is één mogelijkheid die ik zie. PostgreSQL heeft twee verschillende verbindingstypen:host en lokaal .
Hardlopen:
psql -h localhost ..
bevat hostverbinding, maar
dblink_connect('mycon','dbname=vchitta_op user=caixa password=caixa');
gebruikt lokaal type, dus als je een niet-wachtwoordmethode hebt voor lokale verbinding (bijvoorbeeld ident-methode of vertrouwen), dan retourneert het
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.
Controleer
dblink_connect('mycon','hostaddr=127.0.0.1 dbname=vchitta_op user=caixa password=caixa')
voor host verbinding. Plaats voor de duidelijkheid indien mogelijk uw pg_hba.conf
.
Ik heb ook gekeken hoe het zit met CONNECT
privilege op vchitta_op
DB, maar de foutmelding is anders:
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.