【发布时间】:2019-09-16 07:30:54
【问题描述】:
场景:
- NET Core 2.2 中的 Web Api 应用程序,它部署在多个容器上。
- 在启动中,我从 HashiCorp Vault 中读取数据库密码并将其放入我的连接字符串中。
- 我将 Entity Framework Core 上下文添加到服务集合中。
- 我在多个控制器中使用上下文。
如果我在 Vault 中更改数据库密码,所有对数据库的请求都将由于身份验证错误而失败。
我可以关闭所有容器,当它们重新启动时,它们将拥有新密码,但这不是我想要做的。 有一些解决此问题的 hacky 方法,但它们涉及不使用服务集合,我想使用它。
问题:
EF Core 是否支持密码轮换,或者有没有办法在仍然使用服务集合的同时实现这一点?
【问题讨论】:
-
你基本上是在问如何在运行时控制数据库上下文连接字符串?
-
上下文驻留在服务集合中是其中很大一部分,并且还有一个问题是密码更改时请求失败。因此,它不仅仅是在运行时更改连接字符串。但是,如果您对此有任何建议,可能会有所帮助。
-
所以你可以添加一个 dbcontext 作为临时服务并传递一个委托来创建 db 上下文的实例。这样,您将删除连接字符串的静态特性,并能够在运行时控制数据库上下文对象的创建。
-
有趣,如果您有一个或两个班轮示例,请添加一个答案,我会尝试并接受它是否有效。谢谢。
-
您已经标记了一个答案,但是here 的解决方案可能对您来说也很有趣。我认为当密码更改时,IOptions 会自动替换它。
标签: c# entity-framework entity-framework-core asp.net-core-webapi