Ich stelle gerade eine allgemeine Anmeldekomponente, welche in VB 6.0 und C implementiert ist, auf C# und ADO.NET um. Die Komponente dient dazu, sich an Oracle-Datenbanken anzumelden. Die Sicherheitsrichlinien meines Kunden sehen vor, dass die Datenbank-Passwörter regelmäßig geändert werden müssen. Die Anmelde-Komponente gibt eine Meldung aus, wenn das Passwort in Kürze abläuft (ab 14 Tage vor Ablauf des Passworts, analog zum Windows-Login). Da der Connection-Aufbau in C über embedded SQL erfolgt, kann hier der entsprechende Code von Oracle (ORA-28002) abgefragt und die Meldung interpretiert werden.
In meiner Lösung verwende ich den Oracle Data Access Client in der Version 11.2.02.1. Es wird zwar eine Exception geworfen, wenn das Passwort abgelaufen ist, aber ich habe keinen Weg gefunden, wie ich Warnungen abfangen kann. Ich habe schon versucht mich auf das InfoMessage-Event zu registrieren, aber dieses scheint nur zu feuern, nachdem die Connection erfolgreich geöffnet werden konnte und nicht während des Verbindungsaufbaus.
Hat vielleicht irgendjemand schon vor dem selben Problem gestanden und eine Lösung gefunden?
Diese Exception wird allerdings erst geworfen, wenn das Passwort bereits abgelaufen ist. Ich suche nach einer Möglichkeit, zu ermitteln wann das Passwort abläuft. Oracle gibt dazu eine Warnung ORA-28002 aus, der Provider wirft aber keine Exception.
Ok. Wenn die Warnung nicht über den InfoMessage-Event kommt, gibt es wohl nur die Möglichkeit expiry_date von sys.dba_users abzufragen. Die Berechtigung vorausgesetzt.
Danke für den Tip. Leider haben die User hierfür keine Berechtigung. Es gibt in der DB aber Stored Procedures, die im Kontext von SYS laufen und von allen Benutzern aufgerufen werden können. Über diesen Weg werde ich die Abfrage wohl hinkriegen.