前段时间遇到一个小问题,后来发现这是个挺常见的坑,顺手整理一篇笔记。
🎬 个人主页:艾莉丝努力练剑
❄专栏传送门:《C语言》《数据结构与算法》《C/C++干货分享&学过程记录》
《Linux操作系统编程详解》《笔试/面试常见算法:从基础到进阶》《Python干货分享》
⭐️为天地立心,为生民立命,为往圣继绝学,为万世开太平
🎬 艾莉丝的简介:
文章目录
1.2 创建用户 1.3 删除用户 1.4 修改用户密码 1.5 权限刷新机制 2 ~> MySQL 权限管理 2.2 权限授予(GRANT) 2.3 权限回收(REVOKE) 2.4 权限查看2.5 权限生效规则 3 ~> 安全最佳实践结尾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有所帮助,不要忘记给博主“一键四连”哦!
往期回顾:
🗡博主在这里放了一只小狗,大家看完了摸摸小狗放松一下吧!🗡
>
૮₍ ˶ ˊ ᴥ ˋ˶₎ა
就写这么多吧,内容比较基础,适合入门回顾。有补充的地方欢迎留言一起完善。
评论 (0)
暂无评论