Applikationskennwörter ohne Downtime ändern

Wir kennen alle dieses Problem. Sicherheitsvorgaben haben sich verschärft und die Vorgaben des Security Teams verlangen auch ein Rotieren der Kennwörter für Rollen-Accounts und Applikationsuser.

Es wird ein Wartungsfenster geplant, in dem alle Applikationen gestoppt werden um in deren Konfigurationen und in der Datenbank das Kennwort anzupassen. Abgesehen davon, dass man dafür eine komplette Downtime der Applikation benötigt, gibt es immer wieder übersehene Connect-Informationen.

Hat man nicht die Kontrolle über alle Clients, ist es defacto unausweichlich, dass in dem Moment, in dem das Kennwort in der Datenbank geändert wird, die Applikationen, die Verbindungen neu aufmachen in einen ORA-01017 und am Ende ist der Account wegen zu vieler fehlgeschlagener Anmeldeversuche gesperrt.

Oracle hat in 21c eine Lösung dafür implementiert, das still und heimlich bereits für 19.12 zurück portiert wurde. Außerdem ist dieses Feature auch in der SE2 verfügbar. Dennoch wird kaum davon Gebrauch gemacht.

Umsetzung

Das ganze wird über Profile gelöst, konkret über das Profile Limit PASSWORD_ROLLOVER_TIME.

Dieses erlaubt es das alte und neue Kennwort für ein definiertes Zeitfenster parallel zu benutzen. Man ändert das Kennwort in der Datenbank und kann dann innerhalb dieses Zeitraums die Anpassungen auf den Applikationsservern und Clients einzeln vornehmen. Sofern die Applikationsserver und Clients einigermaßen redundant sind, gibt es auch keine Downtime!

Sobald der Zeitrum abläuft, oder man das Fenster manuell beendet, verliert das alte Kennwort seine Gültigkeit.

Ein Beispiel

Ein Profil mit dem Rollover Fenster anlegen. Der Wert ist in Tagen, d.h. 1/24 bedeutet eine Stunde – das ist auch der Minimalwert. Der Maximalwertist 60 Tage. Außerdem muss das Fenster kleiner sein, als die Werte für PASSWORD_LIFE_TIME und PASSWORD_GRACE_TIME.

CREATE PROFILE app_profile 
LIMIT PASSWORD_LIFE_TIME     90
      PASSWORD_GRACE_TIME    10
      PASSWORD_ROLLOVER_TIME 2;

CREATE USER app_user 
       IDENTIFIED BY "Old#Pass2026"
       PROFILE app_profile;

grant create session to app_user;

Kontrolle im Data Dicitonary:

SELECT username,
       account_status 
  FROM dba_users
 WHERE username = 'APP_USER';

USERNAME    ACCOUNT_STATUS
----------- --------------
APP_USER    OPEN

Jetzt ändern wir das Kennwort

ALTER USER app_user IDENTIFIED BY "New#Pass2026";

und überprüfen die Einstellung wieder

USERNAME    ACCOUNT_STATUS
----------- --------------------
APP_USER    OPEN & IN ROLLOVER

Ab nun können beide Kennwörter für die Anmeldung verwendet werden!

Das Zeitfenster beenden

Dieses Zeitfenster endet selbständig nach Ablauf von PASSWORD_ROLLOVER_TIME. Man kann aber dieses Fenster auch manuell beenden, wenn man weiß, dass der letzte Applikationsserver und Client umgestellt wurden.

ALTER USER app_user EXPIRE PASSWORD ROLLOVER PERIOD;

Der Status ändert sich wieder zu OPEN, und das alte Kennwort funktioniert bei neuen Anmeldeversuchen nicht mehr. Damit erspart man sich das Ändern des Wertes im Profile.

Worauf ist zu achten?

  • Nicht für SYS, und andere User die über das Password-File authentifizieren.
  • Password authentication only — für extern und global authentifizierte User gilt das nicht.
  • PASSWORD_ROLLOVER_TIME auf 0 im Profile deaktiviert dieses Feature. Das ist auch die Standardeinstellung!
  • Das Fenster beginnt mit dem ALTER USER zu laufen, nicht ab der ersten Anmeldung mit dem neuen Kennwort.
  • Dauert das Rollout länger als geplant, läuft man trotzdem in den ORA-01017. Das Fenster also mit genug Spielraum wählen!
  • Im Monitoring überprüfen, ob Anpassungen notwendig sind! Oft wird für den ACCOUNT_STATUS nur auf den Wert OPEN geprüft. Unbedingt den Wert OPEN & IN ROLLOVER ebenfalls in die List der gültigen Werte aufnehmen!
  • Will man das Rollover Fenster ändern, indem man das Profile anpasst, muss man sicherstellen, dass zwischen den beiden Profile Änderungen mindestens eine Anmeldung statt findet! Sonst funktioniert das alte Kennwort weiter für das eingestellte Fenster!