Oracle XE: Abgelaufene Benutzer zurücksetzen

Wenn man eine Oracle Datenbank einige Zeit lang nicht benutzt, stößt man vermutlich auf das Problem, welches ich gerade hatte: alle internen Benutzerkonten waren abgelaufen und die Passwörter wusste ich auch nicht mehr.

Standardmäßig sind die Zugangsdaten eines internen Benutzer nach 180 Tagen ungültig.

Für meine Oracle 11gR2 Database Express Edition (XE) sind die folgenden Benutzer von primären Interesse:

  • XDB - Oracle XML DB-Benutzer, wird für APEX (Application Express) benötigt
  • SYS bzw. SYSTEM - System-Benutzer

Der Status der einzelnen Benutzer können über sqlplus eingesehen werden. Da die Benutzerdaten des Systembenutzers in meinem Fall nicht mehr gültig waren, die Datenbank aber noch lief, musste eine Verbindung über den oracle-Benutzer hergestellt werden. Nach dem Wechsel des Benutzerkontexts mittels su musste noch das zugehörige Oracle-Profil eingelesen werden, bevor sqlplus funktioniert. Hierbei werden automatisch die benötigten Oracle-Variablen (ORACLE_SID, ORACLE_HOME) gesetzt.

 1# su - oracle
 2$ source /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh
 3$ echo $ORACLE_SID
 4XE
 5$ sqlplus / as sysdba
 6SQL> select username, account_status from dba_users where username IN ('XDB','SYSTEM','SYS');
 7
 8USERNAME                ACCOUNT_STATUS
 9--------------------------------------
10SYSTEM                EXPIRED & LOCKED
11SYS                   EXPIRED & LOCKED
12XDB                   EXPIRED & LOCKED

Wie bereits vermutet waren die erwähnten Benutzer gesperrt. Abhilfe schaffen die folgenden Befehle:

1SQL> alter user system account unlock;
2SQL> alter user sys account unlock;
3SQL> alter user xdb account unlock

Anschließend lassen sich auch neue Passwörter vergeben:

1SQL> alter user system identified by PASSWORD;
2SQL> alter user sys identified by PASSWORD;
3SQL> alter user xdb identified by PASSWORD;

PASSWORD sollte natürlich durch ein eigenes Passwort ersetzt werden. 😉

Eine weitere Möglichkeit ist es, die automatische Sperrung nach 180 Tagen zu deaktivieren:

1SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

Vielen Dank an Thorsten für den letzten Tip! 🙂

Übersetzungen: