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

MYSQL:Thủ tục với câu lệnh if

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 :-)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. DB gì cho cơ sở dữ liệu lớn?

  2. Sắp xếp theo một số cột và cũng theo rand () trong MySQL

  3. làm mới div php động bằng jquery

  4. Kiểm tra mật khẩu băm của WordPress bằng mật khẩu đơn giản

  5. gem cài đặt mysql thất bại