问题描述
在使用宝塔面板(BT Panel)进行「同步远程数据库」操作时,数据库连接本身是正常的(在宝塔面板中可以正常连接和管理该远程数据库),但点击同步后弹出以下错误:
指定用户权限不足!
(1142, "SELECT command denied to user 'zxkh_slave'@'192.168.166.29' for table 'user'")
![图片[1]-宝塔面板同步远程数据库报错「指定用户权限不足」解决方案-龙之小站资源屋](https://www.688918.com/wp-content/uploads/2026/08/5e4f222c1920260831122757.png)
原因分析
通过 SHOW GRANTS 命令查看该用户的权限:
mysql> SHOW GRANTS FOR 'zxkh_slave'@'192.168.166.29';
+-------------------------------------------------------------------------+
| Grants for zxkh_slave@192.168.166.29 |
+-------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'zxkh_slave'@'192.168.166.29' |
| GRANT ALL PRIVILEGES ON `zxkh_slave`.* TO 'zxkh_slave'@'192.168.166.29' |
+-------------------------------------------------------------------------+
可以看到,该用户对自己的数据库 zxkh_slave 拥有 ALL PRIVILEGES,权限看似没有问题。
但关键在于:宝塔面板在执行「同步远程数据库」操作时,内部会尝试查询 MySQL 系统库中的 mysql.user 表来获取用户信息。而该用户没有对 mysql 系统库的 SELECT 权限,因此被 MySQL 拒绝,报出 1142 错误。
💡 简单来说:你的数据库账号能正常读写自己的库,但宝塔同步功能额外需要读取
mysql.user系统表,而这个权限默认是没有授予的。
解决方案
只需要给该用户授予对 mysql.user 表的 SELECT 权限即可。登录到远程数据库服务器的 MySQL 命令行,执行以下 SQL:
-- 将用户名和IP替换为你自己的
GRANT SELECT ON mysql.user TO 'zxkh_slave'@'192.168.166.29';
FLUSH PRIVILEGES;
执行完成后,回到宝塔面板重新点击「同步」,即可正常同步成功。
验证权限是否生效
可以再次查看权限确认:
mysql> SHOW GRANTS FOR 'zxkh_slave'@'192.168.166.29';
+-------------------------------------------------------------------------+
| Grants for zxkh_slave@192.168.166.29 |
+-------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'zxkh_slave'@'192.168.166.29' |
| GRANT ALL PRIVILEGES ON `zxkh_slave`.* TO 'zxkh_slave'@'192.168.166.29' |
| GRANT SELECT ON `mysql`.`user` TO 'zxkh_slave'@'192.168.166.29' |
+-------------------------------------------------------------------------+
看到第三行 GRANT SELECT ON mysql.user 就说明权限已经正确授予。
通用模板
如果你遇到同样的问题,只需将下面的命令中的用户名和IP地址替换为你自己的即可:
GRANT SELECT ON mysql.user TO '你的用户名'@'你的IP地址';
FLUSH PRIVILEGES;
在宝塔面板,修改远程数据库密码时报错:
!宝塔面板在修改远程数据库密码时,内部会执行类似 ALTER USER 或 SET PASSWORD 的命令,这些操作需要 CREATE USER 权限。
你之前的 zxkh_slave 账号只有业务库的权限 + 刚加的 mysql.user SELECT,没有管理用户的权限,所以改密码被拒绝了。
解决方案
用 root 登录远程数据库,给 zxkh_slave 加上 CREATE USER 权限:
GRANT CREATE USER ON . TO 'zxkh_slave'@'192.168.166.29';
FLUSH PRIVILEGES;
⚠️ CREATE USER 是全局权限(*.*),不能只针对某个库授予。
补充说明
- 此问题常见于 MySQL 5.7 / 8.0 + 宝塔面板 的组合环境中。
- 宝塔面板的数据库连接功能和同步功能使用的权限检查逻辑不同——连接只需要目标库的权限,而同步还需要读取
mysql.user系统表。 - 出于安全考虑,建议只授予
SELECT权限而非ALL PRIVILEGES,避免远程用户获得对系统库的写入权限。 - 如果你的数据库用户 Host 设置为
%(允许任意IP连接),则命令改为:GRANT SELECT ON mysql.user TO '用户名'@'%';
环境信息:宝塔 Linux 面板 | MySQL 5.7 / 8.0 | CentOS / Ubuntu
如果本文对你有帮助,欢迎收藏转发!如有其他问题,欢迎在评论区留言交流。

















暂无评论内容