如何恢复MySQL root用户的完全权限?

时间:2009-11-10 16:07:11

标签: mysql privileges mysql-error-1045

我不小心从MySQL root用户那里删除了一些权限,包括改变表的能力。有什么方法可以将此用户恢复到原始状态(具有所有权限)?

UPDATE mysql.user SET Grant_priv = 'Y', Super_priv = 'Y' WHERE User = 'root';
# MySQL returned an empty result set (i.e. zero rows).
FLUSH PRIVILEGES ;
# MySQL returned an empty result set (i.e. zero rows).


#1045 - Access denied for user 'root'@'localhost' (using password: YES)
GRANT ALL ON *.* TO 'root'@'localhost'

8 个答案:

答案 0 :(得分:140)

如果GRANT ALL不起作用,请尝试:

  1. 停止mysqld并使用--skip-grant-tables选项重新启动它。
  2. 仅使用mysqld连接到mysql服务器(即没有-p选项,可能不需要用户名。)
  3. 在mysql客户端中发出以下命令:

    UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';

    FLUSH PRIVILEGES;

  4. 之后,您应该能够运行GRANT ALL ON *.* TO 'root'@'localhost';并使其正常运行。

答案 1 :(得分:83)

如果您错误地删除了root用户,则可以执行以下操作:

  1. 停止MySQL服务
  2. 运行mysqld_safe --skip-grant-tables &
  3. 输入mysql -u root -p并按Enter键。
  4. 输入您的密码
  5. 在mysql命令行输入:use mysql;
  6. 然后执行此查询:

    insert into `user` (`Host`, `User`, `Password`, `Select_priv`, `Insert_priv`, `Update_priv`, `Delete_priv`, `Create_priv`, `Drop_priv`, `Reload_priv`, `Shutdown_priv`, `Process_priv`, `File_priv`, `Grant_priv`, `References_priv`, `Index_priv`, `Alter_priv`, `Show_db_priv`, `Super_priv`, `Create_tmp_table_priv`, `Lock_tables_priv`, `Execute_priv`, `Repl_slave_priv`, `Repl_client_priv`, `Create_view_priv`, `Show_view_priv`, `Create_routine_priv`, `Alter_routine_priv`, `Create_user_priv`, `ssl_type`, `ssl_cipher`, `x509_issuer`, `x509_subject`, `max_questions`, `max_updates`, `max_connections`, `max_user_connections`) 
    values('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','','0','0','0','0');
    

    然后重启mysqld

    编辑:2018年10月6日

    如果其他人需要这个答案,我今天使用 innodb_version 5.6.36-82.0 10.1.24-MariaDB 进行了尝试,如果你删除了背景,它就有用了(也没有单引号,只需删除它们):

    insert into user (Host, User, Password, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Process_priv, File_priv, Grant_priv, References_priv, Index_priv, Alter_priv, Show_db_priv, Super_priv, Create_tmp_table_priv, Lock_tables_priv, Execute_priv, Repl_slave_priv, Repl_client_priv, Create_view_priv, Show_view_priv, Create_routine_priv, Alter_routine_priv, Create_user_priv, ssl_type, ssl_cipher, x509_issuer, x509_subject, max_questions, max_updates, max_connections, max_user_connections) 
    values('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','','0','0','0','0');
    

答案 2 :(得分:23)

当我是root用户时,我还删除了root和数据库中未显示的权限,因此用mysql>mysql -u 'userName' -p;和密码更改了用户;

UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';

FLUSH PRIVILEGES;

在此命令之后,它将以root身份显示数据库。

由于

答案 3 :(得分:5)

GRANT ALL ON *.* TO 'user'@'localhost' with GRANT OPTION;

只需使用相应的密码从root用户登录(如果有的话),只需将上述命令运行到用户的任何位置即可。

例如:

GRANT ALL ON *.* TO 'root'@'%' with GRANT OPTION;

答案 4 :(得分:2)

只需在每个列权限中插入或更新值为mysql.user的{​​{1}}。

同上。

完整答案:http://www.myee.web.id/?p=869

答案 5 :(得分:2)

如果您在本地计算机上使用WAMP(mysql版本5.7.14) 第1步:打开my.ini文件 第2步:通过删除分号取消注释此行'skip-grant-tables' 第3步:重启mysql服务器 第4步:启动mySQL控制台 第5步:

UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';
FLUSH PRIVILEGES;

第6步:问题解决了!!!!

答案 6 :(得分:1)

我拒绝了对root的插入和重新加载权限。因此,在更新权限后,FLUSH PRIVILEGES无法正常工作(由于缺少重新加载权限)。所以我在Ubuntu 16.04上使用了debian-sys-maint用户来恢复user.root权限。您可以从此文件中找到user.debian-sys-maint的密码

sudo cat /etc/mysql/debian.cnf

答案 7 :(得分:0)

  1. “ sudo cat /etc/mysql/debian.cnf”使用debian-sys-maint用户
  2. 通过该用户通过“ mysql -u saved-username -p;”登录,然后输入保存的密码。
  3. mysql> UPDATE mysql.user SET Grant_priv ='Y',Super_priv ='Y'WHERE User ='root';
  4. mysql>冲洗特权;
  5. mysql>退出
  6. 重启 谢谢