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 报 Access denied,但连后端 MySQL 没问题?大概率是 mysql_users 表里填错了这两项:
-
password字段不能填明文——MySQL 5.7+ 要用authentication_string哈希值(如*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9);MySQL 8.0+ 默认用caching_sha2_password,而 ProxySQL 只认mysql_native_password,得先在后端执行:ALTER USER 'xxx'@'%' IDENTIFIED WITH mysql_native_password BY 'pwd' -
default_hostgroup必须指向一个真实存在的hostgroup_id(查mysql_server_groups或mysql_servers确认),否则认证成功也会在路由阶段静默失败,日志只显示模糊的Connection refused - 账号状态必须是
active = 1,否则 ProxySQL 直接忽略该记录
LOAD 和 SAVE 必须成对执行,否则重启就丢
改完 mysql_users 后,仅执行 INSERT 不生效。ProxySQL 的三层配置模型(RUNTIME / MEMORY / DISK)决定了你必须显式同步:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
-
LOAD MYSQL USERS TO RUNTIME:让新配置立即生效,影响当前连接 -
SAVE MYSQL USERS TO DISK:写入proxysql.dbSQLite 文件,保证重启不丢失 - 漏掉任一环节,要么不生效,要么重启后恢复旧配置
权限路由 ≠ 权限下放,SQL 级拦截得靠 mysql_query_rules
仅靠 mysql_users.default_hostgroup 只能控制“默认发往哪组”,无法实现“只允许 SELECT、禁止 DROP”。真要限制操作类型,必须配 mysql_query_rules:
- 用
match_digest匹配语句模式,比如'^SELECT '或'^INSERT ' - 用
destination_hostgroup显式指定目标组(覆盖default_hostgroup) - 用
error_msg拦截并返回自定义错误,例如:insert into mysql_query_rules(rule_id,active,match_digest,error_msg,apply) values(1000,1,'^DROP ','Operation not allowed',1) - 规则顺序很重要:
apply=1表示匹配后终止匹配,apply=0继续往下比;务必把精确规则放前面
别指望 ProxySQL 做 PROXY 用户透传
想让应用统一用 app_user 连 ProxySQL,再由 ProxySQL 根据实际操作人身份走不同后端权限?这超出了 ProxySQL 能力范围。它不解析客户端连接时带的 PROXY 用户信息,也不转发 CURRENT_USER() 上下文。这类需求必须回到 MySQL 原生机制:CREATE PROXY user + GRANT PROXY ON ...,并在后端开启 check_proxy_users,ProxySQL 只负责原样透传连接。


















