当前位置: 首页 > news >正文

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. 补充对比 & 注意事项

函数

特点

适用场景

安全性/注意点

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;

http://www.xdnf.cn/news/1058905.html

相关文章:

  • macOS版的节点小宝上架苹果APP Store了
  • git的使用——初步认识git和基础操作
  • DeepForest开源程序是用于 Airborne RGB 机器学习的 Python 软件包
  • 使用 Elasticsearch 提升 Copilot 能力
  • [计算机网络] 网络的诞生:协议的认知建立
  • 2025年暑期在线实习项目分享
  • 理解 create 指向的箭头函数
  • 从零Gazebo中实现Cartographer算法建图
  • DBeaver 中 Greenplum、PostgreSQL 和 PostgreSQL (old) 驱动的区别
  • 前端跨域解决方案(4):postMessage
  • 剑指offer32_二叉搜索树的后序遍历序列
  • 新发布的一款使用ReactNative新架构加载Svga动画的开源插件[android/ios]
  • 数据结构——选择题—查漏补缺
  • 【unitrix】 3.0 基本结构体(types.rs)
  • 二、OpenCV的第一个程序
  • Uniapp H5端SEO优化全攻略:提升搜索引擎排名与流量
  • 结合 STM32CubeMX 使用 FreeRTOS 实时操作系统
  • 【ClipPal】推荐一个非常好用的粘贴板记录工具
  • 侧信道分析中的简单模板攻击(TA)Python实现(带测试)
  • 【web应用】Vue 3 中实现 Chart.js 折线图:详细指南与最佳实践
  • 14.2 《3小时从零搭建企业级LLaMA3语言助手:GitHub配置+私有化模型集成全实战》
  • 基于CNN的FashionMNIST数据集识别6——DenseNet模型
  • 基于深度学习的智能文本摘要系统:技术与实践
  • Uniapp性能优化全面指南:从原理到实践
  • GNU Octave 基础教程(1):在 Ubuntu 22.04 和 Windows 11 上的安装指南
  • 【Linux】UDP与TCP协议
  • 电路图识图基础知识-普通卧式镗床识图(三十)
  • 深度体验KingbaseES在线平台:从零掌握企业级数据库实战(附架构图+代码案例)
  • Python基础学习框架(总周期:8周)
  • 九日集训第六天