sql >> Databasteknik >  >> RDS >> Oracle

Hur kan jag förhindra återkommande automatiska anslutningar till Oracle Database?

Det underliggande problemet slutade med osläppta databasanslutningar. När en anslutning öppnas, checkas den ut ur anslutningspoolen. Om anslutningen aldrig stängs tror poolen att den fortfarande används. Detta gör att poolhanteringslogiken regelbundet autentiseras på nytt med databasen med den ursprungliga anslutningssträngen. När lösenordet ändras leder detta snabbt till misslyckade inloggningsförsök och kontolåsning.

// 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.
}

Den rätta lösningen för det här problemet är att säkerställa att anslutningarna alltid återförs till poolen när du är klar med dem!

// 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.
}

OBS:Andra svar föreslog att du skulle stänga av pooling och rensa gamla anslutningspooler när lösenordet ändrades. Dessa förslag fungerade för oss som en tillfällig korrigeringsfil medan vi sökte efter de outgivna resurserna, och de hjälpte oss mycket att isolera problemet.



  1. eclipselink jpa genererar räkningsfrågor med COUNT(id) istället COUNT(*)

  2. Ändra SQL-databas misstänkt läge till normalt läge med fråga

  3. PostgreSQL 9.5 - uppdatering fungerar inte när NULL slås samman med JSON

  4. Alternativ till att använda LIMIT nyckelord i en underfråga i MYSQL