21.加密系统函数
以下是对这些 MySQL 函数的总结,包含功能、用法示例和注意事项,方便你理解学习:
1. USER()
函数
- 功能:获取当前登录 MySQL 数据库的用户信息(包含用户名和主机地址,格式一般是
用户名@主机地址
)。 - 示例:
SELECT USER();
-- 假设用 root 用户本地登录,可能返回 root@localhost
- 用途:快速查看当前操作数据库的用户身份,排查权限相关问题(比如确认是不是用错了账号 )。
2. DATABASE()
函数
- 功能:获取当前正在使用(选中)的数据库名称。如果没选数据库(没执行
USE 数据库名
),返回NULL
。 - 示例:
-- 先选中数据库
USE date_functions_test;
SELECT DATABASE();
-- 返回 date_functions_test
- 用途:写通用 SQL 脚本时,动态确认当前上下文的数据库,避免因选错库导致执行错误。
3. MD5(str)
函数
- 功能:对输入的字符串
str
做 MD5 哈希运算,生成一个 32 位的十六进制字符串(常用于简单加密场景,比如用户密码存储,但 MD5 已不太安全,现在更多用更安全的哈希算法 )。 - 示例:
SELECT MD5('123456');
-- 可能返回 e10adc3949ba59abbe56e057f20f883(固定结果,相同字符串 MD5 值固定 )
- 用途:早年常用来存密码(现在推荐用
PASSWORD()
或更安全的加密方式,比如SHA2()
)、生成数据唯一标识(但要注意哈希冲突 )。
4. PASSWORD(str)
函数
- 功能:专门用于 MySQL 数据库内部,对字符串
str
进行加密,生成适合存储在mysql.user
表的密码格式(是 MySQL 自定义的加密逻辑,不同版本可能有差异 )。 - 示例:
-- 模拟给密码 'mypassword' 加密
SELECT PASSWORD('mypassword');
-- 返回类似 *6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4 这样的加密字符串
- 用途:主要在管理 MySQL 用户、手动设置密码时用(比如直接改
mysql.user
表密码字段 ),但要注意,它是 MySQL 特定的加密方式,通用性差,且不同版本加密逻辑可能不兼容。
5. 补充对比 & 注意事项
函数 | 特点 | 适用场景 | 安全性/注意点 |
| 查当前登录用户 | 权限排查、日志记录 | 无特殊风险,纯信息查询 |
| 查当前选中的数据库 | 脚本动态适配、多库操作 | 没选库时返回 |
| 通用 32 位哈希,结果固定 | 简单加密、生成标识 | 已不算安全,易被暴力破解 |
| MySQL 专属密码加密 | 手动管理 MySQL 用户密码 | 仅限 MySQL 内部用,通用性极差 |
现在实际开发中,存密码更推荐用 SHA2(str, 256)
这类更安全的哈希,或者结合盐值(salt)加密;PASSWORD()
基本只在运维 MySQL 系统用户时偶尔用到,学习时了解其功能即可~
6. 示例
(1)查看当前登录用户
SELECT USER();
(2)查看当前使用的数据库
SELECT DATABASE(); -- 若未执行 USE,返回 NULL
(3)模拟用户密码存储
SELECT 'user1' AS username,'password123' AS plaintext_password,MD5('password123') AS encrypted_password;
(4)验证 MD5 的固定性(相同输入生成相同输出)
SELECT MD5('hello') AS hash1,MD5('hello') AS hash2; -- hash1 和 hash2 结果相同
(5)模拟 MySQL 用户密码加密过程
SELECT 'new_password' AS plaintext,PASSWORD('new_password') AS mysql_encrypted;