mysql高并发下如何安全管理权限_MySQL读写分离权限配置

阿磊大大_5182

阿磊大大_5182

2026-03-21

535人浏览

原创

应为主库配置仅写权限账号(如app_rw)、从库配置仅读权限账号(如app_ro),二者账号、密码、授权范围严格分离,且replication用户仅需replication slave权限,禁用super等高危权限。

mysql高并发下如何安全管理权限_mysql读写分离权限配置

主库只给写权限,从库只给读权限怎么配

MySQL 读写分离场景下,最基础的安全动作就是让应用连接不同实例时,天然只能执行对应操作。不是靠代码自觉,而是靠权限卡死。

常见错误是给同一个账号在主从上都开 SELECT、INSERT、UPDATE 全量权限,结果从库被误写入,binlog 错乱,复制中断。

  • 主库上只授予写权限:GRANT INSERT, UPDATE, DELETE, CREATE, DROP, ALTER ON *.* TO 'app_rw'@'10.20.%';
  • 从库上只授予读权限:GRANT SELECT, SHOW VIEW ON *.* TO 'app_ro'@'10.20.%';
  • 两个账号密码必须不同,避免配置错连后越权;且 app_ro 不要在主库创建,app_rw 不要在从库创建
  • 注意:MySQL 权限是按 host + user 组合判定的,所以 'app_rw'@'10.20.%' 和 'app_rw'@'192.168.%' 是两个独立账号,别漏掉网段

replication 用户要不要开 SUPER 权限

不要。5.7+ 版本中,REPLICATION SLAVE 权限已足够让从库拉取 binlog,SUPER 是高危权限,能 kill 线程、修改全局变量、绕过 max_connections 限制等。

典型错误是沿用老教程,直接 GRANT ALL PRIVILEGES ON *.* TO 'repl'@'%' WITH GRANT OPTION;,这等于把主库 root 的一半钥匙交出去了。

  • 正确做法:CREATE USER 'repl'@'10.20.%' IDENTIFIED BY 'xxx'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.20.%';
  • 如果用的是 MySQL 8.0+,记得用 caching_sha2_password 插件(默认),客户端需支持,否则连不上
  • 该账号只用于主从同步,不给应用代码使用,也不加到任何连接池配置里

应用层读写分离后,权限校验还生效吗

生效,但只在校验连接建立那一刻。MySQL 不会动态感知你这条 SQL 是发给主库还是从库——它只看你当前连接用的是哪个账号、连的是哪台实例。

MySQL
MySQL

编写正确的MySQL查询,避免字符集、索引和锁方面的常见陷阱。

下载

容易踩的坑是以为“用了 ShardingSphere 或 MyCat 就自动隔离权限”,其实这些中间件只是路由,底层仍是普通连接。一旦路由出错(比如强制走从库执行 UPDATE),而从库账号又恰好有写权限,就全完了。

  • 务必在每台数据库实例上单独管理账号权限,不依赖中间件兜底
  • 测试阶段用 SELECT USER(), CURRENT_USER(); 确认应用实际连的是哪个账号
  • 从库账号禁止授予 LOCK TABLES、PROCESS、RELOAD 等运维类权限,这些和只读目标无关,反而增加攻击面

高并发下权限变更会不会锁表或影响性能

不会锁业务表,但会短暂阻塞新连接建立,且权限变更本身是同步操作,主从延迟会导致权限不一致。

比如你在主库改了 app_rw 的密码,从库没同步完之前,新连主库的请求用新密码,连从库的还用旧密码——如果应用连接池混用,就会出现部分连接失败。

  • 权限变更(GRANT/REVOKE/ALTER USER)会刷新 mysql.user 表,并触发权限重载,耗时微秒级,但期间新建连接可能拿到旧缓存
  • 生产环境建议在低峰期批量操作,避免高频 FLUSH PRIVILEGES(其实 GRANT 后自动触发,不用手动)
  • 更稳妥的做法:新增账号(如 app_rw_v2),切流量后再删旧账号,规避中间态风险

权限这事,表面是 GRANT 一行命令,实际是主从拓扑、连接路由、账号生命周期三者咬合的结果。少一个环节对齐,高并发下暴露的就是放大后的权限越界。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

mysql

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

2023.06.20

2133

6

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

2023.06.21

1299

5

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.18

755

5

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.19

2872

5

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.25

4808

4

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2023.08.08

1099

3

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.11

5071

4

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

2023.08.14

4482

7

mysql事务隔离级别
mysql事务隔离级别

mysql规范中定义了四种事务隔离级别,不同的隔离级别对事务的处理有所不同。本专题为大家提供mysql事务隔离级别相关的文章内容,大家可以免费体验。

2023.08.16

5894

11

热门下载

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

精品课程

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

共1课时 | 181人学习

使用phpenv集成环境安装极致CMS
使用phpenv集成环境安装极致CMS

共2课时 | 289人学习