如何修复MySQL中root用户不小心删除了自身GRANT权限的灾难?

2026-07-09数据库177584

root登录正常但GRANT报错1142,说明Grant_priv为'N',需UPDATE mysql.user设为'Y'并FLUSH PRIVILEGES;若权限全无,则用其他管理员账号重授最小必要权限;若完全无法登录,须--skip-grant-tables启动后修复plugin与密码配对。

root能登录但GRANT报错ERROR 1142

说明mysql.user表里Grant_priv字段被设成了'N'或空值,认证没问题,只是授权开关关了。别急着重建用户,先查状态:
SELECT User, Host, Grant_priv, Super_priv FROM mysql.user WHERE User = 'root';
如果Grant_priv'N',直接更新:
UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root' AND Host IN ('localhost', '%');
必须执行:
FLUSH PRIVILEGES;
验证是否生效:
SHOW GRANTS FOR 'root'@'localhost';应该能看到GRANT OPTION

root能登录但连mysql库都进不去

报错ERROR 10441142,说明权限字段大面积为空或为'N',但身份认证仍通——你得靠另一个有GRANT OPTION的账号救场。
用其他管理员账号登录:
mysql -u admin_user -p
确认root账户存在:
SELECT User, Host FROM mysql.user WHERE User = 'root';
重新授予最小必要权限(别直接GRANT ALL):
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
漏掉这步就白干:
FLUSH PRIVILEGES;

所有root账户完全无法登录(ERROR 1045或连接拒绝)

这时已无高权限入口,必须用--skip-grant-tables启动MySQL,但操作链极容易断在三个地方:
• 启动后没第一时间执行FLUSH PRIVILEGES;,后续UPDATEGRANT全报错
• MySQL 8.0+ 必须显式设置plugin字段,否则登录失败:
UPDATE mysql.user SET plugin='mysql_native_password', authentication_string=PASSWORD('your_new_pass') WHERE User='root' AND Host='localhost';
Host不匹配:'root'@'127.0.0.1''root'@'localhost'是两个不同账户,更新时要覆盖全部常见host('localhost''127.0.0.1''%'
启动命令示例(Linux):
sudo mysqld --skip-grant-tables --skip-networking &
登录后第一件事:
FLUSH PRIVILEGES;
再查用户:
SELECT User, Host FROM mysql.user WHERE User = 'root';
逐条更新权限字段或直接GRANT(8.0+推荐用GRANT,避免手动填几十个_priv字段)

修复后仍无法用新密码登录

常见于MySQL 8.0+,根本原因是客户端默认使用caching_sha2_password插件,而你手动设的密码没绑定对应插件。
必须显式指定插件:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
或者创建时就定死:
CREATE USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
别信“改完密码就能登”,pluginauthentication_string必须配对生效;FLUSH PRIVILEGES;之后,务必用mysql -u root -p实测,别只看SHOW GRANTS返回正常就以为完事

本文地址:https://www.ufcn.cn/article/2431602.html

如非特殊说明,本站内容均来自于网友自主分享,概不代表本站观点,如有任何问题我们都将在收到反馈后的第一时间进行处理!