MySQL PASSWORD()函数使用方法

以下是 MySQL PASSWORD() 函数的详细使用方法及注意事项:


一、函数基础功能

  1. 加密原理

    • 对明文密码进行单向哈希加密,生成 41 位字符串(旧版 MySQL 为 16 位)
    • 加密结果不可逆,常用于用户权限表的密码存储8
  2. 语法格式

    sqlCopy Code
    SELECT PASSWORD('明文密码'); -- 返回加密后的字符串:ml-citation{ref="5,8" data="citationList"}

二、典型应用场景

1. 用户密码设置

sqlCopy Code
-- 创建用户时直接加密密码
CREATE USER 'user1'@'localhost' IDENTIFIED BY PASSWORD('加密结果字符串'); -- 需手动调用PASSWORD()生成:ml-citation{ref="4" data="citationList"}

-- 修改现有用户密码(MySQL 5.7.6前适用)
SET PASSWORD FOR 'user1'@'localhost' = PASSWORD('new_password'); -- 自动完成加密:ml-citation{ref="2,4" data="citationList"}

2. 密码验证

sqlCopy Code
-- 登录验证时比对加密结果
SELECT * FROM users
WHERE username = 'user1' AND password = PASSWORD('输入密码'); -- 需与数据库存储的加密值匹配:ml-citation{ref="5" data="citationList"}

三、版本兼容性说明

版本 支持情况 替代方案
MySQL 5.7- 完全支持但部分场景已弃用 建议逐步迁移至 ALTER USER
MySQL 8.0+ 已移除该函数 使用 caching_sha2_password 插件

四、安全注意事项

  1. 不推荐在应用层使用

    • 该函数设计仅用于MySQL内部权限系统,外部程序应使用 SHA2() 或 MD5()
  2. 加密强度对比

    • PASSWORD() 安全性低于 SHA-256,但高于旧版 old_password()
    • 示例加密结果对比:
      sqlCopy Code
      SELECT PASSWORD('123'), OLD_PASSWORD('123'); -- 输出不同长度哈希值:ml-citation{ref="7" data="citationList"}

五、替代方案(MySQL 8.0+)

sqlCopy Code
-- 使用更安全的ALTER USER语法
ALTER USER 'user1'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'new_password'; -- 默认加密方式:ml-citation{ref="1,8" data="citationList"}

‌:生产环境建议禁用 PASSWORD(),优先采用 MySQL 8.0 的现代认证机制。

阅读剩余
THE END