在 MySQL 中,PASSWORD() 函数使用的加密算法取决于 MySQL 版本:
MySQL 版本与加密算法对应关系
1. MySQL 4.1+ 版本
算法:双层 SHA-1 哈希
mysql> SELECT PASSWORD('123456');
-- 返回示例:*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9加密过程:
- 生成 SHA-1 哈希:
SHA1('123456') - 再次生成 SHA-1 哈希:
SHA1(SHA1('123456')) - 添加
*前缀
2. MySQL 4.1 之前版本
算法:老式的 16 字节哈希(已过时)
验证示例
-- 在 MySQL 中验证
SELECT PASSWORD('123456');
SELECT SHA1('123456');
SELECT SHA1(SHA1('123456'));在 Linux 中重现 MySQL PASSWORD()
# 第一步:计算 SHA1
echo -n "123456" | sha1sum
# 输出:7c4a8d09ca3762af61e59520943dc26494f8941b
# 第二步:计算 SHA1(SHA1()),注意要去掉换行符
echo -n "123456" | sha1sum | cut -d' ' -f1 | xxd -r -p | sha1sum
# 输出:6bb4837eb74329105ee4568dda7dc67ed2ca2ad9
# 完整命令(添加 * 前缀)
echo -n "123456" | sha1sum | cut -d' ' -f1 | xxd -r -p | sha1sum | cut -d' ' -f1 | awk '{print "*" toupper($1)}'
# 输出:*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9重要注意事项
1. PASSWORD() 函数已弃用
-- MySQL 5.7.6+ 中,PASSWORD() 已弃用
-- MySQL 8.0+ 中,PASSWORD() 已移除
-- 替代方案:使用更安全的认证方式
ALTER USER 'username'@'host' IDENTIFIED BY 'new_password';2. 现代 MySQL 的密码认证
- mysql_native_password:使用 SHA1(SHA1())(与 PASSWORD() 相同)
- caching_sha2_password:MySQL 8.0 默认,使用 SHA-256
- sha256_password:使用 SHA-256
3. 检查当前认证插件
SELECT user, host, plugin FROM mysql.user;安全建议
- 不要使用 PASSWORD():
-- 错误用法(不安全)
SET PASSWORD = PASSWORD('123456');
-- 正确用法
ALTER USER 'user'@'host' IDENTIFIED BY '123456';- 升级到更安全的认证插件:
ALTER USER 'user'@'host' IDENTIFIED WITH caching_sha2_password BY 'password';- 密码强度策略:
-- 检查密码策略
SHOW VARIABLES LIKE 'validate_password%';总结
- MySQL 4.1+ 的 PASSWORD():使用 SHA1(SHA1(password)) 算法
- 40字符哈希:结果是 20 字节的十六进制表示(40字符)
- 现代替代:建议使用 MySQL 的用户管理语句而非 PASSWORD() 函数
















