如何将所有权限恢复到MySQL中的root用户?

Ste*_*ven 4 mysql privileges

我使用--skip-grant-tables选项登录MySQL.但我不知道如何将所有权限返回给root用户.

错误

SQL查询:

授予所有特权*.*''root'@'localhost';

MySQL说:文档

1290 - MySQL服务器正在运行--skip-grant-tables选项

它无法执行此声明

错误

SQL查询:编辑

授予所有特权*.*TO'root' @'localhost'with MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;

MySQL说:文档

1290 - MySQL服务器正在运行--skip-grant-tables选项

它无法执行此声明

Joh*_*ohn 15

对于 mysql 8.0.12+
我试过文档(不工作)我试过各种其他选项,都失败了。

PASSWORD()已弃用,SET PASSWORD已禁用,ALTER USER也已禁用。

  1. 停止mysql服务
  2. 以这种方式开始: /usr/local/mysql/bin/mysqld_safe --skip-grant-tables
  3. 登录(mysql)并执行: update user set authentication_string='' where User='root';
  4. killall mysqld
  5. 再次启动服务

现在您可以使用set passwordalter user无需密码登录后

  • 我收到“未选择数据库”错误。 (3认同)
  • 这就是答案!为什么 PASSWORD() 被弃用了?这么奇怪。 (2认同)
  • @mrinson,我在 MySQL 中注意到的奇怪事情的数量是巨大的。事实是,它没有经过专业维护,而是数百个丑陋黑客的组合。INNODB计数很慢,因为mysql只使用一个线程,处理周期延迟很大,解决方案是什么?他们发明了一个复杂的结果缓存。使用 Mysql 8,他们删除了缓存(破坏了数万个应用程序)并发明了多线程,但是多线程仅用于没有 WHERE 的查询,因此仅用于计数。我可以举出无数这样的例子,它是由“代码黑客”维护的 (2认同)

cyb*_*b0k 7

如果您无法以root身份访问mysql服务器,则应删除或无法恢复mysql.user表中的所有根记录,删除所有根记录并添加新记录.

您应该使用mysql PASSWORD()函数来散列您的明文密码.查看更多信息http://dev.mysql.com/doc/refman/5.1/en/password-hashing.html

首先停止mysql服务器并使用--skip-grant-tables启动mysqld.

[root@mysql ~]# service mysqld stop; mysqld_safe --skip-grant-tables &
Run Code Online (Sandbox Code Playgroud)

哈希你的明文密码.

mysql> select PASSWORD('CLEARTEXT_PASSWORD');
+-------------------------------------------+
| PASSWORD('CLEARTEXT_PASSWORD')            |
+-------------------------------------------+
| *1EADAEB11872E413816FE51216C9134766DF39F9 |
+-------------------------------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

使用mysql数据库应用更改.

mysql> use mysql;
Run Code Online (Sandbox Code Playgroud)

删除所有根记录

mysql> delete from user where User='root';
Run Code Online (Sandbox Code Playgroud)

添加root用户可以使用ip地址的所有权限访问的新记录.

mysql> insert into `user` VALUES('YOUR_IP_ADDRESS','root','*1EADAEB11872E413816FE51216C9134766DF39F9','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','Y','Y','Y','','','','',0,0,0,0,'','');
Run Code Online (Sandbox Code Playgroud)

刷新变化.

mysql> FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)

退出mysql命令行.

mysql> exit;
Run Code Online (Sandbox Code Playgroud)

重启mysqld服务.

[root@mysql ~]# /etc/init.d/mysqld restart
Run Code Online (Sandbox Code Playgroud)

如果你运行这个mysql命令/查询,你将获得对mysql服务器的新访问权限.

  • 选择密码('CLEARTEXT_PASSWORD');ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在第 1 行“('CLEARTEXT_PASSWORD')”附近使用的正确语法 (2认同)

Man*_*Ali 6

首先,停止 MySQL 服务器,然后使用--skip-grant-tables选项启动它。

[root@backups1 mysql5.7]# /etc/init.d/mysqld stop
[root@backups1 mysql5.7]# /usr/local/mysql/bin/mysqld_safe --skip-grant-tables --user=mysql
Run Code Online (Sandbox Code Playgroud)

然后,无需密码即可连接到您的实例:

[root@backups1 mysql5.7]# mysql -u root
Run Code Online (Sandbox Code Playgroud)

然后,重置 root 用户的密码。

mysql> flush privileges;
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '';
mysql> flush privileges;
Run Code Online (Sandbox Code Playgroud)

切换到 MySQL 的正常模式,然后无需密码即可连接。


Rag*_*geZ 5

当你运行mysql时,使用--skip-grant-tablesmysql不会检查任何权限。所以基本上你可以做任何事情。

要恢复 root 权限,您需要mysql像这样在数据库中运行查询

select * from user where user = 'root'
Run Code Online (Sandbox Code Playgroud)

只是为了检查 root 用户是否仍然存在:

UPDATE user SET Grant_priv = 1, Super_priv = 1 WHERE user = 'root'
Run Code Online (Sandbox Code Playgroud)

在您可以重新启动 mysql 之后,--skip-grant-tablesroot 用户应该能够执行一些授予操作,这样您的查询就可以工作

  • 在 MariaDb 中,正确的语句是“UPDATE user SET Grant_priv = 'Y', Super_priv = 'Y' WHERE user = 'root'”,因为它使用 ENUM ('Y', 'N')。您的原始版本已执行,但表“Y”/“N”中的值未更新,但这个小修改成功了。 (2认同)

Ale*_*lli -10

要运行GRANT查询,您只需运行 mysql skip-grant-tables- 这有什么复杂的......?

  • 他需要获得root权限。 (6认同)
  • 看来他忘记了 root 用户的密码。 (3认同)