2009-11-11 105 views
3

我已經登錄到MySQL與使用--skip-grant-tables選項。但我不知道如何將所有權限返回給root用戶。如何將所有權限返回給MySQL中的root用戶?

錯誤

SQL查詢:

GRANT ALL PRIVILEGES ON *。 *到 'root'@'localhost';

MySQL表示:文件

1290 - MySQL服務器與使用--skip-grant-tables選項運行,以便

它不能執行該語句

錯誤

SQL查詢:編輯

GRANT ALL PRIVILEGES ON *。 *到 '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選項運行,以便

它不能執行該語句

+1

人們似乎在這個問題/答案http://stackoverflow.com/questions/1709078/how-can-i-restore-the-mysql-root-users-full-privileges – 2009-11-11 03:27:29

回答

1

要運行GRANT查詢,你只是運行MySQL與skip-grant-tables - 什麼複雜有關......?

+2

的解決方案,他需要獲得root權限。 – RageZ 2009-11-11 03:38:27

+0

...所以他不應該使用'skip-grant-tables' - 爲什麼他會想要那個_和''GRANT'?雖然我承認你的方法也適用。 – 2009-11-11 04:05:17

+3

他似乎忘記了root用戶的密碼。 – bluszcz 2014-02-12 12:57:36

1

當你運行MySQL使用--skip-grant-tables MySQL將不檢查任何權限。所以基本上你可以做任何事情。

要回來,你就需要在mysql數據庫運行查詢像這樣

select * from user where user = 'root' 

的root權限只是爲了檢查是否root用戶仍然有 如果確定:

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

你可以重啓MySQL後沒有--skip-grant-tables和root用戶應該能夠做一些補助,以便查詢應該工作

4

如果你無法訪問mysql服務器作爲根目錄,你應該刪除或不能恢復mysql.user表中的所有根記錄,刪除所有這些記錄並添加一條新記錄。

你應該使用mysql PASSWORD()函數來散列您的明文密碼。 查看更多信息http://dev.mysql.com/doc/refman/5.1/en/password-hashing.html

首先停止mysql服務器並使用--skip-grant-tables啓動mysqld。

[[email protected] ~]# 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服務。

[[email protected] ~]# /etc/init.d/mysqld restart 

如果你運行這個mysql命令/ queries,你會得到一個新的訪問mysql服務器。

+0

如果插入操作難以匹配所需的權限列,請參閱下面的答案。複製現有行,如果您只需要一個新的Grant,例如另一個允許主機列。 – user18099 2016-11-04 09:49:04

1

首先,停止MySQL服務器,然後用--skip-grant-tables選項啓動它。

[[email protected] mysql5.7]# /etc/init.d/mysqld stop 
[[email protected] mysql5.7]# /usr/local/mysql/bin/mysqld_safe --skip-grant-tables --user=mysql 

然後,連接到您的實例沒有密碼:

[[email protected] mysql5.7]# mysql -u root 

然後,重置root用戶的密碼。

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

轉爲的MySQL正常模式然後連接不需要密碼。

0

如果您--skip-贈款表的目標是插入一個新的授權,可以通過插入在mysql.user行這樣做(見其他答案)

如果你的挑戰是在給這個新授予所有必需的特權(許多Y/N列),然後您可以複製現有的根授予。並只調整你所需要的。

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; 
相關問題