2011-04-05 103 views
206

我似乎無法重新創建我已刪除的簡單用戶,即使在MySQL中也是如此。錯誤1396(HY000):操作CREATE USER失敗'jack'@'localhost'

我的情況:用戶'傑克'存在之前,但我刪除它從mysql.user爲了重新創建它。我在這張桌子裏看不到這種痕跡。如果我對一些其他隨機用戶名(如'jimmy')執行此命令,它可以正常工作(就像它最初爲'jack'所做的那樣)。

我做了什麼來損壞用戶'jack',以及如何取消該損壞以重新創建'jack'作爲這個MySQL安裝的有效用戶?

請參閱下面的示例。 (當然,最初,有創造「傑克和他的去除之間的時間。)

mysql> CREATE USER 'jack'@'localhost' IDENTIFIED BY 'test123'; 
Query OK, 0 rows affected (0.00 sec) 

mysql> select user,host from user; 
+------------------+-----------------+ 
| user    | host   | 
+------------------+-----------------+ 
| root    | 127.0.0.1  | 
| debian-sys-maint | localhost  | 
| jack    | localhost  | 
| root    | localhost  | 
| root    | russ-elite-book | 
+------------------+-----------------+ 
5 rows in set (0.00 sec) 

mysql> delete from user where user = 'jack'; 
Query OK, 1 row affected (0.00 sec) 

mysql> select user,host from user; 
+------------------+-----------------+ 
| user    | host   | 
+------------------+-----------------+ 
| root    | 127.0.0.1  | 
| debian-sys-maint | localhost  | 
| root    | localhost  | 
| root    | russ-elite-book | 
+------------------+-----------------+ 
4 rows in set (0.00 sec) 

mysql> CREATE USER 'jack'@'localhost' IDENTIFIED BY 'test123'; 
ERROR 1396 (HY000): Operation CREATE USER failed for 'jack'@'localhost' 
mysql> CREATE USER 'jimmy'@'localhost' IDENTIFIED BY 'test123'; 
Query OK, 0 rows affected (0.00 sec) 

mysql> select user,host from user; 
+------------------+-----------------+ 
| user    | host   | 
+------------------+-----------------+ 
| root    | 127.0.0.1  | 
| debian-sys-maint | localhost  | 
| jimmy   | localhost  | 
| root    | localhost  | 
| root    | russ-elite-book | 
+------------------+-----------------+ 
5 rows in set (0.00 sec) 

回答

155

嘗試做一個FLUSH PRIVILEGESThis MySQL bug post on that error code在刷新privs之後似乎會在類似於您的情況下報告一些成功。

+9

我已經找到了這個建議,並且早些時候嘗試了但沒有成功,但也許其他的東西是錯誤的。再次嘗試它,然後再與另一個用戶重新創建情況,我發現這實際上確實有效。當然,今天的正式答案是「不要愚蠢」,並使用REVOKE和DROP USER來正確地做。我非常感激所有三個答案(這個答案正好是讓我擺脫目前困境的那個答案)。 – 2011-04-05 17:05:02

+6

現在是2016年,MySQL的版本爲14.14版本,但仍然存在問題。 – 2015-12-18 00:20:21

+1

我首先需要根據@ tver3305答案放棄用戶。 – Shautieh 2016-10-28 16:20:52

7

嘗試delete from mysql.db where user = 'jack',然後創建一個用戶

+0

這對於幫助我理解我是如何破壞我的安裝非常有用。非常感謝你。 – 2011-04-05 17:03:26

+0

進一步閱讀Fely的評論。涉及的表格更多。 – 2017-10-18 07:20:09

19

您不應該以這種方式手動刪除用戶。 MySQL有用於刪除它們刪除權限和DROP USERREVOKE語法:

REVOKE priv1,priv2,priv3,etc... FROM '[email protected]'; // remove certain privileges 
DROP USER '[email protected]'; // completely delete the account 

最好使用提供,而不是在後臺碴周圍的工具。

+2

這是真正的答案,但不是我遇到的問題(這是由我的愚蠢造成的)。非常感謝你爲我設置直線! – 2011-04-05 17:02:39

+0

@Marc,**然後**,爲什麼他們甚至發明了「flush privileges」呢?官方的MySQL文檔**做**討論諸如'從用戶刪除用戶='jack';'和'flush privileges'之類的東西。你爲什麼說他們不是提供的工具的一部分? – Pacerier 2015-01-14 10:18:02

+1

正如@ user1969061指出的那樣,''jack @ localhost''應該是''jack'@'localhost''這裏。 – jochen 2015-11-01 18:20:06

376

是的,這個bug是存在的。但是,我發現了一個小的解決方法。

  • 假設用戶是存在的,所以刪除用戶
  • 刪除用戶後,就需要刷新MySQL權限
  • 現在創建用戶。

這應該解決它。假設我們要創建的用戶管理@本地,這些將是命令:

 
drop user [email protected]; 
flush privileges; 
create user [email protected] identified by 'admins_password' 

乾杯

+45

獨自沖洗特權對我無效。放下用戶固定的一切。謝謝。 – Jake 2012-02-27 17:35:18

+5

同上 - 恕我直言,這應該是答案 – LeonardChallis 2012-03-29 08:54:15

+2

同樣適用於我。我必須先放棄用戶。 – kgiannakakis 2012-05-10 10:21:53

1

如果你想刪除與SQL用戶,你需要在這些表中刪除相關數據: columns_privdbprocs_privtables_priv。然後執行flush privileges;

+0

好的答案!你的回答暴露了「幕後」的問題,而不是「使用這個補丁,你很好去」。我喜歡這兩種類型的答案,所以我可以從湯到堅果的理解。現在我知道,如果你要做對 - 這樣做有多麼的工作 - 這進一步強化了爲什麼應該使用他人概述的方法。真棒!雖然上面的許多答案都很好,但我會給你我的投票,因爲我知道成爲這個網站的新手是什麼感覺。當你是新手時,他們很難幫助別人。 – 2017-10-18 01:23:46

9

刪除用戶,刷新權限;然後,創建用戶。它確實有用!

+1

直到我放棄用戶時,獨立刷新特權才起作用。謝謝。 – 2015-06-08 18:07:25

3
two method 
one : 
setp 1: drop user 'jack'@'localhost'; 
setp 2: create user 'jack'@localhost identified by 'ddd'; 

two: 
setp 1: delete from user where user='jack'and host='localhost'; 
setp 2: flush privileges; 
setp 3: create user 'jack'@'localhost' identified by 'ddd'; 
36

此bug已坐在bugs.mysql.com自2007年以來,該線程主要是隻是一個甚至達到一年前所有這些錯誤答案的人云亦云。

據MySQL文檔,命令,如CREATE USERGRANTREVOKE,並DROP USER不需要後續FLUSH PRIVILEGES命令。很明顯,爲什麼,如果有人閱讀文檔。這是因爲直接更改MySQL表不會將信息重新加載到內存中;然而,對這個錯誤的解決方案過多聲稱FLUSH PRIVILEGES是答案。

這也可能不是一個錯誤。這是一個文檔陰謀 - 文檔在不同版本之間的關鍵位置有所不同。

13.7.1.2。 DROP USER語法

...

DROP USER用戶[,用戶] ...

...

DROP USER '傑弗裏' @ 'localhost' 的;

如果您僅指定帳戶名稱的用戶名部分,則使用'%'的主機名部分。

DROP USER由於MySQL 5.0.0中的目前只刪除沒有權限的帳戶。在MySQL 5.0.2中,它也被修改爲刪除帳戶權限。這意味着刪除帳戶的過程取決於您的MySQL版本。

在MySQL 5.0.2中,您可以按以下方式刪除帳戶及其特權:

DROP USER用戶;

該語句從所有授權表中刪除帳戶的權限行。

我得到這個錯誤的唯一時間是當我做DROP USER user;就像文檔所建議的那樣,但是MySQL不會將'%'視爲通配符,從而會拋棄所有主機上的所有用戶。畢竟它並不那麼狂野。或者,它可能會在刪除localhost用戶時嘗試刪除%。

很明顯,當它試圖在%上刪除用戶時,它會發出一條錯誤消息並退出。在本地主機上的後續CREATE USER將失敗,因爲本地主機用戶從未被刪除。似乎沒有必要浪費時間在一張海報中建議的尋找鬼的授權表中挖掘。

我看到7票:

DROP USER '插孔@ localhost' 的; //完全刪除這被解釋爲DROP USER '[email protected]'@'%';#錯

有實際上似乎是產生相同的錯誤消息的真正錯誤的帳戶

,但它與創建的第一個用戶做(後一個新的mysql服務器安裝)被丟棄。不管那個bug是否已經修復,我都不知道;但我不記得最近發生的情況,目前我的版本是5.5.27。

+4

你是MySQL文檔編寫者嗎? – Pacerier 2015-01-14 10:15:51

0

MySQL服務器與使用--skip-grant-tables選項運行,所以它不能執行該語句

0

我知道這是舊的,但因爲它是第一個結果在谷歌我想我應該加我解。在我的情況下,刪除用戶工作正常,但重新創建用戶給了我一個「錯誤2013(HY000):失去連接到MySQL服務器在查詢期間」和「錯誤2006(HY000):MySQL服務器已經消失。我嘗試了flush特權 - > drop user解決方案,但仍然有相同的錯誤。

在我的情況下,錯誤是由於MySQL從5.1升級到5.6。查看錯誤日誌,我注意到它說運行mysql_upgrade。這是否和我的創建用戶聲明工作正常!

3

我有同樣的錯誤。但命令「FLUSH PRIVILEGES;」沒有幫助。 我沒有這樣的:

CREATE USER 'jimmy'@'localhost' IDENTIFIED BY 'test123'; 
UPDATE mysql.user SET USER='jack' WHERE USER='jimmy'; 
22

如果您在試圖刪除用戶使用上mysql.userDELETE語句,然後嘗試重新建立與CREATE USER用戶,你會得到一個1396錯誤。獲得通過運行DROP USER 'username'@'host';

DELETE 
    FROM mysql.user 
WHERE user = 'jack'; 

擺脫這種錯誤的

CREATE USER 'jack'@'localhost' IDENTIFIED BY PASSWORD '*Fi47ytFF3CD5B14E7EjkjkkC1D3F8086A5C0-krn'; 

(擺脫這種狀況運行DROP USER

(如果試圖重新創建插孔,你會得到1396個錯誤)
DROP USER 'jack'@'localhost'; 

(我認爲FLUSH PRIVILEGES不會傷害,但肯定會首先放下用戶。)

1

在這個問題上的一個簡單的解決方法。由於「刪除」命令只刪除「mysql」數據庫的「用戶」表中的用戶記錄,我們可以將其添加回去,然後完全刪除用戶。然後您可以創建具有相同名稱的用戶。

步驟1.找到用戶表的記錄格式mysql數據庫

use mysql; 
select * from user; 

步驟2,根據列顯示在步驟1中,創建一個用戶名的僞記錄。例如,將它插入表格中,提醒用您的用戶名替換「用戶名」。

Insert into user value ('%','username','N','N','N','N','N', 
'N','N','N','N','N','N','N','N','N','N','N','N','N','N','N', 
'N','N','N','N','N','N','N','N','N','','','','','0','0','0', 
'0','mysql_native_password', 
'*52C5E3AC6BC5E2E0BFF86978BF62A1481AC79D58','N', 
'2016-12-10 23:59:12',null,'N'); 

注意:有時您可能在插入時遇到問題,只需更改數據以使其工作。

第3步。刪除用戶。

drop user username; 

現在您可以創建具有相同名稱的用戶。

+0

試試DESCRIBE 2017-10-18 01:21:57

-1

只需從mysql.db中刪除與用戶相關的數據(也可以從其他表中),然後重新創建兩者。

4

在MySQL 5.6中使用Drop user userid;不起作用。使用:Drop user 'userid'@'localhost';和/或Drop user 'userid'@'%';。通過這種方式,我可以放棄用戶並重新創建它。

+0

這是爲我工作。 – 71GA 2017-12-21 19:19:25

0

我最近得到了這個錯誤。

我的工作是檢查mysql工作臺'用戶和特權',並實現用戶仍然存在。

從那裏刪除後,我能夠重新創建用戶。

0

我也遇到同樣的問題,經過幾次搜索,我發現了一個解決方案,爲我工作,我希望它會幫助你。 由於您已經創建了用戶,現在嘗試在您的Mysql控制檯上執行FLUSH PRIVILEGESThis issue is already in MySql bug post.您也可以檢查這一個。現在沖洗後,您可以創建一個新用戶。 遵循以下步驟:

Step-1: Open terminal Ctrl+Alt+T 
Step-2: mysql -u root -p , it will ask for your MySQL password. 

現在你可以看到mysql的控制檯。

Step-3: CREATE USER 'username'@'host' IDENTIFIED by 'PASSWORD'; 

而不是用戶名你可以把你想要的用戶名。如果您在本地計算機上運行Mysql,請鍵入「localhost」而不是主機,否則請輸入您要訪問的服務器名稱。例如:

例如:CREATE USER smruti @ localhost IDENTIFIED by'hello';

現在創建新用戶。如果你想給所有的訪問,然後鍵入

GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';

現在你可以通過鍵入\q。現在退出了MySQL再次通過

mysql -u newusername -p登錄,然後按Enter鍵。你可以看到一切。

希望這會有所幫助。

相關問題