Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MYSQL:Prosedur dengan pernyataan if

Anda harus benar-benar meng-hash password tersebut, gunakan kode berikut

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 adalah bidang tambahan dalam tabel user yang kurang lebih acak, tetapi tidak perlu dirahasiakan. Ini berfungsi untuk mengalahkan meja pelangi .
Anda dapat menyetel garam ke string pendek char(10) atau data acak. misalnya

salt = ROUND(RAND(unix_timestamp(now())*9999999999);

Anda tidak perlu memperbarui garam, cukup buat sekali, lalu simpan.

Untuk informasi lebih lanjut tentang masalah ini, lihat:
Pengasinan hash saya dengan PHP dan MySQL
Bagaimana saya harus mendekati penyimpanan kata sandi pengguna secara etis untuk pengambilan teks biasa nanti?

Komentar pada kode Anda

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. Mengindeks bidang boolean

  2. Perl DBI fetchall_hashref

  3. ORDER BY Subquery untuk konversi GROUP BY ke JOIN

  4. Python, konversi char 4-byte untuk menghindari kesalahan MySQL Nilai string salah:

  5. Mysql memilih (n) baris dari setiap kejadian