Non-super-utilisateur ne peut pas se connecter si le serveur ne demande pas de mot de passe lors de l'utilisation dblink
Je voudrais faire quelques croix de la base de données des références dans mon application. Brièvement, j'ai deux bases de données appelées méta et de l'op. Je veux faire un select de la requête à partir de la méta à une table à l'op de base de données comme ci-dessous mais pour obtenir l'erreur ci-dessous. J'ai essayé avec le mot de passe et sans mot de passe. par la voie caixa
utilisateur est un non-super-utilisateur et mon serveur cible (op
serveur de base de données est d'avoir l'authentification MD5 mode).
meta=> select * from dblink('dbname=op password=caixa','SELECT op_col from op_table') AS t(op_col varchar);
ERREUR: le mot de passe est requis
DÉTAIL: Non-super-utilisateur ne peut pas se connecter si le serveur ne demande pas de mot de passe.
ASTUCE: serveur Cible de la méthode d'authentification doit être changé.
Ce que l'INDICATEUR dans le message d'erreur ci-dessus le suggère? ai-je besoin de changer le serveur d'auth mode? Sans changer le serveur auth du mode (MD5) je ne peux pas exécuter la requête ci-dessus?
OriginalL'auteur vchitta | 2011-08-11
Vous devez vous connecter pour publier un commentaire.
De la documentation:
et
Cela signifie que votre
dblink
appel à l'aide dedblink_connect
implicitement. Utilisationdblink_connect_u
à la place ou changer votre auth méthode, par exemple md5.Noter que vous devez également accorder exécuter privilège de
caixa
rôle, par exemple:Exemple de travail (après
GRANT
):EDIT:
Désolé pour légèrement trompeur réponse. Bien sûr, vous ne pas besoin
dblink_connect_u
md5 authentifiéconnexion. Il y a une possibilité que je vois. PostgreSQL a deux types de connexion: hôte et local.
En cours d'exécution:
psql -h localhost ..
intègre connexion hôte, mais
dblink_connect('mycon','dbname=vchitta_op user=caixa password=caixa');
utilise local type, donc si vous avez un mot de passe de la méthode pour une connexion locale (par exemple ident de la méthode ou de la fiducie), puis il retourne
Vérifier
dblink_connect('mycon','hostaddr=127.0.0.1 dbname=vchitta_op user=caixa password=caixa')
pour hôte connexion. Pour plus de clarté, si possible, veuillez poster votre
pg_hba.conf
.J'ai aussi vérifié qu'en
CONNECT
privilège survchitta_op
DB, mais le message d'erreur est différent:vchitta_meta=> select dblink_connect_u('mycon','dbname=vchitta_op'); ERROR: password is required DETAIL: Non-superusers must provide a password in the connection string.
mon serveur auth méthode est déjà md5.
Vérifier
select dblink_connect('mycon','dbname=vchitta_op user=caixa password=yourpass');
d'Ailleurs vous n'avez pas besoin de toutdblink_connect_u
approche si vous avez md5 déjà.C'est mon resutl quand j'ai essayé comme vous l'avez suggéré:
-bash-3.2$ psql -h localhost -d vchitta_meta -U postgres vchitta_meta=# grant execute on function dblink_connect_u(text) to caixa; GRANT vchitta_meta=# grant execute on function dblink_connect_u(text,text) to caixa; GRANT vchitta_meta=# \q -bash-3.2$ psql -h localhost -d vchitta_meta -U caixa vchitta_meta=> select dblink_connect_u('conn1','dbname=vchitta_op'); **ERROR: password is required DETAIL: Non-superusers must provide a password in the connection string.**
Cette fois, l'erreur a légèrement changé. <br>
vchitta_meta=> select dblink_connect('mycon','dbname=vchitta_op user=caixa password=caixa'); ERROR: password is required <b>DETAIL: Non-superuser cannot connect if the server does not request a password.<b> HINT: Target server's authentication method must be changed.
OriginalL'auteur Grzegorz Szpetkowski
Il y a une solution qui a fait le tour pour moi. Non que les superutilisateurs peuvent exécuter des fonctions avec les privilèges de super-utilisateur si "SECURITY DEFINER" est définie.
( http://www.postgresql.org/docs/9.1/static/sql-createfunction.html )
Cela signifie que vous pouvez créer une fonction (avec super-utilisateur propriétaire et de la SÉCURITÉ DEFINER en option), qui ne de la croix-manipulation de base de données (à l'aide de dblink() sans mot de passe) et de l'exécuter en vertu de la non-superuser
OriginalL'auteur AlexM
J'en ai un similaire mais d'une autre question. J'ai deux serveurs identiques postgres.conf et pg_hba.conf. Cependant, l'un sur la version 9.2.3 et un sur 9.2.4
9.2.3
pg_hba.conf a
puis-je me connecter à la base de données à l'aide de n'importe quel utilisateur
succès de la connexion.
9.2.4
mon pg_hba.conf a la même entrée que ci-dessus
MAINTENANT
J'ai changer mon pg_hba.conf sur 9.2.4 comme ci-dessous
et redémarrez postgres
J'ai Vérifié le journal des modifications entre les versions 9.2.3 et 9.2.4 mais impossible de trouver tous les détails.
remarque: la modification de auth méthode de la confiance du md5 sur 9.2.3 ne fait aucune différence et travaille toujours.
OriginalL'auteur kaushik