Plantre Plantre
首页
后端
技术
硬件
  • 前端文章

    • HTML
    • CSS
    • JavaScript
  • 技术

    • 技术文档
    • GitHub技巧
    • Nodejs
    • 博客搭建
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

plantre

一个后端开发者
首页
后端
技术
硬件
  • 前端文章

    • HTML
    • CSS
    • JavaScript
  • 技术

    • 技术文档
    • GitHub技巧
    • Nodejs
    • 博客搭建
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 计算机组成原理

  • 操作系统

  • 计算机网络

  • 设计模式

  • Java

  • Spring

  • SpringCloud

  • MySQL

    • MySQL的权限控制
    • 精细权限管制示例
    • localhost和127.0.0.1的区别-MySQL
    • mysql数据类型
    • 当前读和快照读
    • MySQL中MVCC的实现原理
    • MySQL中MVCC具体用了多少个隐藏字段
    • 锁和事务的关系
    • FOR UPDATE锁类型
  • Redis

  • 分布式

  • Zookeeper

  • Dubbo

  • Kafka

  • 数据结构

  • 算法

  • OJ

  • 从道家哲学看计算机?
  • 后端
  • MySQL
plantre
2025-05-03

MySQL的权限控制

以下是对MySQL权限控制的系统化总结,结合权限分类、管理操作及最佳实践:


一、权限分类与层级 MySQL的权限控制分为五级,实现精细化管理:

  1. 全局权限
    影响整个MySQL实例,如用户管理、服务器配置。
    核心权限:CREATE USER(创建用户)、SHUTDOWN(关闭服务器)、RELOAD(刷新权限)
    授权语法:GRANT ALL PRIVILEGES ON *.* TO 'user'@'host'

  2. 数据库级权限
    控制用户对特定库的操作,如创建表、修改结构。
    常用权限:CREATE(建表)、ALTER(改表)、DROP(删库)
    授权示例:GRANT SELECT ON mydb.* TO 'user'@'%'

  3. 表级权限
    限制对具体表的操作,如增删改查。
    关键权限:SELECT(查询)、INSERT(插入)、DELETE(删除)
    精确控制:GRANT UPDATE ON mydb.mytable TO 'user'@'localhost'

  4. 列级权限
    通过视图间接实现,例如仅允许访问某列:

    CREATE VIEW v_secure AS SELECT col1 FROM mytable;
    GRANT SELECT ON v_secure TO 'user'@'%';  -- 仅开放col1列
    
    1
    2
  5. 存储程序权限
    管理存储过程/函数的执行:
    GRANT EXECUTE ON PROCEDURE myproc TO 'user'@'%'


二、权限管理操作

  1. 用户生命周期管理 • 创建用户
CREATE USER 'user'@'host' IDENTIFIED BY 'password';  -- 允许从host连接
1

• 修改用户

RENAME USER 'old'@'%' TO 'new'@'%';  -- 重命名
ALTER USER 'user'@'%' IDENTIFIED BY 'new_password';  -- 改密码
1
2

• 删除用户

DROP USER 'user'@'%';  -- 彻底删除(推荐)
DELETE FROM mysql.user WHERE User='user' AND Host='%';  -- 需手动刷新权限
1
2
  1. 权限分配与回收 • 授权
GRANT SELECT, INSERT ON mydb.* TO 'user'@'localhost';  -- 分配库级权限
GRANT UPDATE (col1) ON mydb.mytable TO 'user'@'%';      -- 列级权限(需视图辅助)
1
2

• 撤销权限

REVOKE DELETE ON mydb.* FROM 'user'@'%';  -- 回收删除权限
1

• 查看权限

SHOW GRANTS FOR 'user'@'%';  -- 显示所有已授权限
1
  1. 权限生效 • 刷新权限表:修改权限后需执行 FLUSH PRIVILEGES;

三、高级权限控制

  1. 密码策略
    • 过期时间:ALTER USER 'user'@'%' PASSWORD EXPIRE INTERVAL 90 DAY;

    • 全局策略:在配置文件中设置 default_password_lifetime=180(每180天过期)

  2. 角色管理(MySQL 8.0+)
    通过角色批量分配权限,简化多用户管理:

CREATE ROLE 'read_only';
GRANT SELECT ON *.* TO 'read_only';
 GRANT 'read_only' TO 'user1'@'%', 'user2'@'%';
1
2
3

四、最佳实践

  1. 最小权限原则:仅授予必要权限(如只读账户仅分配SELECT)
  2. 定期审计:使用 SHOW GRANTS 审查权限,移除冗余授权
  3. IP限制:通过'user'@'192.168.1.%'限制访问来源
  4. 避免使用%主机:生产环境推荐限制为特定IP或域名

五、常见问题处理 • 权限不生效:检查是否执行 FLUSH PRIVILEGES; 或重启服务

• 权限冲突:精确的权限层级(如全局SELECT会覆盖表级限制)

• 安全漏洞:禁用默认匿名账户,删除测试数据库

通过上述分级控制和策略,可构建安全的MySQL权限体系。具体操作时需结合实际业务需求调整权限粒度。

编辑 (opens new window)
#MySQL
上次更新: 2025/06/13, 00:51:28
Spring Cloud生态
精细权限管制示例

← Spring Cloud生态 精细权限管制示例→

最近更新
01
集成loki
07-04
02
TCP的ESTABLISHED是什么意思
06-24
03
安装1panel
06-24
更多文章>
Theme by Vdoing | Copyright © 2025-2025 plantre | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式