“ALTER USER SYS ACCOUNT LOCK” – Der Oracle-12.2-DBA sperrt sich selber aus?

29. Januar 2018 Aus Von Markus Flechtner

Keine Panik, auch der Oracle-12.2-DBA kann sich nicht selbst den Ast absägen, auf dem er sitzt. Aber durch das Sperren des SYS-Acccounts kann er die Datenbank etwas sicherer machen, indem er Remote-Zugriffe als SYS deaktiviert.

Wie funktioniert das?

Grundlage für diese neue 12.2-Funktionalität ist die Password-Datei.

Bereits mit Oracle 12.1 kamen die neuen Rechte SYSBACKUP, SYSDG und SYSKM hinzu, die ein neues Format der Passwort-Datei erforderlich machten. Über den Parameter format des Befehls “orapwd” wird das Format festgelegt:

orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID format=legacy|12

“Legacy” ist das klassische Format, “12” bringt die neuen Einträge für die neuen Rechte mit.

Über den Parameter “input_file” können alte Password-Dateien nach einem Upgrade in das neue Format konvertiert werden.

orapwd file=<zieldatei> format=12 input_file=<quelldatei>

Oracle 12.2 geht noch einige Schritte weiter:

    1. Es gibt jetzt das neue Recht “SYSRAC” für die Verwaltung von Cluster-Datenbanken. Damit ist auch ein neues Format für die Passwort-Datei erforderlich um das neue Recht abspeichern zu können

 

    1. Es gibt für das Format der Password-Datei jetzt nur noch die Varianten “12” (aus 12.1) und “12.2” (neu). Das “legacy”-Format ist nicht mehr erlaubt.

 

  1. Wenn die Password-Datei im 12.2-Format gespeichert ist, dann kann der Benutzer SYS gesperrt werden.

Und genau um diesen letzten Punkt geht es in diesem Blog-Post.

Dabei muss sich der User SYS selbst sperren:

SQL> show user

USER is "SYS"

SQL> alter user sys account lock;

User altered.

SQL>  select username,lock_date from dba_users where username='SYS’:

USERNAME     LOCK_DATE

-------------------- ------------------

SYS     25-JAN-18

SQL> select username,lock_date from v$pwfile_users;

USERNAME     LOCK_DATE

-------------------- ------------------
SYS     25-JAN-18
SYSDG
SYSBACKUP
SYSKM

 

Und das Ergebnis ist: Remote Connects als SYS via Oracle-Net funktionieren nicht mehr:

SQL> connect sys/manager@demo_s2 as sysdba

ERROR:

ORA-28000: the account is locked

Und das ist auch der Sicherheitsgewinn durch diese neue Funktionalität, denn glücklicherweise kann man sich über die lokale OS-Authentifizierung (DBA-Gruppe) immer noch anmelden:

SQL> connect / as sysdba

Connected.

.. gerettet 🙂

Wenn man die Passwort-Datei noch im “alten” 12.1-Format gespeichert hat, dann kann man den Benutzer SYS nicht sperren. Stattdessen kommt die Fehlermeldung

ORA-40365: The SYS user cannot be locked while the password file is in its current format.

Natürlich kann man aber Remote-Zugriffe als SYS auch verhindern, in dem man überhaupt keine Passwort-Datei anlegt oder indem man den Parameter REMOTE_LOGIN_PASSWORDFILE=NONE setzt. Aber dann sind z.B. Remote-Zugriffe als “SYSBACKUP” nicht mehr erlaubt und der rman-Job der vom zentralen Backup-Server aus gestartet wird, funktioniert nicht mehr.

Update 07.02.2018:

In Oracle 11.2.0.4. gibt es ein ähnliches “Feature”, das allerdings eher ein Bug ist. Siehe dazu MOS-Note 1601360.1.

Links:

 

Werbung (Amazon-Partner-Link)