Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle 12c IDENTIFIZIERT DURCH WERTE

Seit ich mich erinnern kann, dass ich in meiner Karriere mit Oracle gearbeitet habe, konnte ich das Passwort eines Benutzers in den Passwort-Hash ändern. Der Trick, den ich manchmal angewendet habe, bestand darin, den Benutzer-ID/Passwort-Hash zu speichern, das Passwort in etwas zu ändern, das ich kenne, mich als dieser Benutzer mit der Datenbank zu verbinden und dann meine Arbeit zu erledigen. Wenn Sie mit meiner Arbeit fertig sind, setzen Sie das Passwort wieder auf etwas Ähnliches wie das Folgende:

ALTER USER bob IDENTIFIED BY VALUES ‘asdf1234%^&*qwerty’;

Ich musste nie das Passwort des Benutzers kennen, um es auf das zurückzusetzen, was es war, solange ich den Hash-Wert kannte. Gestern habe ich einige Informationen gefunden, bei denen Leute den folgenden Fehler erhalten haben, wenn sie versucht haben, ein Passwort auf diese Weise in 12c festzulegen:

ORA-02153:Ungültige VALUES-Kennwortzeichenfolge

Wenn Sie diesen Fehler in My Oracle Support nachschlagen, landen Sie höchstwahrscheinlich auf Hinweis 2096579.1. Darin heißt es, dass diese Methode nicht mehr möglich ist. Es heißt:„Dies ist eine neue Funktionalität in 12c, um zu erzwingen, dass Benutzer auf die richtige Weise erstellt werden“. Aber ich habe festgestellt, dass das nicht ganz stimmt.

Oracle 12c hat neue Funktionen eingeführt, um die Benutzer-ID/Passwort-Hash-Werte sicherer zu machen. Hier ist ein Link zum 12c Security Guide, wo es um den 12c Verifier für Passwörter geht. Beachten Sie, dass in diesem Abschnitt ein Salt-Wert erwähnt wird, der dem Passwort hinzugefügt wird, wenn es gehasht wird. Um zu sehen, warum dies wichtig ist, schauen wir uns ein Beispiel an. Ich erstelle einen Benutzer und schaue mir den Benutzer-ID/Passwort-Hash an, der in der SPARE4-Spalte von SYS.USER$ gespeichert ist.

SQL> create user bob identified by abc123;
User created.
SQL> grant create session to bob;
Grant succeeded.
SQL> select spare4 from sys.user$ where name='BOB';
SPARE4
--------------------------------------------------------------------------------
S:44F34BA1369D58A6CB262D166587D5238D9148FC9BDD390A98C29A3B6A34;H:FD30F9DA6ECB907
6C10C04D20AFF9492;T:450FF7F2A4BB8104E33E7C09FF1698AEA2DE3EBD60BFA681942057D83EE2
DD773BB4F7B1046355D1CB63EBF256BC7B466BB1B3185A0988D1CBAE3276D1B181756DB27BB40505
8C44152DB2DD41074396

In früheren Versionen enthielt die SPARE4-Spalte nicht annähernd so viele Zeichen. Dies ist definitiv komplexer als Versionen vor 12c. Meine Vermutung, obwohl unbestätigt, ist, dass der S:-Teil der obigen Ausgabe der Salt-Wert ist. Ich bin mir nicht sicher, was H:und T:bedeuten.

Wir können das DBMS_METADATA-Paket verwenden, um einen Benutzer zurückzuentwickeln. Wenn wir das tun, können wir sehen, dass wir immer noch die IDENTIFIED BY VALUES-Klausel verwenden können.

SQL> select dbms_metadata.get_ddl('USER','BOB') from dual;
DBMS_METADATA.GET_DDL('USER','BOB')
--------------------------------------------------------------------------------
CREATE USER "BOB" IDENTIFIED BY VALUES 'S:44F34BA1369D58A6CB262D166587D5238D9
148FC9BDD390A98C29A3B6A34;H:FD30F9DA6ECB9076C10C04D20AFF9492;T:450FF7F2A4BB8104E
33E7C09FF1698AEA2DE3EBD60BFA681942057D83EE2DD773BB4F7B1046355D1CB63EBF256BC7B466
BB1B3185A0988D1CBAE3276D1B181756DB27BB405058C44152DB2DD41074396;5844087A3D506FD3
'
 DEFAULT TABLESPACE "USERS"
 TEMPORARY TABLESPACE "TEMP"

Und tatsächlich funktioniert das. Ich ändere das Passwort von BOB in etwas anderes, ändere es dann in diesen Hashwert und verbinde mich mit dem alten Passwort.

SQL> alter user bob identified by newpass;
User altered.
SQL> alter user bob identified by values 'S:44F34BA1369D58A6CB262D166587D5238D9148FC9BDD390A98C29A3B6A34;H:FD30F9DA6ECB9076C10C04D20AFF9492;T:450FF7F2A4BB8104E33E7C09FF1698AEA2DE3EBD60BFA681942057D83EE2DD773BB4F7B1046355D1CB63EBF256BC7B466BB1B3185A0988D1CBAE3276D1B181756DB27BB405058C44152DB2DD41074396;5844087A3D506FD3';
User altered.
SQL> connect bob/abc123
Connected.

Wir haben also keine Funktionalität verloren, wie es der MOS-Hinweis impliziert. Wir haben es hier nur mit einem viel längeren Hashwert zu tun.

Wo dies wirklich wichtig wird, ist der Versuch, Benutzer mit exp/imp oder Data Pump von einer Version vor 12c auf 12c zu verschieben. Wenn Sie einen VOLLSTÄNDIGEN Export einer Oracle 11g-Datenbank durchführen, enthält der Dump die alten Passwort-Hash-Werte. Beim Importieren in 12c erhalten Sie dann den ORA-02153-Fehler. Um dieses Problem zu umgehen, erstellen Sie die Benutzer in der 12c-Datenbank vorab mit bekannten Passwörtern.