我正在研究使用Hashicorp's Vault软件来利用我的C#Web服务应用程序中的VaultSharp postgresql secret backend来管理Postgres数据库密码。
这些应用程序使用具有持久连接的数据库池连接到PostgreSql服务器。
我的理解是,在此设置中,Vault将动态生成和撤消提供给我的应用程序的数据库用户名和密码。
然而,我不清楚的是,我的应用程序是否有自动方式在租约到期之前动态地重新验证数据库服务器?或者我是否需要手动管理我的持久数据库连接并在租约到期之前手动断开/重新连接它们?
我希望这是npgsql或类似的数据库驱动程序中的一个功能,可以为我处理这个问题,或者是否有办法在现有连接上使用新的用户名和密码重新进行身份验证。
答案 0 :(得分:0)
PostgreSQL协议不允许重新验证现有连接 - 只有在首次打开连接时才会在启动数据包中进行身份验证。有关更多信息,请参阅the protocol docs。因此,您必须关闭当前连接并打开新连接。
您可以通过调用NpgsqlConnection.ClearPool()
或ClearAllPools()
强制Npgsql清除池中的所有现有空闲连接。但是,这不会影响您的应用程序中当前使用的任何连接 - 无法动态关闭它们(这将在下次使用连接时导致异常)。
理论上,可以开发一种能够替代"现有连接的身份验证信息。这将在所有正在使用的连接上设置一个标志,该标志将触发透明关闭并在下次使用连接时重新连接。但是,这将是一个非常复杂且容易出错的功能。