| 

.NET C# Java Javascript Exception

5
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?

Danke im Voraus für eure Hilfe
Klaus
News:
17.10.2011
luedi 1,9k 1 9
2 Antworten
2
Hallo,

also die Warnung kannst du in der OracleException nach dem öffnen der Connection abfragen:

try
{
connection.Open()
}
catch (OracleException oexp)
{
if (oexp.Number == 28001)
{
//Password expired
}
}

danach kannst du die Connection weiterhin benutzen um das Passwort zu ändern.
connection.OpenWithNewPassword(newPassword);

Hoffe das hilft.
18.10.2011
PinBack 687 1 8
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.
luedi 18.10.2011
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.
PinBack 18.10.2011
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.
luedi 19.10.2011
1
SELECT expiry_date FROM user_users;

Gruss
Cornel Brücher
19.10.2011
6502 21 1
Danke, das war's. Das Select kann ich im Kontext des angemeldeten Benutzers ausführen
luedi 20.10.2011

Stelle deine .net-Frage jetzt!