sql >> Database >  >> RDS >> Oracle

Hoe kan ik terugkerende automatische verbindingen met Oracle Database voorkomen?

Het onderliggende probleem was uiteindelijk niet-uitgebrachte databaseverbindingen. Wanneer een verbinding wordt geopend, wordt deze uitgecheckt uit de verbindingspool. Als de verbinding nooit wordt gesloten, denkt de pool dat deze nog steeds wordt gebruikt. Dit zorgt ervoor dat de poolbeheerlogica periodiek opnieuw wordt geverifieerd met de database met behulp van de oorspronkelijke verbindingsreeks. Wanneer het wachtwoord verandert, leidt dit snel tot mislukte inlogpogingen en accountvergrendeling.

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

De juiste oplossing voor dit probleem is om ervoor te zorgen dat verbindingen altijd worden teruggestuurd naar de pool als je er klaar mee bent!

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

OPMERKING:Andere antwoorden stelden voor pooling uit te schakelen en oude verbindingspools te wissen wanneer het wachtwoord werd gewijzigd. Deze suggesties werkten voor ons als een tijdelijke patch terwijl we naar de niet-uitgebrachte bronnen zochten, en ze hebben ons enorm geholpen om het probleem te isoleren.



  1. Databasebewaking - Problemen met Prometheus oplossen met SCUMM-dashboards

  2. Databaseproblemen bij het toestaan ​​van permanente aanmeldingen van meerdere browsers

  3. MySQL produceert kolommen met lus in een select-statement

  4. Databaseschema's gebruiken in SQL Server