如何获得所有权限回在MySQL的root用户?

问题描述 投票:4回答:6

我已经登录到MySQL与使用--skip-grant-tables选项。但我不知道如何让所有特权回root用户。

错误

SQL查询:

GRANT ALL PRIVILEGES ON *。 * TO '根' @ '本地主机';

MySQL表示:文档

1290 - The MySQL server is running with the --skip-grant-tables option so

它不能执行该语句

错误

SQL查询:编辑

GRANT ALL PRIVILEGES ON *。 * TO '根' @ '本地主机' WITH MAX_QUERIES_PER_HOUR 0 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS;

MySQL表示:文档

1290 - The MySQL server is running with the --skip-grant-tables option so

它不能执行该语句

mysql privileges
6个回答
6
投票

如果您无法访问MySQL服务器的根,你应该删除或mysql.user表不能恢复所有根的记录,全部删除,并添加一个新的记录。

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

第一站MySQL服务器并启动mysqld的用--skip-赠款表。

[root@mysql ~]# service mysqld stop; mysqld_safe --skip-grant-tables &

哈希您的明文密码。

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

使用MySQL数据库应用更改。

mysql> use mysql;

删除所有记录根

mysql> delete from user where User='root';

添加新的记录是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,'','');

同花顺的变化。

mysql> FLUSH PRIVILEGES;

退出mysql命令行。

mysql> exit;

重新启动mysqld服务。

[root@mysql ~]# /etc/init.d/mysqld restart

如果你运行这个的MySQL命令/查询,你会得到MySQL服务器的新的接入。


3
投票

首先,停止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

然后,连接到您的实例没有密码:

[root@backups1 mysql5.7]# mysql -u root

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

mysql> flush privileges;
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '';
mysql> flush privileges;

切换到MySQL的正常模式,则连接而无需密码。


2
投票

对于MySQL 8.0.12+ 我试过的文档(不工作),我已经试过各种其他的选择,都以失败告终。

PASSWORD()已过时,SET PASSWORD被禁用,ALTER USER也被禁用。 1.停止mysql服务 2.启动它是这样的:在/ usr /本地/ MySQL的/斌/ mysqld_safe的--skip-赠款表 3.登录(MySQL的)和exec:更新用户集合authentication_string = '',其中 用户=“根”; 4. killall mysqld的 5.再次启动服务

现在你可以使用“设置密码”或“更改用户”密码之内登录后


1
投票

当您使用--skip-grant-tables MySQL将不检查任何权限运行mysql。所以基本上你可以做任何事情。

找回root权限,您将需要在mysql DB运行这样的查询

select * from user where user = 'root'

只是为了检查root用户仍然存在,如果确定:

UPDATE user SET Grant_priv = 1, Super_priv = 1 WHERE user = 'root'

之后重新启动mysql的不--skip-grant-tables和root用户应该能够做一些补助,以便您的查询应该工作


1
投票

如果您--skip-赠款表的目标是插入一个新的授权,可以通过插入在mysql.user行这样做(见其他答案)

如果你的挑战是在给这个新授予所有必需的权限(许多Y / N colums),那么您可以复制现有的根授权。而且,只有您所需要的调整。

CREATE TEMPORARY TABLE mysql.tmpUser SELECT * FROM mysql.user WHERE host="old" and user="root";
UPDATE mysql.tmpUser SET host="new" WHERE user = "root";
INSERT INTO mysql.user SELECT * FROM mysql.tmpUser;

-8
投票

要运行GRANT查询,你只是不skip-grant-tables运行mysql - 有什么复杂有关......?

© www.soinside.com 2019 - 2024. All rights reserved.