場景:
如果我在Vault中更改數據庫密碼,則由於身份驗證錯誤,對數據庫的所有請求都將失敗。
我可以關閉所有容器,並在它們重新啟動時使用新密碼,但這不是我想要的。有幾種解決此問題的方法,但它們涉及不使用Service Collection,而我想使用它。
題:
EF Core是否支持密碼輪換,或者在仍然使用Service Collection的同時有辦法實現密碼輪換?
您應該能夠將DbContext
添加到DI中並傳遞一個委託,該委託創建的實例實質上是控制連接字符串的靜態性質的,並在運行時計算出正確的實例。
services.AddScoped<YourDbContext>(svc =>
{
var connString = ... logic to get the conn string with the right password from HashiCorp vault;
var dbContextOptions = new DbContextOptionsBuilder<YourDbContext>();
dbContextOptions.UseSqlServer(connString); //Or w/e ef provider for db you use
return new YourDbContext(dbContextOptions.Options);
});
最簡單的解決方案是從庫中獲取用戶名和密碼。然後將其視為按鍵旋轉,將配置切換為其他用戶名/密碼,並在更改密碼之前等待應用停止使用舊憑據。
另一種方法是在失敗後重試之前重新獲取憑據。