如何使用单个查询使用户表中的每个密码都加密(使用md5()),除了一个特定的行?
如何使用单个查询使用户表中的每个密码都加密(使用md5()),除了一个特定的行?
在MySQL数据库中,存储密码时可以使用许多比MD5更好的哈希函数。
您可以在MySQL :: 11.10.2. Encryption and Compression Functions上找到它们的列表。
UPDATE users SET password = SHA('secret_password') WHERE ....;
SELECT COUNT(*) FROM users WHERE name = 'username' && password = SHA('typed_password');
如果结果 > 0,则表示用户提供了正确的密码。
在哈希密码时,不要忘记加盐,这样相同的密码就不会产生相同的哈希值:
SET @salt := CONV(FLOOR(RAND() * 0x100000000), 10, 16)
UPDATE passwords
SET password = CONCAT(@salt, SHA(CONCAT(@salt, @typed_password)))
SELECT 1
FROM passwords
WHERE SHA(CONCAT(SUBSTRING(password, 1, 8), @typed_password)) = SUBSTRING(password, 9, 40)
针对原帖的编辑做出的回应。
UPDATE userTable
SET password = MD5(password)
WHERE NOT (<criteria to identify row to exclude>)
UPDATE mytable
SET password = MD5(password)
WHERE id <> 123
我认为这个更新有点更加现代化。
SET PASSWORD FOR 'existinguser'@'localhost' = PASSWORD('newpass');
或者
UPDATE user SET password = PASSWORD('newpass');