Das zugrunde liegende Problem waren nicht freigegebene Datenbankverbindungen. Wenn eine Verbindung geöffnet wird, wird sie aus dem Verbindungspool ausgecheckt. Wenn die Verbindung nie geschlossen wird, geht der Pool davon aus, dass sie noch verwendet wird. Dies bewirkt, dass sich die Poolverwaltungslogik regelmäßig erneut bei der Datenbank authentifiziert, wobei die ursprüngliche Verbindungszeichenfolge verwendet wird. Wenn sich das Passwort ändert, führt dies schnell zu fehlgeschlagenen Anmeldeversuchen und Kontosperrungen.
// Problem logic; connection is never closed/returned to the connection pool.
public static void ConnPoolTest1()
{
OracleConnection conn = new OracleConnection(connectionStringWithPooling);
conn.Open();
//...Do some work
// Sit on this line for 5-10 minutes and examine Oracle's dba_audit_trail.
Console.ReadKey(); // Since connection was never released back to the connection pool, the
// data provider's pool management will regularly re-authenticate with DB.
// If user's password changes before this process dies (releasing the
// connection pools), you start accumulating failed password attempts.
}
Die richtige Lösung für dieses Problem besteht darin, sicherzustellen, dass Verbindungen immer wieder an den Pool zurückgegeben werden, wenn Sie mit ihnen fertig sind!
// Best practice: ALWAYS CLOSE YOUR CONNECTIONS WHEN YOU ARE DONE!
public static void ConnPoolTest2()
{
OracleConnection conn = new OracleConnection(connectionStringWithPooling);
conn.Open();
//...Do some work
conn.Close();
// Sit on this line for 5-10 minutes and examine Oracle's dba_audit_trail.
Console.ReadKey(); // No problem here! No recurring authentication attempts because the
// connection has been returned to the pool.
}
HINWEIS:Andere Antworten schlugen vor, das Pooling zu deaktivieren und alte Verbindungspools zu löschen, wenn sich das Passwort geändert hat. Diese Vorschläge haben für uns als temporärer Patch funktioniert, während wir nach unveröffentlichten Ressourcen gesucht haben, und sie haben uns sehr dabei geholfen, das Problem einzugrenzen.