Hướng dẫn how to insert bcrypt password in mysql - cách chèn mật khẩu bcrypt trong mysql
Tôi đang xây dựng một ứng dụng web với khung lò xo (-> java). Vì lý do kiểm tra, tôi đã tạo một người dùng (thông qua câu lệnh SQL). Hiện tại tôi đang làm việc trên mã hóa mật khẩu, mà tôi đang sử dụng bcyrptpasswordencoder. Tôi đang tự hỏi, nếu có thể, để tạo người dùng đầu tiên này bằng mật khẩu được mã hóa. Nói cách khác: Tôi có thể tạo một người dùng mới thông qua câu lệnh SQL bằng cách sử dụng mật khẩu được mã hóa làm đầu vào không? Nếu vậy, làm thế nào để tôi nhập mật khẩu được mã hóa? Tôi đã thử {bcyrpt} [băm], mà tôi đã đọc trên một số trang web, nhưng điều đó dường như không hoạt động ... Chèn các giá trị người dùng (tên người dùng, mật khẩu) ('quản trị', 'passwd')) Đã hỏi ngày 26 tháng 12 năm 2018 lúc 16:18Dec 26, 2018 at 16:18
Đầu tiên là một sự làm rõ nhanh chóng về thuật ngữ. Mật khẩu được "băm" với bcrypt không "được mã hóa". Điều này có nghĩa là nó là một thuật toán một chiều (bạn không thể bỏ giá trị). Giá trị được lưu trữ trong cơ sở dữ liệu là giá trị băm (ví dụ: Vì vậy, tất cả những gì bạn cần làm cho người dùng thử nghiệm của bạn là tạo blh bcrypt để đưa vào câu lệnh chèn. Hoặc chạy nó thông qua Ví dụ:
Đã trả lời ngày 26 tháng 12 năm 2018 lúc 17:05Dec 26, 2018 at 17:05
Micah Carrickmicah CarrickMicah Carrick 9.7173 huy hiệu vàng30 Huy hiệu bạc41 Huy hiệu đồng3 gold badges30 silver badges41 bronze badges Bạn có thể sử dụng chú thích 0 để gọi mã sau khi khởi động mùa xuân và thêm người dùng bằng mật khẩu được mã hóa. Nhưng tôi khuyến khích bạn chỉ viết một bài kiểm tra đơn vị. :)
Đã trả lời ngày 26 tháng 12 năm 2018 lúc 22:48Dec 26, 2018 at 22:48
Jakub Pomykałajakub PomykałaJakub Pomykała 1.9843 huy hiệu vàng25 Huy hiệu bạc55 Huy hiệu đồng3 gold badges25 silver badges55 bronze badges 2.2.4 & nbsp; mật khẩu băm trong MySQLGhi chú Thông tin trong phần này chỉ áp dụng đầy đủ trước MySQL 5.7.5 và chỉ cho các tài khoản sử dụng các plugin xác thực 1 hoặc 2. Hỗ trợ băm mật khẩu trước 4,1 đã bị xóa trong MySQL 5.7.5. Điều này bao gồm loại bỏ plugin xác thực 2 và hàm 4. Ngoài ra, 5 không thể bị vô hiệu hóa và 6 không thể được đặt thành 1.Kể từ MySQL 5.7.5, chỉ có thông tin về các băm mật khẩu 4.1 và plugin xác thực 1 vẫn có liên quan.MySQL liệt kê các tài khoản người dùng trong bảng 8 của cơ sở dữ liệu 9. Mỗi tài khoản MySQL có thể được gán một mật khẩu, mặc dù bảng 8 không lưu trữ phiên bản Cleartext của mật khẩu, nhưng giá trị băm được tính toán từ nó.MySQL sử dụng mật khẩu trong hai giai đoạn giao tiếp máy khách/máy chủ:
Nói cách khác, máy chủ kiểm tra các giá trị băm trong quá trình xác thực khi máy khách lần đầu tiên cố gắng kết nối. Máy chủ tạo ra các giá trị băm nếu máy khách được kết nối gọi hàm 3 hoặc sử dụng câu lệnh tạo mật khẩu để đặt hoặc thay đổi mật khẩu.checks hash values during authentication when a client first attempts to connect. The server generates hash values
if a connected client invokes the 3 function or uses a password-generating statement to set or change a password. Các phương thức băm mật khẩu trong MySQL có lịch sử được mô tả sau đây. Những thay đổi này được minh họa bằng các thay đổi trong kết quả từ hàm 3 tính toán các giá trị băm mật khẩu và trong cấu trúc của bảng 8 nơi lưu trữ mật khẩu.Phương thức băm bản gốc (trước 4,1)Phương pháp băm ban đầu tạo ra một chuỗi 16 byte. Những băm như vậy trông như thế này:
Để lưu trữ mật khẩu tài khoản, cột 0 của bảng 8 tại thời điểm này dài 16 byte.Phương pháp băm 4.1MySQL 4.1 đã giới thiệu mật khẩu băm cung cấp bảo mật tốt hơn và giảm nguy cơ mật khẩu bị chặn. Có một số khía cạnh cho sự thay đổi này:
Những thay đổi trong MySQL 4.1 đã diễn ra trong hai giai đoạn:
Các vấn đề tương thích liên quan đến các phương pháp bămViệc mở rộng cột 0 trong MySQL 4.1 từ 16 byte đến 41 byte ảnh hưởng đến các hoạt động cài đặt hoặc nâng cấp như sau:
Phương thức băm 4.1 chỉ được hiểu bởi các máy chủ và máy khách MySQL 4.1 (và cao hơn), có thể dẫn đến một số vấn đề tương thích. Máy khách 4.1 hoặc cao hơn có thể kết nối với máy chủ Pre-4.1, vì máy khách hiểu cả các phương thức băm mật khẩu trước 4,1 và 4.1. Tuy nhiên, máy khách Pre-4.1 cố gắng kết nối với máy chủ 4.1 hoặc cao hơn có thể gặp khó khăn. Ví dụ: máy khách MySQL 4.0 có thể thất bại với thông báo lỗi sau:mysql client may fail with the following error message:
Cuộc thảo luận sau đây mô tả sự khác biệt giữa các phương thức băm trước 4,1 và 4.1 và những gì bạn nên làm nếu bạn nâng cấp máy chủ của mình nhưng cần duy trì khả năng tương thích ngược với máy khách trước 4,1. . Sự khác biệt giữa băm mật khẩu ngắn và dài có liên quan đến cách máy chủ sử dụng mật khẩu trong quá trình xác thực và cách nó tạo băm mật khẩu cho các máy khách được kết nối thực hiện các hoạt động thay đổi mật khẩu. Cách mà máy chủ sử dụng băm mật khẩu trong quá trình xác thực bị ảnh hưởng bởi chiều rộng của cột 0:
Ngay cả đối với các tài khoản hash ngắn, quy trình xác thực thực sự an toàn hơn một chút cho các máy khách 4.1 và sau đó so với các khách hàng lớn tuổi. Về mặt bảo mật, độ dốc từ ít nhất đến an toàn nhất là:
Cách mà máy chủ tạo ra băm mật khẩu cho các máy khách được kết nối bị ảnh hưởng bởi chiều rộng của cột 0 và biến hệ thống 6. Máy chủ 4.1 trở lên chỉ tạo các băm dài nếu đáp ứng một số điều kiện nhất định: cột 0 phải đủ rộng để giữ các giá trị dài và không được đặt thành 1.Những điều kiện áp dụng như sau:
Mục đích của biến hệ thống 6 là cho phép khả năng tương thích ngược với máy khách trước 4,1 trong trường hợp máy chủ sẽ tạo ra các băm mật khẩu dài. Tùy chọn không ảnh hưởng đến xác thực (4.1 và các máy khách sau này vẫn có thể sử dụng các tài khoản có băm mật khẩu dài), nhưng nó ngăn chặn việc tạo mật khẩu dài băm trong bảng 8 do kết quả của hoạt động thay đổi mật khẩu. Điều đó được phép xảy ra, tài khoản không còn có thể được sử dụng bởi các máy khách trước 4,1. Với 6 bị vô hiệu hóa, có thể có kịch bản không mong muốn sau đây:
Kịch bản này minh họa rằng, nếu bạn phải hỗ trợ các máy khách Pre-4.1 cũ hơn, có vấn đề là chạy máy chủ 4.1 hoặc cao hơn mà không cần 6 được đặt thành 1. Bằng cách chạy máy chủ bằng 1, các hoạt động thay đổi mật khẩu không tạo ra băm mật khẩu dài và do đó Không làm cho các tài khoản trở nên không thể truy cập được đối với các khách hàng lớn tuổi. .Nhược điểm của 1 là bất kỳ mật khẩu nào được tạo hoặc thay đổi sử dụng các băm ngắn, thậm chí đối với các máy khách 4.1 trở lên. Vì vậy, bạn mất bảo mật bổ sung được cung cấp bởi các băm mật khẩu dài. Để tạo một tài khoản có hàm băm dài (ví dụ: để sử dụng cho máy khách 4.1) hoặc để thay đổi tài khoản hiện có để sử dụng hàm băm mật khẩu dài, quản trị viên có thể đặt giá trị phiên là 6 được đặt thành 0 trong khi để lại bộ giá trị toàn cầu đến 1:
Các kịch bản sau đây là có thể trong MySQL 4.1 trở lên. Các yếu tố là liệu cột 0 ngắn hay dài, và, nếu lâu, liệu máy chủ được bắt đầu với 6 được bật hay tắt. Kịch bản 1: Cột ngắn 0 column in user table:
Kịch bản này xảy ra khi cài đặt Pre-4.1 MySQL đã được nâng cấp lên 4.1 trở lên nhưng MySQL_Upgrade chưa được chạy để nâng cấp các bảng hệ thống trong cơ sở dữ liệu 9. (Đây không phải là cấu hình được đề xuất vì nó không cho phép sử dụng mật khẩu 4.1 an toàn hơn.)mysql_upgrade has not been run to upgrade the system tables in the 9 database. (This is not a recommended configuration because it does not permit use of more secure 4.1 password hashing.) Kịch bản 2: Cột dài 0 column; server started with 1:
Giá trị của 6 là không liên quan vì với cột 0 ngắn, máy chủ chỉ tạo ra băm mật khẩu ngắn.Kịch bản này xảy ra khi cài đặt Pre-4.1 MySQL đã được nâng cấp lên 4.1 trở lên nhưng MySQL_Upgrade chưa được chạy để nâng cấp các bảng hệ thống trong cơ sở dữ liệu 9. (Đây không phải là cấu hình được đề xuất vì nó không cho phép sử dụng mật khẩu 4.1 an toàn hơn.)Kịch bản 2: Cột dài 0; Máy chủ bắt đầu với 1: Các băm ngắn hoặc dài có thể được lưu trữ trong cột 0
column; server started with $2a$10$Iewuj5kQFVnUaNbb6M0sAu6a1qbc5bqXAuyc.9fF4cR8xxIOhD0Da 8:
Để tạo một tài khoản mới có hàm băm mật khẩu dài hoặc để thay đổi mật khẩu của bất kỳ tài khoản hiện có nào để sử dụng băm dài, trước tiên hãy đặt giá trị phiên là 6 được đặt thành 0 trong khi để lại giá trị toàn cầu được đặt thành 1, như được mô tả trước đây.Nếu đây là một vấn đề, bạn có thể thay đổi mật khẩu theo một cách đặc biệt. Ví dụ: thông thường bạn sử dụng
Để thay đổi mật khẩu nhưng hãy tạo một hàm băm ngắn, hãy sử dụng chức năng 4 thay thế:
4 rất hữu ích cho các tình huống trong đó bạn rõ ràng muốn tạo ra một hàm băm ngắn.Nhược điểm cho từng kịch bản trước đó có thể được tóm tắt như sau: Trong kịch bản 1, bạn không thể tận dụng các băm dài hơn cung cấp xác thực an toàn hơn. Trong Kịch bản 2, 1 ngăn các tài khoản có băm ngắn không thể truy cập được, nhưng các hoạt động thay đổi mật khẩu khiến các tài khoản có băm dài để trở lại băm ngắn trừ khi bạn cẩn thận thay đổi giá trị phiên là 6 thành 0 trước tiên.Trong Kịch bản 3, các tài khoản có băm ngắn trở nên không thể truy cập được đối với máy khách trước 4,1 nếu bạn thay đổi mật khẩu mà không sử dụng rõ ràng 4.Cách tốt nhất để tránh các vấn đề tương thích liên quan đến băm mật khẩu ngắn là không sử dụng chúng:
|