Szenario:
Wenn ich das Datenbankkennwort in Vault ändere, schlagen alle Anforderungen an die Datenbank aufgrund von Authentifizierungsfehlern fehl.
Ich kann alle Container herunterfahren und wenn sie neu starten, haben sie das neue Passwort, aber das ist nicht das, was ich tun möchte. Es gibt einige hackige Möglichkeiten, um dieses Problem zu umgehen, aber sie beinhalten die Nichtverwendung der Service Collection, und ich möchte sie verwenden.
Frage:
Unterstützt EF Core die Kennwortrotation oder gibt es eine Möglichkeit, dies zu erreichen, während die Service Collection weiterhin verwendet wird?
Sie sollten in der Lage sein, den DbContext
in DI hinzuzufügen und einen Delegaten zu übergeben, der die Instanz erstellt, die im Wesentlichen die Kontrolle über die statische Natur der Verbindungszeichenfolge übernimmt, und zur Laufzeit die richtige erarbeitet.
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);
});
Die einfachste Lösung besteht darin, den Benutzernamen und das Kennwort aus dem Tresor zu holen. Behandeln Sie es dann wie eine Tastenrotation, wechseln Sie die Konfiguration zu einem anderen Benutzernamen / Passwort und warten Sie, bis die App die alten Anmeldeinformationen nicht mehr verwendet, bevor Sie das Passwort ändern.
Ein anderer Ansatz besteht darin, die Anmeldeinformationen erneut abzurufen, bevor sie nach einem Fehler erneut versucht werden.