web-dev-qa-db-ja.com

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

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

私の場合:ユーザー 'jack'は以前から存在していましたが、再作成するためにmysql.userから削除しました。私はその表にこれの痕跡は見当たらない。このコマンドを他のランダムなユーザー名、たとえば 'jimmy'に対して実行した場合、(元々 'jack'の場合とまったく同じように)正常に機能します。

ユーザー「jack」を破損させるために何をしましたか。また、このMySQLのインストールで有効なユーザーとして「jack」を再作成するために、その破損を元に戻す方法はありますか?

下記の例をご覧ください。 (もちろん、もともと、「jack」の作成から彼の削除までには長い時間がありました。)

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)
256
Russ Bateman

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

192
QuantumMechanic

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

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

それで解決するはずです。ユーザadmin @ localhostを作成したいとすると、これらはコマンドになります。

ユーザーadmin @ localhostのドロップ、
特権のフラッシュ、
 create 'admin @ localhost'で識別admins_password'

乾杯

467
tver3305

このバグは2007年以来bugs.mysql.comにあり続けており、このスレッドは主に1年前まででさえも、これらすべての間違った答えの単なるオウムです。

MySQLのドキュメントによると、CREATE USERGRANTREVOKE、およびDROP USERのようなコマンドは後続のFLUSH PRIVILEGESコマンドを必要としません。なぜドキュメントを読むのか、それは明らかです。 MySQLテーブルを直接変更しても情報がメモリに再ロードされないためです。それでも、このバグに対する多数の解決策がFLUSH PRIVILEGESがその答えです。

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

13.7.1.2。 DROP USERの構文

...

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

...

DROP USER 'jeffrey' @ 'localhost';

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

MySQL 5.0.0に存在するDROP USERは特権を持たないアカウントのみを削除します。 MySQL 5.0.2では、アカウント権限も削除するように修正されました。これは、アカウントを削除する手順がMySQLのバージョンによって異なることを意味します。

MySQL 5.0.2以降、以下のようにアカウントとその特権を削除することができます。

DROP USERユーザー。

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

このエラーが発生するのは、DROP USER userを実行したときだけです。ドキュメントが示唆しているように、MySQLはすべてのホストのすべてのユーザーを削除するような方法で '%'をワイルドカードとして扱いません。結局それほどワイルドではありません。または、localhostユーザーを削除してから%のユーザーを削除しようとしたときに機能することもあります。

%でユーザーを削除しようとすると、エラーメッセージを表示して終了することは明らかです。 localhostユーザーが削除されたことがないため、以降のlocalhostでのCREATE USERは失敗します。あるポスターが示唆しているように、助成金テーブルで幽霊を探すのに時間を無駄にする必要はないようです。

私は7票を得ます:

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

これはDROP USER 'jack@localhost'@'%';#wrongと解釈されます

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

41
user1969061

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

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

(jackを再作成しようとすると1396エラーが発生します)

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

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

DROP USER 'jack'@'localhost';

(私はFLUSH PRIVILEGESは問題ないと思いますが、間違いなく最初にユーザーを削除します。)

30

手動でユーザーを削除してはいけません。 MySQLには特権を削除するための REVOKE 特権を削除するための DROP USER 特権を削除するための/があります。

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

バックグラウンドでぐるぐるというよりむしろ提供されたツールを使用するのが最善です。

23
Marc B

ユーザーを削除し、権限をフラッシュします。その後、ユーザーを作成します。それは働きます!

11
罗俊峰

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

10
a1ex07

MySQL 5.6では、Drop user userid;を使用しても機能しません。 Drop user 'userid'@'localhost';Drop user 'userid'@'%';を使ってください。このようにして、ユーザーをドロップして再作成することができました。

6
Joilson Cardoso
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';
5
TonyWu

Sqlを使用してユーザーを削除したい場合は、columns_privdbprocs_privtables_privのテーブル内の関連データを削除する必要があります。それからflush privileges;を実行してください

2
fely

この問題に対する簡単な回避策。 "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');

注:挿入時に問題が発生することがあります。データを変更して機能させることができます。

Step 3.ユーザーを削除します。

drop user username;

今、あなたは同じ名前のユーザーを作成することができます。

2
Jason Mao

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

  1. 最初に 'create user'が失敗したユーザーを削除します。

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

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

  4. 特権をフラッシュします。

2
user_19

私は同じエラーがありました。しかし、「FLUSH PRIVILEGES;」と命じてください。助けにはならなかった。私はそれが好きでした:

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

私は最近このエラーを受けました。

私にとってうまくいったのは、mysqlワークベンチ 'Users and Privileges'をチェックインし、ユーザーがまだ存在していることに気づいたことです。

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

0
dmena

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

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

# mysql.server restart

それからCREATE USERコマンドを実行してください。

0
emallove

あるかどうかを確認

'ユーザー'@'%'

または

'user' @ 'localhost'

0
Inês Gomes

MySQLサーバーは--skip-grant-tablesオプションで実行されているため、このステートメントを実行できません

0
irfan habib

私はこれが古いことを知っています、しかしそれはグーグルでの最初の結果であるので私は私が私の解決策を加えるべきだと考えました。私の場合、ユーザーを削除しても問題はありませんでしたが、ユーザーを再作成すると、「エラー2013(HY000):クエリ中にMySQLサーバーへの接続が失われました」および「エラー2006(HY000):MySQLサーバーがなくなりました」と表示されました。私はフラッシュ特権を試してみました - >ユーザーソリューションを削除しましたが、それでも同じエラーがありました。

私の場合、エラーは5.1からMySQLへのアップグレードが原因でした - > 5.6。エラーログを見て、私はそれがmysql_upgradeを実行するように言ったことに気づいた。それと私のcreate user文はうまくいきましたか。

0
vik