使用 Hashicorp Vault 密码更新 npgsql 池连接

Updating npgsql pool connections with Hashcorp Vault password

我正在考虑在我的 C# Web 服务应用程序中使用 Hashicorp's Vault software for managing Postgres database passwords utilizing the VaultSharp postgresql secret backend

这些应用程序使用具有持久连接的数据库池连接到 PostgreSql 服务器。

我的理解是,在此设置中,Vault 将动态生成和撤销提供给我的应用程序的数据库用户名和密码。

但是我不清楚的是,是否有一种自动方法可以让我的应用程序在租约到期之前动态地重新验证数据库服务器?或者我是否需要手动管理我的持久数据库连接并在租约到期前手动断开/重新连接它们?

我希望这将是 npgsql 或类似数据库驱动程序中的一个功能,可以为我处理这个问题,或者如果有一种方法可以在现有连接上使用新的用户名和密码重新进行身份验证。

PostgreSQL 协议不允许重新验证现有连接 - 验证仅在启动数据包中首次打开连接时发生。有关详细信息,请参阅 the protocol docs。因此,您将不得不关闭当前连接并打开新连接。

您可以通过调用 NpgsqlConnection.ClearPool()ClearAllPools() 强制 Npgsql 清除池中所有现有的空闲连接。但是,这不会影响您的应用程序中当前正在使用的任何连接 - 无法即时关闭它们(这会在下次使用连接时导致异常)。

从理论上讲,可以开发一个 "replace" 现有连接的身份验证信息的功能。这将在所有正在使用的连接上设置一个标志,该标志将触发透明关闭并在下次使用该连接时重新连接。但是,这将是一个相当复杂且容易出错的功能。