ProxySQL不自动继承MySQL权限,需手动配置mysql_users表(password用哈希值、default_hostgroup指向真实hostgroup、active=1)、执行LOAD/SAVE同步,并通过mysql_query_rules实现SQL级拦截;不支持PROXY用户透传。
ProxySQL 本身不继承 MySQL 后端权限,所谓“中间件层权限路由”不是自动映射,而是靠你手动把用户、密码、默认路由组、SQL 拦截规则四者配齐,缺一不可。
mysql
_users 表必须填对 password 和 default_hostgroup
直接连 ProxySQL 报
,但连后端 MySQL 没问题?大概率是
表里填错了这两项:
字段不能填明文——MySQL 5.7+ 要用
哈希值(如
);MySQL 8.0+ 默认用
,而 ProxySQL 只认
,得先在后端执行:
必须指向一个真实存在的
(查
或
确认),否则认证成功也会在路由阶段静默失败,日志只显示模糊的
账号状态必须是
,否则 ProxySQL 直接忽略该记录
LOAD 和 SAVE 必须成对执行,否则重启就丢
改完
后,仅执行
不生效。ProxySQL 的三层配置模型(
/
/
)决定了你必须显式同步:
MySQL(Linux)
MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。
下载
:让新配置立即生效,影响当前连接
:写入
SQLite 文件,保证重启不丢失
漏掉任一环节,要么不生效,要么重启后恢复旧配置
权限路由 ≠ 权限下放,SQL 级拦截得靠 mysql_query_rules
仅靠
只能控制“默认发往哪组”,无法实现“只允许 SELECT、禁止 DROP”。真要限制操作类型,必须配
:
用
匹配语句模式,比如
或
用
显式指定目标组(覆盖
)
用
拦截并返回自定义错误,例如:
规则顺序很重要:
表示匹配后终止匹配,
继续往下比;务必把精确规则放前面
别指望 ProxySQL 做 PROXY 用户透传
想让应用统一用
连 ProxySQL,再由 ProxySQL 根据实际操作人身份走不同后端权限?这超出了 ProxySQL 能力范围。它不解析客户端连接时带的
用户信息,也不转发
上下文。这类需求必须回到 MySQL 原生机制:
+
,并在后端开启
,ProxySQL 只负责原样透传连接。
Access deniedmysql_userspasswordauthentication_string*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9caching_sha2_passwordmysql_native_passwordALTER USER 'xxx'@'%' IDENTIFIED WITH mysql_native_password BY 'pwd'default_hostgrouphostgroup_idmysql_server_groupsmysql_serversConnection refusedactive = 1mysql_usersINSERTRUNTIMEMEMORYDISKLOAD MYSQL USERS TO RUNTIMESAVE MYSQL USERS TO DISKproxysql.dbmysql_users.default_hostgroupmysql_query_rulesmatch_digest'^SELECT ''^INSERT 'destination_hostgroupdefault_hostgrouperror_msginsert into mysql_query_rules(rule_id,active,match_digest,error_msg,apply) values(1000,1,'^DROP ','Operation not allowed',1)apply=1apply=0app_userPROXYCURRENT_USER()CREATE PROXY userGRANT PROXY ON ...check_proxy_users