PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Le non-superutilisateur ne peut pas se connecter si le serveur ne demande pas de mot de passe lors de l'utilisation de dblink

À partir de la documentation :

et

Cela signifie que votre dblink l'appel utilise dblink_connect implicitement. Utilisez dblink_connect_u à la place ou changez votre méthode d'authentification par ex. md5.

Notez que vous devez également accorder le privilège d'exécution à caixa rôle, par exemple par :

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

Exemple de travail (après 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');

MODIF :

Désolé pour la réponse légèrement trompeuse. Bien sûr, vous ne le faites pas besoin de dblink_connect_u pour une connexion authentifiée md5. Il y a une possibilité que je vois. PostgreSQL a deux différents types de connexion :hôte et local .

En cours d'exécution :

psql -h localhost ..

intègre une connexion hôte, mais

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

utilise local type, donc si vous avez une méthode sans mot de passe pour la connexion locale (par exemple la méthode ident ou la confiance), alors elle retourne

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.

Vérifier

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

pour hôte lien. Pour plus de clarté, si possible, veuillez poster votre pg_hba.conf .

J'ai également vérifié qu'en est-il de CONNECT privilège sur vchitta_op DB, mais le message d'erreur est différent :

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.