dblink_connect_u — ouvre une connexion distante à une base de données de façon non sécurisée.
dblink_connect_u(text connstr) returns text dblink_connect_u(text connname, text connstr) returns text
dblink_connect_u()
est identique à
dblink_connect()
, à ceci près qu'elle permet à des
utilisateurs non-privilégiés de se connecter par toute méthode
d'authentification.
Si le serveur distant sélectionne une méthode d'authentification qui
n'implique pas de mot de passe, une impersonnalisation et une escalade
de droits peut survenir car la session semble émaner de l'utilisateur
qui exécute le serveur PostgreSQL local.
De plus, même si le serveur distant réclame un mot de passe, il est
possible de fournir le mot de passe à partir de l'environnement du serveur,
par exemple en utilisant un fichier ~/.pgpass
appartenant à l'utilisateur du serveur. Cela apporte un risque
supplémentaire d'impersonnification, sans parler de la possibilité d'exposer
un mot de passe sur un serveur distant qui ne mérite pas votre confiance.
C'est pourquoi,
dblink_connect_u()
est installé initialement sans
aucun droit pour PUBLIC
, ce qui restreint son
utilisation aux seuls super-utilisateurs. Dans certaines cas,
le droit EXECUTE
sur
dblink_connect_u()
peut être accordé à quelque
utilisateur spécifique digne de confiance, mais cela doit se faire
avec une extrême prudence. Il est aussi recommandé que tout fichier
~/.pgpass
appartenant à l'utilisateur du serveur ne
contienne pas de joker dans le nom de l'hôte.
Pour plus de détails, voir dblink_connect()
.