Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como posso evitar conexões automáticas recorrentes com o banco de dados Oracle?


O problema subjacente acabou sendo conexões de banco de dados não lançadas. Quando uma conexão é aberta, ela é retirada do pool de conexões. Se a conexão nunca for fechada, o pool pensará que ainda está sendo usado. Isso faz com que a lógica de gerenciamento do pool seja reautenticada periodicamente com o banco de dados usando a cadeia de conexão original. Quando a senha muda, isso leva rapidamente a tentativas de login com falha e bloqueio de conta.
// 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.
}

A correção adequada para esse problema é garantir que as conexões sejam sempre retornadas ao pool quando você terminar com elas!
// 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.
}

NOTA:Outras respostas sugeriram desativar o pool e limpar os pools de conexão antigos quando a senha for alterada. Essas sugestões funcionaram para nós como um patch temporário enquanto procurávamos os recursos não lançados e nos ajudaram muito a isolar o problema.