2016-10-28 4 views
0

Je cherche à utiliser le logiciel Hashicorp's Vault pour gérer les mots de passe de base de données Postgres en utilisant le VaultSharp postgresql secret backend dans mes applications de service Web C#.Mise à jour des connexions de pool npgsql avec le mot de passe Hashcorp Vault

Ces applications se connectent à un serveur PostgreSQL en utilisant un pool de base de données avec des connexions permanentes. Je comprends que dans cette configuration, Vault génère et révoque dynamiquement les noms d'utilisateur et les mots de passe de base de données qui ont été fournis à mon application.

Cependant, ce que je ne comprends pas, est-ce qu'il y a un moyen automatisé pour mon application de réauthentifier dynamiquement au serveur de base de données avant l'expiration du bail? Ou dois-je gérer manuellement mes connexions de base de données persistantes et les déconnecter/reconnecter manuellement avant l'expiration du bail? J'espère que ce sera une fonctionnalité dans npgsql ou un pilote de base de données similaire qui peut gérer cela pour moi, ou s'il y a un moyen de réauthentifier avec un nouveau nom d'utilisateur et mot de passe sur une connexion existante.

Répondre

0

Le protocole PostgreSQL ne permet pas de réauthentifier une connexion existante - l'authentification ne se produit que lors de la première ouverture d'une connexion, dans le paquet de démarrage. Pour plus d'informations, voir the protocol docs. Donc, vous allez devoir fermer votre (s) connexion (s) actuelle (s) et en ouvrir une nouvelle (s).

Vous pouvez forcer Npgsql à effacer toutes les connexions inactives existantes dans le pool en appelant NpgsqlConnection.ClearPool() ou ClearAllPools(). Cependant, cela n'affectera pas les connexions actuellement utilisées dans votre application - il n'y a aucun moyen de les fermer à la volée (cela entraînera une exception la prochaine fois que la connexion sera utilisée).

En théorie, il est possible de développer une fonctionnalité qui remplacerait les informations d'authentification pour les connexions existantes. Cela définirait un indicateur sur toutes les connexions en cours d'utilisation qui déclencherait une fermeture transparente et reconnecterait la prochaine fois que la connexion est utilisée. Cependant, ce serait une fonctionnalité assez compliquée et sujette aux erreurs.