# [ORACLE 9 & ODBC] ALTER AUTHORIZATION



## uni (20. Mai 2005)

Hallo,

über sogenannte Profile kann man im ORACLE hinterlegen, wann z.B. ein Passwort ablaufen soll (z.B. PASSWORD_LIFE_TIME 90). Nach dieser Zeitspanne bekommt der User den Status "EXPIRED" und er kann sich nur noch mit 

        CONNECT  :user IDENTIFIED BY ldpswd 
        ALTER AUTHORIZATION :newpswd  

anmelden. Ein Anmelden und anschließendes Passwort über 
ALTER USER IDENTIFIED BY ... ändern geht nicht mehr.

Jetzt kommt's:
Ich suche eine Möglichkeit, das auch über ODBC zu machen. In ODBC melde ich mich ja z.B. so an:

iSQLRC = SQLDriverConnect(hdbc, hwnd, chConnectString, ...

wobei der "chConnectString" z.B. so aussieht:
DSN=MyDB;SERVER=MyDB;UID=uNi;PWD=passwort;

Wo und Wie kann ich hier den "ALTER AUTHORIZATION" Parameter angeben?
Hat jemand eine Idee?


----------



## Exceptionfault (20. Mai 2005)

Vor diesem Problem sind wir auch schonmal gestanden. Unter Windows mit dem Oracle eigenen ODBC/OleDB Treiber kommt nach dem Login automatisch ein eigener Passwort ändern Dialog hoch, wenn das alte Passwort abgelaufen ist.
Bis Oracle 9i schien dieser Dialog aber nicht wirklich zu funktionieren. Außerdem war das Problem, dass die Anwendung nichts davon mitbekam. 
Ab Oracle 10 hat zumindest das Passwort ändern funktioniert und über einen ziemlich ätzenden Worksaround haben wir es geschafft auch der Applikation die neuen Login Daten zur Verfügung zu stellen.

Eine andere Alternative wäre z.B. einen Shadow User zum ändern des Passwortes zu nutzen, d.h. wenn der eigene Account abgelaufen ist, zum ändern auffordern und per Shadow User (mit ALTER USER PRIVILEGE) das Passwort setzen und den Account wieder unlocken.

Würd mich aber auch interessieren ob es da elegantere Möglichkeiten gibt.


----------



## uni (20. Mai 2005)

Hallo Exceptionfault,

schön, das ich mit diesem Problem nicht allein bin   

Ein Ansatz ist der PASSWORD_GRACE_TIME Parameter im Profile. Über diesen kann man zumindest eine "Gnadenfrist" einstellen. Es kommt zwar eine Warnung

ORA-28002: Kennwort läuft innerhalb von n Tagen ab   

, aber man kann sich zumindest noch anmelden und dann "normal" das Passwort ändern.

Eine andere Idee ist, eine DLL zu programmieren, die das Statement

CONNECT :user IDENTIFIED BY ldpswd 
ALTER AUTHORIZATION :newpswd 

problemlos absetzen kann...
Dieses müsste man halt dann bei Returncode

ORA-28001: the password has expired 

aufrufen.


----------



## Exceptionfault (20. Mai 2005)

uni hat gesagt.:
			
		

> Dieses müsste man halt dann bei Returncode ORA-28001: the password has expired aufrufen.



Wir verwenden den Oracle ODBC Treiber, also nicht den Standard von Microsoft. Bei dem von Oracle kommt eben dieser Return code gar nicht bis zur Applikation durch. Vorher erscheint vom ODBC Treiber der Passwort ändern Dialog der ab 10g sogar funktioniert ;-)



			
				uni hat gesagt.:
			
		

> Ein Ansatz ist der PASSWORD_GRACE_TIME Parameter im Profile. Über diesen kann man zumindest eine "Gnadenfrist" einstellen.



Geht halt leider nur, wenn man sich in der Zeit auch anmeldet. Wenn ein User über die Grace Time in Urlaub ist ist das Gemecker hinterher wieder groß *g* Die User eben....


----------



## uni (23. Mai 2005)

Hallo Exceptionfault,

Dank' dir für deine Hilfe.


----------

