0

0

mysql中权限分离与最小权限原则的应用

P粉602998670

P粉602998670

发布时间:2026-01-22 09:01:34

|

489人浏览过

|

来源于php中文网

原创

应用账号应遵循最小权限原则,仅授予特定库表的SELECT、INSERT、UPDATE、DELETE权限,禁用DROP、ALTER、GRANT OPTION等高危权限,并限定IP范围;root账号严禁用于应用服务。

mysql中权限分离与最小权限原则的应用

MySQL 中如何为应用账号分配最小必要权限

直接给 SELECTINSERTUPDATEDELETE 就够了,别碰 DROPALTERCREATE,更不能给 GRANT OPTIONFILE 权限。生产环境的应用账号,绝大多数场景下只需对特定数据库的几张表有 CRUD 权限。

常见错误是用 GRANT ALL PRIVILEGES ON *.* TO 'app'@'%' —— 这等于把整套 MySQL 当成裸机交出去,一旦应用被注入或配置泄露,数据库就全盘失守。

  • 先创建专用数据库: CREATE DATABASE app_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  • 再建账号并限制来源:CREATE USER 'app_user'@'10.20.%.%' IDENTIFIED BY 'strong_password_123';
  • 只授指定库表权限:GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.orders TO 'app_user'@'10.20.%.%';
  • 执行 FLUSH PRIVILEGES; 生效(仅在修改系统表后需显式调用)

为什么不能用 root 或同级账号跑应用服务

root 账号拥有 SUPERSHUTDOWNRELOAD 等高危权限,还能读写 mysql 系统库。应用代码若存在 SQL 注入、日志打印敏感 SQL、或连接串误泄露,攻击者可直接执行 SELECT * FROM mysql.user; 获取所有账号哈希,甚至用 SET PASSWORD FOR 'root'@'localhost' = ... 提权。

更隐蔽的风险是 ORM 自动生成的语句可能触发隐式权限需求。比如 Djangosyncdb 或 Laravel 的 migrate 默认尝试 SHOW CREATE TABLESELECT 系统表 —— 这些只需 SELECT 权限即可满足,无需 PROCESSINFORMATION_SCHEMA 全局访问。

  • 应用账号不应出现在 mysql.user 表的 Super_priv='Y' 行中
  • 避免使用 '%' 作为 host,优先限定内网子网段(如 '10.20.30.%'
  • 禁止授予 GRANT OPTION —— 否则该账号可自行扩大权限范围

如何安全地支持 DBA 日常运维与开发查数需求

运维和开发不是“非得用 root 才能干活”。应分角色建三类账号:应用账号(最小权限)、只读分析账号(SELECT + SHOW VIEW)、DBA 账号(有限 ALTER/INDEX 权限,禁用 DROP DATABASE)。

CoCo
CoCo

智谱AI推出的首个有记忆的企业自主Agent智能体

下载

例如导出报表的 BI 工具,只需:GRANT SELECT ON app_db.* TO 'bi_reader'@'192.168.100.%';;而 DBA 账号可授权:GRANT SELECT, INSERT, UPDATE, DELETE, INDEX, ALTER ON app_db.* TO 'dba_team'@'10.10.%.%'; —— 注意没给 DROP,删表必须走工单+二次确认流程。

  • SHOW DATABASES 权限默认对所有用户隐藏,如需显示,单独授予(但不推荐)
  • 临时查数用的账号,建议配 MAX_QUERIES_PER_HOUR 100MAX_UPDATES_PER_HOUR 0 防误操作
  • 避免在应用配置中硬编码账号密码;改用 MySQL 8.0+ 的 CACHING_SHA2_PASSWORD 插件 + 密码轮换策略

MySQL 8.0 权限模型变化带来的实操调整

MySQL 8.0 引入角色(ROLE)和动态权限(如 BACKUP_ADMIN),但角色不能替代最小权限原则——它只是批量授权的语法糖。真正关键的变化是:默认启用 sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,且 mysql.user 表结构彻底重构,旧版通过直接 UPDATE 系统表改权限的方式已失效。

这意味着你不能再靠脚本去“偷偷”更新 mysql.user,所有权限变更必须走 GRANT/REVOKE 语句,而这些语句本身会被审计日志记录(如果启用了 audit_log 插件)。

  • 创建角色示例:CREATE ROLE 'app_rw'; GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO 'app_rw';
  • 绑定用户:GRANT 'app_rw' TO 'app_user'@'10.20.%.%';,之后需执行 SET DEFAULT ROLE 'app_rw' TO 'app_user'@'10.20.%.%';
  • 动态权限如 CONNECTION_ADMIN 仅用于管理连接,不应授予应用账号
SELECT user, host, account_locked, password_last_changed 
FROM mysql.user 
WHERE user IN ('app_user', 'bi_reader');

权限分离不是加几行 GRANT 就完事,真正的难点在于持续识别“哪些权限现在看起来多余,但某天某个新功能又悄悄依赖它”。每次上线新模块前,务必重审该模块实际执行的 SQL 类型,并反向收缩账号权限。

相关专题

更多
laravel组件介绍
laravel组件介绍

laravel 提供了丰富的组件,包括身份验证、模板引擎、缓存、命令行工具、数据库交互、对象关系映射器、事件处理、文件操作、电子邮件发送、队列管理和数据验证。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

319

2024.04.09

laravel中间件介绍
laravel中间件介绍

laravel 中间件分为五种类型:全局、路由、组、终止和自定。想了解更多laravel中间件的相关内容,可以阅读本专题下面的文章。

276

2024.04.09

laravel使用的设计模式有哪些
laravel使用的设计模式有哪些

laravel使用的设计模式有:1、单例模式;2、工厂方法模式;3、建造者模式;4、适配器模式;5、装饰器模式;6、策略模式;7、观察者模式。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

370

2024.04.09

thinkphp和laravel哪个简单
thinkphp和laravel哪个简单

对于初学者来说,laravel 的入门门槛较低,更易上手,原因包括:1. 更简单的安装和配置;2. 丰富的文档和社区支持;3. 简洁易懂的语法和 api;4. 平缓的学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

371

2024.04.10

laravel入门教程
laravel入门教程

本专题整合了laravel入门教程,想了解更多详细内容,请阅读专题下面的文章。

81

2025.08.05

laravel实战教程
laravel实战教程

本专题整合了laravel实战教程,阅读专题下面的文章了解更多详细内容。

64

2025.08.05

laravel面试题
laravel面试题

本专题整合了laravel面试题相关内容,阅读专题下面的文章了解更多详细内容。

67

2025.08.05

数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

683

2023.10.12

AO3中文版入口地址大全
AO3中文版入口地址大全

本专题整合了AO3中文版入口地址大全,阅读专题下面的的文章了解更多详细内容。

1

2026.01.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 1.9万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 805人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号