CentOS7部署的OTRS6修改域名后访问报数据库权限错误如何解决
问题根因
该报错的本质是MySQL/MariaDB的连接授权校验逻辑触发了拦截。OTRS 6在初始化安装时,会自动创建专用于连接数据库的otrs数据库用户,这个用户的授权规则是绑定安装当时的主机名test.domain.local生成的;修改系统主机名为ticket.domain.com后,本机OTRS进程发起数据库连接时,上报给数据库的客户端主机标识已经变成了新值,数据库端没有匹配这个新值的授权记录,就会抛出访问拒绝的报错。单纯修改ZZZAAuto.pm里的数据库连接参数,无法覆盖数据库层面的授权规则校验,因此问题无法解决。
前期排查验证
- 以root身份登录MySQL/MariaDB,查询当前otrs用户的所有授权匹配条目,执行命令:
mysql -u root -p -e "SELECT user, host FROM mysql.user WHERE user='otrs';" - 正常场景下的输出会显示现存的授权host值为旧主机名
test.domain.local,不存在对应新主机名ticket.domain.com的匹配条目,和报错触发逻辑完全吻合。
具体解决操作
方案1:新增匹配新主机名的授权(与原安全配置一致,推荐)
- 登录数据库执行授权语句,将OTRS对应库表的操作权限授权给从新主机名发起连接的otrs用户,语句中的密码需要和当前
ZZZAAuto.pm里配置的otrs数据库密码完全一致:GRANT ALL PRIVILEGES ON otrs.* TO 'otrs'@'ticket.domain.com' IDENTIFIED BY 'ZZZAAuto.pm中配置的otrs数据库密码'; - 授权完成后刷新数据库权限缓存,让配置即时生效:
FLUSH PRIVILEGES;
方案2:修改原有授权条目的匹配值,兼容现有配置
如果不想新增授权条目,可以直接把旧主机名绑定的授权记录替换为新主机名值,执行命令:UPDATE mysql.user SET Host='ticket.domain.com' WHERE User='otrs' AND Host='test.domain.local';
执行完成后同样需要运行FLUSH PRIVILEGES;刷新权限缓存。
收尾配置校验
- 确认OTRS配置文件的所属用户和组正确,CentOS7环境下OTRS默认关联Web运行用户为apache,执行:
chown otrs:apache /opt/otrs/Kernel/Config/Files/ZZZAAuto.pm - 清理OTRS本地缓存,避免旧连接配置残留:
rm -rf /opt/otrs/var/cache/* - 切换到otrs用户执行内置数据库连通性检测,排除其他配置偏差:
su - otrs -c "/opt/otrs/bin/otrs.Console.pl Maint::Database::Check" - 检查数据库配置是否开启了
skip_name_resolve参数,如果开启该参数,数据库会跳过主机名解析环节直接通过IP匹配授权规则,主机名维度的授权会完全失效。此时可以选择临时关闭该参数,或者给服务器本机IP新增对应otrs用户的授权条目。 - 校验/etc/hosts配置,确保新主机名
ticket.domain.com对应的IP和服务器实际网卡IP、回环地址绑定正确,避免OTRS发起连接时上报的主机名和数据库授权的匹配值不一致:执行hostname确认返回值为ticket.domain.com,执行hostname -i确认返回的IP和/etc/hosts里对应主机名的条目匹配。
内容的提问来源于stack exchange,提问作者Moreno
相关产品推荐
相关产品推荐

