You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MariaDB 10.2.27中init_connect对单个用户不生效问题求助

MariaDB init_connect对特定用户不生效排查与解决方案

核心原因

你当前的存储过程和init_connect配置本身没有语法问题,对普通用户生效说明配置逻辑正确。异常只针对特定用户的核心原因是:MariaDB/MySQL内置机制会跳过SUPER权限用户的init_connect逻辑执行,目的是避免错误的init_connect配置导致管理员完全无法登录数据库。你提到的用户大概率被误授予了SUPER权限,而非仅持有REPLICATION CLIENT权限。

排查步骤

  • 核查用户实际权限,执行如下命令,检查返回结果是否包含SUPER权限:
SHOW GRANTS FOR '异常用户名'@'该用户登录的主机地址';
  • 若确认无SUPER权限,临时开启通用日志抓连接流程,确认是否调用存储过程、是否有执行报错:
-- 开启通用日志,注意替换日志路径为你服务器的合法路径
SET GLOBAL general_log = 'ON';
SET GLOBAL general_log_file = '/data/mysql/general_conn.log';

测试完成后及时关闭日志避免占用磁盘:SET GLOBAL general_log = 'OFF';

  • 检查test.tracking表的主键规则,你的存储过程使用了ON DUPLICATE KEY UPDATE逻辑,若主键仅设置了user字段,同用户多主机登录会更新原有记录,不会生成新行,可排查是否存在被覆盖的情况。

修复方案

  • 若确认用户持有多余的SUPER权限,直接回收即可:
REVOKE SUPER ON *.* FROM '异常用户名'@'该用户登录的主机地址';
FLUSH PRIVILEGES;

回收后init_connect会对该用户正常生效,连接记录会写入test.tracking表。

  • 若该用户业务必须保留SUPER权限,则无法通过init_connect实现审计,可改用MariaDB内置审计插件,开启连接日志功能,该方式不受用户权限限制,可覆盖所有用户的连接行为审计。
  • 若排查为存储过程执行报错,确认存储过程DEFINER用户对test.tracking表有INSERT、UPDATE权限即可,由于你配置了SQL SECURITY DEFINER,无需给登录用户单独授权表权限。

内容的提问来源于stack exchange,提问作者Prabhakar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 03:48:03