恢复 MySQL 用户权限,核心是重新授予缺失的权限,并确保权限生效。关键在于确认用户是否存在、权限是否被误删、以及是否执行了
FLUSH PRIVILEGES。
检查当前用户及权限状态
以高权限账号(如 root)登录 MySQL,先确认目标用户是否存在,及其当前拥有的权限:
查看所有用户:SELECT User, Host FROM mysql.user;查看指定用户的权限:
SHOW GRANTS FOR 'username'@'host';(例如
SHOW GRANTS FOR 'appuser'@'localhost';) 若提示“ERROR 1141 (42000): There is no such grant defined for user...”,说明该用户无任何显式授权,可能被清空或未创建
重建用户并授予权限
如果用户已被删除或权限全失,需重新创建并授权:
创建用户(如不存在):CREATE USER 'username'@'host' IDENTIFIED BY 'password';授予权限(按需调整):
• 所有库所有表所有权限:
GRANT ALL PRIVILEGES ON *.* TO 'username'@'host';
• 指定数据库(如 db_app):
GRANT SELECT, INSERT, UPDATE ON db_app.* TO 'username'@'host';
• 刷新权限表:
FLUSH PRIVILEGES;
修复因权限表损坏导致的异常
极少数情况下,
mysql.user或
mysql.db表结构或数据损坏,会导致权限失效: 检查系统表完整性:
mysqlcheck -u root -p --repair mysql若发现权限列值为
NULL或空字符串,可手动更新(慎用):
UPDATE mysql.user SET Select_priv='Y', Insert_priv='Y' WHERE User='username' AND Host='host';
更新后必须执行
FLUSH PRIVILEGES;
验证权限是否生效
退出并用目标用户重新登录,测试关键操作:
连接成功:mysql -u username -p -h localhost尝试查询:
SHOW DATABASES;(看是否能看到授权库) 切换到目标库后执行:
SELECT COUNT(*) FROM some_table;若仍报
Access denied,检查 host 匹配(如 '%', 'localhost', '192.168.1.%' 是否一致)
