Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle 12c ИДЕНТИФИЦИРАН ОТ СТОЙНОСТ

Тъй като си спомням в кариерата си да работя с Oracle, успях да променя паролата на потребителя в хеша на паролата. Трикът, който използвах понякога, беше да съхраня хеша на потребителския идентификатор/парола, да променя паролата на нещо, което знам, да се свържа с базата данни като този потребител и след това да си върша работата. Когато приключим с работата си, задайте паролата обратно на това, което беше подобно на следното:

ПРОМЕНЯНЕ НА ПОТРЕБИТЕЛЯ bob ИДЕНТИФИЦИРАН ОТ СТОЙНОСТИ ‘asdf1234%^&*qwerty’;

Никога не ми беше необходимо да знам паролата на потребителя, за да я върна обратно към това, което беше, стига да знаех, че е хеш стойността. Вчера намерих информация, при която хората получават следната грешка, когато се опитват да зададат парола по този начин в 12c:

ORA-02153:невалиден низ за парола VALUES

Ако потърсите тази грешка в My Oracle Support, най-вероятно ще попаднете на Note 2096579.1. В тази бележка се посочва, че този метод вече не е възможен. Пише „Това е нова функционалност в 12c, за да принуди потребителите да бъдат създадени по правилния начин“. Но установих, че това не е съвсем вярно.

Oracle 12c въведе нова функционалност, за да направи хеш стойностите на потребителски идентификатор/парола по-сигурни. Ето връзка към ръководството за сигурност 12c, където се говори за 12c Verifier за пароли. Забележете, че в този раздел се споменава солна стойност, добавена към паролата, когато е хеширана. За да разберем защо това е важно, нека разгледаме пример. Ще създам потребител и ще разгледам хеша на потребителския идентификатор/парола, съхранен в колоната SPARE4 на SYS.USER$.

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

В предишни версии колоната SPARE4 нямаше да съдържа почти толкова много знаци. Това определено е по-сложно от версиите преди 12c. Моето предположение, макар и непотвърдено, е, че S:част от изхода по-горе е стойността на солта. Не съм сигурен какво представляват H:и T:.

Можем да използваме пакета DBMS_METADATA за обратно инженерство на потребител. Когато направим това, можем да видим, че все още можем да използваме клаузата IDENTIFIED BY VALUES.

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"

И всъщност това работи. Ще променя паролата на BOB на нещо различно, след това ще я променя на тази хеш стойност и ще се свържа със старата парола.

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.

Така че не сме загубили никаква функционалност, както предполагаше MOS Note. Тук просто трябва да се справим с много по-дълга хеш стойност.

Това става наистина важно, когато се опитвате да използвате exp/imp или Data Pump, за да преместите потребителите от версия преди 12c към 12c. Ако направите ПЪЛЕН експорт на база данни на Oracle 11g, дъмпът ще съдържа старите хеш стойности на паролата. Когато импортирате в 12c, тогава ще получите грешката ORA-02153. За да заобиколите този проблем, създайте предварително потребителите в базата данни 12c с известни пароли.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle - ORA-01489:резултатът от конкатенацията на низове е твърде дълъг

  2. Изберете count(*) от множество таблици

  3. Инсталиране на Oracle Fusion Middleware / WebLogic Server 11g

  4. EXP() Функция в Oracle

  5. Добавете параметър за дата към заявката на Oracle