Le problème sous-jacent a fini par être des connexions de base de données non publiées. Lorsqu'une connexion est ouverte, elle est extraite du pool de connexions. Si la connexion n'est jamais fermée, le pool pense qu'elle est toujours utilisée. Ainsi, la logique de gestion du pool se ré-authentifie périodiquement auprès de la base de données à l'aide de la chaîne de connexion d'origine. Lorsque le mot de passe change, cela entraîne rapidement des tentatives de connexion infructueuses et le verrouillage du compte.
// 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.
}
La solution appropriée à ce problème consiste à s'assurer que les connexions sont toujours renvoyées au pool lorsque vous en avez terminé !
// 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.
}
REMARQUE :D'autres réponses suggéraient de désactiver le regroupement et d'effacer les anciens pools de connexion lorsque le mot de passe a changé. Ces suggestions ont fonctionné pour nous comme un correctif temporaire pendant que nous recherchions les ressources non publiées, et elles nous ont grandement aidés à isoler le problème.