21.加密&系统函数

发布于:2025-06-19 ⋅ 阅读:(17) ⋅ 点赞:(0)

以下是对这些 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. 补充对比 & 注意事项

函数

特点

适用场景

安全性/注意点

USER()

查当前登录用户

权限排查、日志记录

无特殊风险,纯信息查询

DATABASE()

查当前选中的数据库

脚本动态适配、多库操作

没选库时返回 NULL

MD5()

通用 32 位哈希,结果固定

简单加密、生成标识

已不算安全,易被暴力破解

PASSWORD()

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;


网站公告

今日签到

点亮在社区的每一天
去签到