艾莉丝努力练剑头像
关注
【MYSQL】MYSQL学习的一大重点:用户与权限管理封面图

【MYSQL】MYSQL学习的一大重点:用户与权限管理


头像


🎬 个人主页艾莉丝努力练剑

专栏传送门:《C语言》《数据结构与算法》《C/C++干货分享&学习过程记录
Linux操作系统编程详解》《笔试/面试常见算法:从基础到进阶》《Python干货分享

⭐️为天地立心,为生民立命,为往圣继绝学,为万世开太平

🎬 艾莉丝的简介:

在这里插入图片描述



在这里插入图片描述


1 ~> MySQL 用户管理

1.1 用户信息存储

1.1.1 底层原理

MySQL 的所有用户账号、密码、权限信息均存储在mysql 系统数据库的 user 表中。用户管理的本质,就是对该系统表进行增删改查操作,官方 SQL 语句是对底层表操作的封装。

1.1.2 user 表核心字段

字段名作用说明
host允许用户登录的主机地址:localhost表示仅本地登录,指定 IP 表示仅该地址可登录,%为通配符表示任意主机
user用户名
authentication_string哈希加密后的用户密码,无明文存储
*_priv系列字段对应各项权限,Y表示拥有权限,N表示无权限
password_expired密码是否过期
account_locked账号是否被锁定

1.1.3 用户查询语句

-- 切换至mysql系统库
USE mysql;

-- 查询用户核心信息
SELECT host, user, authentication_string FROM user;

-- 查看user表完整结构
DESC user;

1.2 创建用户

1.2.1 标准语法(唯一推荐方式)

CREATE USER '用户名'@'登录主机' IDENTIFIED BY '密码';
  • 密码以明文输入,MySQL 自动通过哈希算法加密后存入系统表,不会明文存储
  • 用户名与主机地址为一个整体,同一用户名对应不同主机视为不同账号

1.2.2 本地用户创建

仅允许从数据库所在服务器本机登录,安全性最高

-- 创建用户whb,仅本地登录,密码为12345678
CREATE USER 'whb'@'localhost' IDENTIFIED BY '12345678';

1.2.3 远程用户创建

允许从外部主机登录

-- 允许任意主机登录(生产环境禁用)
CREATE USER 'whb'@'%' IDENTIFIED BY '123321';

-- 允许指定IP登录(生产环境推荐)
CREATE USER 'whb'@'192.168.1.100' IDENTIFIED BY '123456';

注意: 公网访问场景下,MySQL 识别的是客户端出口公网 IP,而非客户端内网私有 IP,直接填写私有 IP 无法生效。

1.2.4 新建用户默认权限

新建用户默认仅拥有USAGE权限,即仅可登录数据库,无法查看业务库、无法执行数据操作,仅能访问information_schema等系统库。

1.3 删除用户

1.3.1 标准语法

DROP USER '用户名'@'登录主机';
  • 必须完整指定用户名 + 主机,仅写用户名时 MySQL 默认匹配@'%',会导致删除对应主机的用户失败。

1.3.2 示例

-- 删除本地登录的whb用户
DROP USER 'whb'@'localhost';

-- 删除允许任意主机登录的whb用户
DROP USER 'whb'@'%';

1.4 修改用户密码

1.4.1 管理员修改指定用户密码

-- MySQL 5.7 标准语法
SET PASSWORD FOR 'whb'@'%' = PASSWORD('1234abcd');

-- MySQL 8.0 标准语法(PASSWORD函数已废弃)
ALTER USER 'whb'@'%' IDENTIFIED BY '1234abcd';

1.4.2 用户修改自身密码

-- MySQL 5.7 语法
SET PASSWORD = PASSWORD('新密码');

-- MySQL 8.0 语法
ALTER USER USER() IDENTIFIED BY '新密码';

1.5 权限刷新机制

1.5.1 语法

FLUSH PRIVILEGES;

1.5.2 生效逻辑

  • MySQL 的权限校验基于内存中的权限数据,而非直接读取磁盘系统表
  • 必须执行的场景:直接通过 DML 语句修改 mysql 系统表后,需手动刷新将磁盘数据加载到内存
  • 无需执行的场景:使用官方 DDL 语句(CREATE USER、GRANT 等)操作时,MySQL 自动同步内存权限

2 ~> MySQL 权限管理

2.1 权限体系

2.1.1 权限粒度(作用范围)

按作用域从大到小分为 4 个层级,校验时按层级逐级匹配:

  1. 全局级*.*):作用于 MySQL 实例下所有数据库的所有对象
  2. 库级库名.*):作用于指定数据库内的所有表、视图等对象
  3. 表级库名.表名):作用于指定库的指定数据表
  4. 列级:作用于表内指定字段(需单独授权)

2.1.2 核心权限清单

权限名称对应系统表字段权限说明
SELECTSelect_priv查询表数据
INSERTInsert_priv插入表数据
UPDATEUpdate_priv更新表数据
DELETEDelete_priv删除表数据
CREATECreate_priv创建数据库、表、索引
DROPDrop_priv删除数据库、表、视图
ALTERAlter_priv修改表结构
INDEXIndex_priv创建、删除索引
GRANT OPTIONGrant_priv将自身拥有的权限授予其他用户
CREATE VIEWCreate_view_priv创建视图
SHOW VIEWShow_view_priv查看视图定义
EXECUTEExecute_priv执行存储过程与函数
FILEFile_priv读写服务器主机上的文件
CREATE USERCreate_user_priv创建、删除、修改用户
SHOW DATABASESShow_db_priv查看所有数据库列表
SUPERSuper_priv超级管理员权限,可执行各类管理操作
USAGE-基础登录权限,无其他操作权限,新建用户默认拥有

2.2 权限授予(GRANT)

2.2.1 标准语法

GRANT 权限1, 权限2, ... ON 库名.对象名 TO '用户名'@'登录主机';
  • 多个权限用逗号分隔,ALL PRIVILEGES表示授予指定对象上的所有权限
  • MySQL 5.7 支持通过IDENTIFIED BY子句在授权时隐式创建用户,MySQL 8.0 已废弃该用法

2.2.2 实操示例

-- 授予zhangsan在rootDB.user表上的所有权限
GRANT ALL PRIVILEGES ON rootDB.user TO 'zhangsan'@'%';

-- 授予zhangsan在rootDB库所有表上的只读权限
GRANT SELECT ON rootDB.* TO 'zhangsan'@'%';

-- 授予查询、修改、删除三项权限
GRANT SELECT, UPDATE, DELETE ON rootDB.user TO 'zhangsan'@'%';

2.3 权限回收(REVOKE)

2.3.1 标准语法

REVOKE 权限1, 权限2, ... ON 库名.对象名 FROM '用户名'@'登录主机';

2.3.2 实操示例

-- 回收zhangsan在rootDB.user表的INSERT权限
REVOKE INSERT ON rootDB.user FROM 'zhangsan'@'%';

-- 回收zhangsan在rootDB库下的所有权限
REVOKE ALL PRIVILEGES ON rootDB.* FROM 'zhangsan'@'%';

2.4 权限查看

-- 查看指定用户的全部权限
SHOW GRANTS FOR 'zhangsan'@'%';

-- 查看当前登录用户的自身权限
SHOW GRANTS;

2.5 权限生效规则

  1. 权限变更后,仅对后续新建的数据库连接生效
  2. 已建立的连接不会自动更新权限,需用户退出重连后生效
  3. 直接修改系统表的权限变更,必须执行FLUSH PRIVILEGES后才会被校验逻辑读取

3 ~> 安全最佳实践

  1. 最小权限原则:日常操作禁止使用 root 账号,为业务人员分配仅满足工作需求的最小权限
  2. 严格限定登录地址:禁止使用%通配符开放任意主机登录,生产环境必须指定可信 IP
  3. 端口防护:禁止将 MySQL 端口直接暴露在公网,数据库服务应仅在内网环境访问
  4. 密码强度:设置高复杂度密码,定期更换,禁止弱口令
  5. 禁止直接操作系统表:所有用户与权限操作必须使用官方标准 SQL 语句

结尾

uu们,本文的内容到这里就全部结束了,艾莉丝在这里再次感谢您的阅读!

艾莉丝努力练剑

C/C++ & Linux 底层探索者 | 一个正在努力练剑的技术博主


👀 【关注】 跟随我一起深耕技术领域,见证每一次成长。
❤️ 【点赞】 让优质内容被更多人看见,让知识传递更有力量。
【收藏】 把核心知识点存好,在需要时随时查、随时用。
💬 【评论】 分享你的经验或疑问,评论区一起交流避坑!

不要忘记给博主“一键四连”哦!

“今日练剑达成!”
文章配图

“技术之路难免有困惑,但同行的人会让前进更有方向。”

结语:希望对学习Linux相关内容的uu有所帮助,不要忘记给博主“一键四连”哦!

往期回顾

【MYSQL】MYSQL学习的一大重点:视图

🗡博主在这里放了一只小狗,大家看完了摸摸小狗放松一下吧!🗡
૮₍ ˶ ˊ ᴥ ˋ˶₎ა

在这里插入图片描述

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/2401_89899187/article/details/163281396

文章来源转载

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--