PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Nicht-Superuser können sich nicht verbinden, wenn der Server bei der Verwendung von dblink kein Passwort anfordert

Aus der Dokumentation :

und

Das bedeutet Ihren dblink Aufruf verwendet dblink_connect implizit. Verwenden Sie dblink_connect_u stattdessen oder ändern Sie Ihre Authentifizierungsmethode auf z. md5.

Beachten Sie, dass Sie caixa auch die Ausführungsberechtigung erteilen müssen Rolle, zum Beispiel durch:

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

Arbeitsbeispiel (nach 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');

BEARBEITEN:

Sorry für die leicht irreführende Antwort. Natürlich nicht benötigen dblink_connect_u für md5-authentifizierte Verbindung. Eine Möglichkeit sehe ich. PostgreSQL hat zwei verschiedene Verbindungstypen:Host und lokal .

Laufend:

psql -h localhost ..

beinhaltet Host-Verbindung, aber

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

verwendet lokal type, wenn Sie also eine Nicht-Passwort-Methode für die lokale Verbindung haben (z. B. Ident-Methode oder Trust), dann wird

zurückgegeben
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.

Prüfen

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

für Host Verbindung. Zur Verdeutlichung poste bitte wenn möglich deine pg_hba.conf .

Ich habe auch nachgesehen, was mit CONNECT ist Privileg auf vchitta_op DB, aber Fehlermeldung ist 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.