Bạn thực sự nên băm những mật khẩu đó, sử dụng đoạn mã sau
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `change_pass`(
in_Email VARCHAR(45),
in_PassOld VARCHAR(45),
in_PassNew VARCHAR(45)
)
BEGIN
DECLARE KnowsOldPassword INTEGER;
SELECT count(*) INTO KnowsOldPassword
FROM User
WHERE Email = in_Email AND passhash = SHA2(CONCAT(salt, in_PassOld),512);
IF (KnowsOldPassword > 0) THEN
UPDATE User
SET Passhash = SHA2(CONCAT(salt, inPassNew),512)
WHERE Email = in_Email;
END IF;
END $$
DELIMITER ;
salt
là một trường bổ sung trong bảng user
điều đó ít nhiều ngẫu nhiên, nhưng không cần phải bí mật. Nó dùng để đánh bại bảng cầu vồng
.
Bạn có thể đặt muối thành chuỗi ký tự ngắn (10) hoặc dữ liệu ngẫu nhiên. ví dụ.
salt = ROUND(RAND(unix_timestamp(now())*9999999999);
Bạn không cần cập nhật muối mà chỉ cần tạo một lần rồi lưu trữ.
Để biết thêm về vấn đề này, hãy xem:
Ướp muối băm của tôi với PHP và MySQL
Tôi nên tiếp cận việc lưu trữ mật khẩu người dùng theo cách đạo đức như thế nào để truy xuất bản rõ sau này?
Nhận xét về mã của bạn
IF(@PassOld == in_PassOld) THEN //incorrect
IF(@PassOld = in_PassOld) THEN //correct, SQL <> PHP :-)