エラー1396(HY000): 'jack' @ 'localhost'のCREATE USER操作が失敗しました


311

MySQLのルートとしても、削除した単純なユーザーを再作成できないようです。

私の場合:ユーザー 'jack'は以前から存在していましたが、再作成するためにmysql.userから削除しました。その表にはこれの痕跡は見られません。他のランダムなユーザー名、たとえば「jimmy」に対してこのコマンドを実行すると、(「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)

回答:


233

やってみてくださいFLUSH PRIVILEGES;このエラーコードに関するこのMySQLバグ投稿は、 privsをフラッシュした後、あなたと同様のケースでいくつかの成功を報告するようです。 


13
私はこの提案を見つけてそれを試してみましたが成功しませんでしたが、おそらく何か他のことが間違っていました。今すぐもう一度試して、別のユーザーで状況を再現したところ、実際にはこれでうまくいくことがわかりました。もちろん、今日の正式な答えは「愚かではない」で、REVOKEとDROP USERを使用して正しく実行することでした。私は3つすべての回答にお世話になっています(これはたまたま私の現在の苦境から救われたものです)。
ラス・ベイトマン、2011

13
それは2016年ですが、mysqlはv14.14ですが、まだ壊れています。
ivo Welch、2015

4
最初に、@ tver3305の回答に従ってユーザーを削除する必要がありました。
Shautieh 2016年

9
10.1.21でも同じ問題が発生しますが、「フラッシュ特権」を使用しても違いはありません。ユーザーを削除し、フラッシュしてから作成すると、「7行目のエラー1396(HY000):操作CREATE USERが...に失敗しました」で失敗します。mysql / mariadbに、エラーの理由など、そのエラーについて少し詳しく説明してもらいたいのですが。
デビッドM.カー2017年

3
私もユーザーを削除しようとしてもエラーが発生しました。「フラッシュ特権」は機能しませんでした。少し調査した後、すべてのアクセスを取り消してユーザーを削除することで解決策を見つけました。そうは思いません。 、類似事例に役立つフラッシュ操作、私はこのページの上に私の詳細な説明を共有しているrathishkumar.in/2018/10/...
Rathish

545

はい、このバグはあります。しかし、小さな回避策を見つけました。

  • ユーザーがそこにいると想定して、ユーザーをドロップします
  • ユーザーを削除した後、mysql権限をフラッシュする必要があります
  • 次に、ユーザーを作成します。

それで解決するはずです。ユーザーadmin @ localhostを作成する場合、次のコマンドを実行します。

ユーザーadmin @ localhostをドロップします。
特権をフラッシュします。
「admins_password」で
 識別されるユーザーadmin @ localhostを作成します

乾杯


58
フラッシュ特権だけではうまくいきませんでした。ユーザーを削除すると、すべてが修正されました。ありがとう。
ジェイク、

3
わたしも。最初にユーザーを落とさなければなりませんでした。
kgiannakakis

3
@QuantumMechanicソリューションは私には機能しませんでしたが、ドロップしてからフラッシュしました。
ホブ2012

私の場合、ユーザーを削除するだけでフラッシュ権限はありませんでした。
Scadge 14

これは巨大な命の恩人でした-@Jakeと同じように、重要な部分はlocalhost部分を持つドロップユーザーでした
kellyfj

46

このバグは2007年以来bugs.mysql.comに存在しており、このスレッドは主に1年前まででさえ、すべての間違った答えのオウムです。

MySQLのドキュメントによると、コマンドが好きCREATE USERGRANTREVOKE、およびDROP USERそれに続く必要としないFLUSH PRIVILEGESコマンドを。ドキュメントを読んだ場合、その理由は明らかです。これは、MySQLテーブルを直接変更しても、情報がメモリにリロードされないためです。それでも、このバグに対する多くの解決策FLUSH PRIVILEGESが答えであると主張しています。

これもバグではないかもしれません。これはドキュメントの陰謀です-ドキュメントはバージョンごとに重要な場所が異なります。

13.7.1.2。DROP USER構文

...

DROP USERユーザー[、ユーザー] ...

...

DROP USER 'jeffrey' @ 'localhost';

アカウント名のユーザー名部分のみを指定した場合、 '%'のホスト名部分が使用されます。

DROP USERMySQL 5.0.0に存在するように、権限のないアカウントのみが削除されます。MySQL 5.0.2では、アカウント特権も削除するように変更されました。つまり、アカウントを削除する手順は、MySQLのバージョンによって異なります。

MySQL 5.0.2以降、次のようにしてアカウントとその権限を削除できます。

DROP USERユーザー。

このステートメントは、すべての付与テーブルからアカウントの特権行を削除します。

私がこのエラーを受け取るのは、私がそうするときだけですDROP USER user。ドキュメントが提案するように、MySQLは '%'をすべてのホストのすべてのユーザーをドロップするような方法でワイルドカードとして扱いません。結局のところ、それほどワイルドではありません。または、localhostユーザーを削除してから%のユーザーを削除しようとすると、動作する場合があります。

%のユーザーを削除しようとすると、エラーメッセージが表示されて終了することは明らかです。CREATE USERlocalhostユーザーは削除されなかったため、後続のlocalhostは失敗します。あるポスターが示唆しているように、ゴーストを探すためにグラントテーブルを掘り下げる時間を無駄にする必要はないようです。

私は7票を見ます:

DROP USER 'jack @ localhost'; //アカウントを完全に削除します

DROP USER 'jack@localhost'@'%';#間違っていると解釈されます

実際には同じエラーメッセージを生成する実際のバグがあるようですが、最初に作成されたユーザー(新しいmysqlサーバーのインストール後)が削除されることに関係しています。そのバグが修正されたかどうかはわかりません。しかし、最近起こったことを思い出せず、現時点ではバージョン5.5.27までです。


8
MySQLのドキュメントライターですか?
Pacerier、2015年

これが私の答えでした。Mariadbはこのバグを受け継ぎました。
18

なぜこれは受け入れられない答えです:/。とにかく、@ user1969061に感謝します。これは確かに私にとってはうまくいったmariadb-server-5.5.60-1.el7_5.x86_64
ハン・ソロ

36

ユーザーを削除しようとしてテーブルのDELETEステートメントを使用してmysql.userから、でユーザーを再確立しようとCREATE USERすると、1396エラーが発生します。実行してこのエラーを取り除きますDROP USER 'username'@'host';

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

(ジャックを再作成しようとすると、1396エラーが発生します)

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

(を実行して、この状況から抜け出しますDROP USER

DROP USER 'jack'@'localhost';

(私FLUSH PRIVILEGESは傷つけることはできないと思いますが、間違いなく最初にユーザーを落とします。)


24

この方法でユーザーを手動で削除しないでください。MySQLにはREVOKE、特権DROP USERを削除および削除するための構文があります。

REVOKE priv1,priv2,priv3,etc... FROM 'jack@localhost'; // remove certain privileges
DROP USER 'jack@localhost'; // completely delete the account

バックグラウンドでいじくるのではなく、提供されているツールを使用することをお勧めします。


2
これは本当の答えでしたが、私が抱えていた問題(私の愚かさによって引き起こされたもの)に対するものではありませんでした。正直に言ってくれてありがとう!
ラス・ベイトマン

@Marc、それでは、そもそもなぜ彼らflush privilegesはそもそも発明したのですか?MySQLの公式ドキュメントでdelete from user where user = 'jack'; 、やなどについて話してますflush privileges。なぜそれらは提供されるツールの一部ではないと言うのですか?
Pacerier、2015年

1
@ user1969061が指摘するように、'jack@localhost'おそらく'jack'@'localhost'ここにあるはずです。
jochen、2015年

11

ユーザーを削除し、特権をフラッシュします。次に、ユーザーを作成します。うまくいきます!


1
ユーザーを削除するまで、特権のフラッシュだけでは機能しませんでした。ありがとう。
Brandon Fitzpatrick

10

delete from mysql.db where user = 'jack'ユーザーを作成して試してください


1
これは、インストールがどのように破損したかを理解するのに役立ちました。どうもありがとうございました。
ラス・ベイトマン

Felyのコメントまで読んでください。関連するテーブルがさらにあります。
囚人

6

MySQL 5.6では、使用Drop user userid;は機能しません。使用:Drop user 'userid'@'localhost';および/またはDrop user 'userid'@'%';。このようにして、ユーザーを削除して再作成することができました。


5
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';


4

あなたは、SQLを持つユーザーを削除したい場合は、これらの表に関連するデータを削除する必要がありますcolumns_privdbprocs_privtables_priv。次に実行しますflush privileges;


素敵な答え!!あなたの答えは、単に「このパッチを使用すればよい」ではなく、実際に何が起こっているのかについての「裏方」の問題を明らかにします。私は両方のタイプの答えが一緒に含まれているのが好きなので、スープからナッツまで理解できます。これで、正しく実行する場合に、この方法で実行する作業の量がわかったので、他の人が概説している方法を使用する理由がさらにわかります。驚くばかり!上記の多くの回答は良かったですが、このサイトの初心者であることを知っているので、私はあなたに投票をしました。彼らはあなたが新しいとき、他の人を助けることを本当に難しくします。
囚人2017年

これは、受け入れられる代替の答えである必要があります。私はmysql 5.5を使用していますが、DROP USER IF EXISTSがまだ利用できないため、DELETE FROMユーザー構文を使用する必要があります(ユーザーの存在を最初にテストする必要があります)。ユーザーテーブルからの削除だけでは機能しませんでした。FLUSH PRIVILEGESもしませんでした。上記の他のテーブルから削除する必要があります。
alds

4

おかしなことに、MySQLワークベンチは私のためにそれを解決しました。「管理」タブ->「ユーザーと特権」で、ユーザーはエラーとともにリストされました。削除オプションを使用して問題を解決しました。


3

この問題の簡単な回避策。「delete」コマンドは「mysql」データベースの「user」テーブルのユーザーレコードのみを削除するので、それを追加してユーザーを完全に削除できます。次に、同じ名前のユーザーを作成できます。

ステップ1. MySQLデータベースでユーザーテーブルのレコード形式を見つける

use mysql;
select * from user;

手順2.手順1で示した列に従って、ユーザー名を含むダミーレコードを作成します。それをテーブルに挿入します。たとえば、「username」を自分のユーザー名に置き換えることを忘れないでください。

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;

これで、同じ名前のユーザーを作成できます。


DESCRIBE <tablename>をお試しください
Prisoner 13

2

この投稿MySQL ERROR 1045(28000):ユーザー 'bill' @ 'localhost'のアクセスが拒否されました(パスワード:YESを使用)が役立ちます。場合によっては、匿名ユーザー '' @ 'localhost'または '' @ '127.0.0.1'があります。だから、問題を解決するために、

  1. まず、「ユーザーの作成」に失敗したユーザーを削除します。

  2. 新しいユーザーを作成します。

  3. 新しいユーザーに必要な権限を付与します。

  4. フラッシュ特権。


これをありがとう。匿名ユーザーを削除するmysql_secure_installationを実行するのを忘れました。
ablackhat 2017

2

同じエラーが発生しました。しかし、「FLUSH PRIVILEGES;」をコマンドします。助けにはならなかった。私はそのようにしました:

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


0

これは古いことはわかっていますが、Googleでの最初の結果なので、解決策を追加する必要があると考えました。私の場合、ユーザーを削除しても問題はありませんでしたが、ユーザーを再作成すると、「ERROR 2013(HY000):Lost connection into MySQL server while query」と「ERROR 2006(HY000):MySQL server goone gove。」フラッシュ特権を試しました->ユーザーソリューションを削除しましたが、それでも同じエラーが発生しました。

私の場合、エラーは5.1から5.6へのmysqlアップグレードが原因でした。エラーログを表示すると、mysql_upgradeを実行するように指示されていることがわかりました。それと私のcreate userステートメントは問題なく機能しましたか?


0

最近このエラーが発生しました。

私のために働いたのは、mysqlワークベンチの「ユーザーと権限」をチェックインして、ユーザーがまだ存在していることを理解することです。

そこから削除した後、ユーザーを再作成することができました。


0

mysql> DELETE FROM mysql.db WHERE user = 'jack'

サーバーを再起動します。

# mysql.server restart

次に、CREATE USERコマンドを実行します。


これは役に立ちません。CREATE後にエラーが発生しましたDELETE
waqasgard 2018

0

私はこの問題に今日直面しました、そして私は以下のステップを行うことによってそれを解決しました:

1)必須フィールドの値を提供するその厄介なユーザーを手動で挿入する mysql.user

mysql> insert into user(Host, User, Password, ssl_type) 
   values ('localhost', 'jack', 'jack', 'ANY');

2)

mysql> select * from user where User = 'jack';
   1 row in set (0.00 sec)

3)A.

mysql> drop user jack;
Query OK, 0 rows affected (0.00 sec)

B. mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

C. mysql> create user 'jack' identified by 'jack';
Query OK, 0 rows affected (0.00 sec)

D. mysql> select Host, User, Password, ssl_type  from user where User = 'jack';
+-----------+-----------+-------------------------------------------+----------+
| Host      | User      | Password                                  | ssl_type |
+-----------+-----------+-------------------------------------------+----------+
| localhost | jack      | jack                                      | ANY      |
| %         | jack      | *45BB7035F11303D8F09B2877A00D2510DCE4D758 |          |
+-----------+-----------+-------------------------------------------+----------+
2 rows in set (0.00 sec)

4)A.

mysql> delete from user 
 where User = 'nyse_user' and 
       Host = 'localhost' and 
       Password ='nyse';
Query OK, 1 row affected (0.00 sec)

B.

mysql> select Host, User, Password, ssl_type  from user where User = 'jack';
+------+-----------+-------------------------------------------+----------+
| Host | User      | Password                                  | ssl_type |
+------+-----------+-------------------------------------------+----------+
| %    | jack      | *45BB7035F11303D8F09B2877A00D2510DCE4D758 |          |
+------+-----------+-------------------------------------------+----------+
1 row in set (0.00 sec)

お役に立てれば。



-2

私も同じ問題に直面していましたが、数回検索したところ、うまくいく解決策が見つかりました。すでにユーザーを作成してFLUSH PRIVILEGESいるので、Mysqlコンソールでを実行してみてください。 この問題はすでにMySqlバグ投稿にあります。これを確認することもできます。フラッシュ後、新しいユーザーを作成できます。以下の手順に従ってください:

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';

これで、.MySQLを入力してMySQLを終了でき\qます。もう一度ログインしてください。

mysql -u newusername -p、Enterキーを押します。あなたはすべてを見ることができます。

お役に立てれば。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.