“ALTER USER SYS ACCOUNT LOCK” – Der Oracle-12.2-DBA sperrt sich selber aus?
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:
-
- 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
-
- 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.
- 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:
- Rechte der Benutzer SYSDG, SYSRAC etc. in Oracle 12.2: https://docs.oracle.com/en/database/oracle/oracle-database/12.2/dbseg/configuring-privilege-and-role-authorization.html#GUID-576B2B6F-A368-438A-842B-BFFAEFAA535D
- MOS-Note ” ORA-28000: The Account Is Locked When Log In As SYS User Remotely While SYS User Was Locked (Doc ID 1601360.1)”
Werbung (Amazon-Partner-Link)