Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Oracle 12c ĐƯỢC XÁC ĐỊNH BẰNG GIÁ TRỊ

Vì tôi có thể nhớ lại trong sự nghiệp làm việc với Oracle, tôi đã có thể sửa đổi mật khẩu của người dùng thành băm mật khẩu. Thủ thuật mà đôi khi tôi đã áp dụng là lưu trữ userrid / mật khẩu băm, thay đổi mật khẩu thành thứ gì đó tôi biết, kết nối với cơ sở dữ liệu với tư cách là người dùng đó và sau đó thực hiện công việc của tôi. Khi hoàn thành công việc của tôi, hãy đặt lại mật khẩu thành bất kỳ thứ gì tương tự như sau:

ALTER NGƯỜI DÙNG bob ĐƯỢC XÁC ĐỊNH BẰNG GIÁ TRỊ ‘asdf1234% ^ &* qwerty’;

Tôi không bao giờ cần biết mật khẩu của người dùng để đặt mật khẩu trở lại như cũ miễn là tôi biết giá trị băm là. Hôm qua, tôi đã tìm thấy một số thông tin trong đó mọi người gặp lỗi sau khi cố gắng đặt mật khẩu theo cách này trong 12c:

ORA-02153:chuỗi mật khẩu VALUES không hợp lệ

Nếu bạn tra cứu lỗi này trong Hỗ trợ Oracle của tôi, rất có thể bạn sẽ gặp phải Note 2096579.1. Trong ghi chú đó, nó nói rằng phương pháp này không còn khả thi. Nó nói rằng "Đây là chức năng mới trong 12c để buộc người dùng được tạo ra theo đúng cách". Nhưng tôi nhận thấy rằng điều này không hoàn toàn đúng.

Oracle 12c đã giới thiệu chức năng mới để làm cho các giá trị băm của userid / password an toàn hơn. Đây là một liên kết đến Hướng dẫn bảo mật 12c, nơi nó nói về Trình xác minh 12c cho mật khẩu. Lưu ý trong phần đó, nó đề cập đến một giá trị muối được thêm vào mật khẩu khi nó được băm. Để biết tại sao điều này lại quan trọng, hãy xem một ví dụ. Tôi sẽ tạo một người dùng và xem xét userid / password hash được lưu trữ trong cột SPARE4 của 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

Trong các phiên bản trước, cột SPARE4 sẽ không chứa nhiều ký tự như vậy. Điều này chắc chắn phức tạp hơn so với các phiên bản trước 12c. Dự đoán của tôi, mặc dù chưa được xác nhận, là phần S:của đầu ra ở trên là giá trị muối. Tôi không chắc H:và T:đại diện cho điều gì.

Chúng tôi có thể sử dụng gói DBMS_METADATA để thiết kế ngược một người dùng. Khi chúng tôi làm điều đó, chúng tôi có thể thấy rằng chúng tôi vẫn có thể sử dụng điều khoản 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"

Và trên thực tế, điều đó có hiệu quả. Tôi sẽ thay đổi mật khẩu của BOB thành một thứ gì đó khác, sau đó thay đổi nó thành giá trị băm này và kết nối với mật khẩu cũ.

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.

Vì vậy, chúng tôi đã không mất bất kỳ chức năng nào như MOS Note ngụ ý. Chúng tôi chỉ phải xử lý một giá trị băm dài hơn nhiều ở đây.

Trường hợp điều này trở nên thực sự quan trọng là khi cố gắng sử dụng exp / imp hoặc Data Pump để chuyển người dùng từ phiên bản trước 12c sang 12c. Nếu bạn xuất ĐẦY ĐỦ cơ sở dữ liệu Oracle 11g, kết xuất sẽ chứa các giá trị băm mật khẩu cũ. Khi nhập vào 12c, đó là khi bạn sẽ nhận được lỗi ORA-02153. Để khắc phục sự cố này, hãy tạo trước những người dùng trong cơ sở dữ liệu 12c với các mật khẩu đã biết.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy vấn con đệ quy với sắp xếp

  2. Cập nhật Bảng Oracle từ Excel VBA Macro bằng cách sử dụng kết nối ODBC

  3. Cách tích hợp Oracle và Kafka

  4. Ví dụ về giao dịch tự trị của Oracle

  5. Lighty cho Oracle