ERROR 1396(HY000):“jack”@“localhost”的操作CREATE USER失败

时间:2011-04-05 16:41:00

标签: mysql mysql-management

我似乎无法重新创建一个我删除的简单用户,即使是MySQL中的root用户。

我的情况:之前存在用户'jack',但是我从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)

25 个答案:

答案 0 :(得分:468)

是的,这个bug就在那里。但是,我找到了一个小的解决方法。

  • 假设用户在那里,所以放弃用户
  • 删除用户后,需要刷新mysql权限
  • 现在创建用户。

那应该解决它。假设我们想要创建用户admin @ localhost,这些命令就是:

drop user admin@localhost;
flush privileges;
create user admin@localhost identified by 'admins_password'

干杯

答案 1 :(得分:192)

尝试执行FLUSH PRIVILEGESThis MySQL bug post on that error code似乎在冲洗私人之后报告了一些类似于你的案件的成功。

答案 2 :(得分:41)

自2007年以来,这个bug一直存在于bugs.mysql.com上,这个帖子主要只是一年前所有这些错误答案的鹦鹉学舌。

根据MySQL文档,CREATE USERGRANTREVOKEDROP USER等命令不需要后续的FLUSH PRIVILEGES命令。如果一个人阅读文档,那就很明显了。这是因为直接改变MySQL表不会将信息重新加载到内存中;然而,这个错误的过多解决方案声称FLUSH PRIVILEGES就是答案。

这也可能不是一个错误。这是一个文档阴谋 - 文档在不同版本之间的关键位置各不相同。

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的后续CREATE USER将失败,因为localhost用户从未被删除。正如一张海报建议的那样,似乎没有必要浪费时间在资助表中寻找鬼魂。

我看到7票赞成:

  

DROP USER'jack @ localhost'; //完全删除帐户

这被解释为DROP USER 'jack@localhost'@'%';#wrong

实际上似乎存在一个真正的错误,它会生成相同的错误消息,但它与第一​​个创建的用户(在新的mysql服务器安装之后)被删除有关。这个bug是否已修复,我不知道;但我不记得最近发生的事情,我现在达到5.5.27版。

答案 3 :(得分:30)

如果您在DELETE表上使用mysql.user语句尝试删除用户,然后尝试使用CREATE USER重新建立该用户,您将获得1396 1}}错误。通过运行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不会伤害,但绝对会先放弃用户。)

答案 4 :(得分:24)

您不应该以这种方式手动删除用户。 MySQL具有删除权限的REVOKE语法和删除它们的DROP USER

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

最好使用提供的工具,而不是在后台乱逛。

答案 5 :(得分:11)

删除用户,刷新权限;然后,创建用户。它确实有效!

答案 6 :(得分:10)

尝试delete from mysql.db where user = 'jack',然后创建用户

答案 7 :(得分:6)

在MySQL 5.6中使用Drop user userid;不起作用。使用:Drop user 'userid'@'localhost';和/或Drop user 'userid'@'%';。通过这种方式,我可以删除用户并重新创建它。

答案 8 :(得分: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';

答案 9 :(得分:2)

如果要删除具有sql的用户,则需要删除这些表中的相关数据:columns_privdbprocs_privtables_priv。然后执行flush privileges;

答案 10 :(得分:2)

这篇文章MySQL ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)很有用。有时,有一个匿名用户''@ localhost'或''@'127.0.0.1'。所以,要解决这个问题,

  1. 首先删除“创建用户”失败的用户。

  2. 创建新用户。

  3. 为新用户授予必要的权限。

  4. 刷新权限。

答案 11 :(得分:2)

我有同样的错误。但命令“FLUSH PRIVILEGES;”没有帮助。 我确实喜欢这样:

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

答案 12 :(得分:2)

关于这个问题的简单解决方法。由于“删除”命令仅删除“mysql”数据库的“user”表中的用户记录,我们可以将其添加回来然后完全删除用户。然后,您可以创建具有相同名称的用户。

步骤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;

现在您可以创建具有相同名称的用户。

答案 13 :(得分:1)

我遇到了与OP相同的问题,并且接受的答案对我不起作用。在接受的答案的评论中,@ Rathish发布了一个对我有用的解决方案,我想引起注意。

以下是链接:

https://www.rathishkumar.in/2018/10/Error-1396-HY000-Operation-CREATE-DROP-USER-failed-for-user-host.html

Rathish的解决方案是撤销所有用户的访问权限:

REVOKE ALL ON *.* FROM 'user'@'host';
DROP USER 'user'@'host';
FLUSH PRIVILEGES;

他还很有帮助地指出,您可以通过选择“用户”和“主机”来确定您是否有上次操作遗留下来的残留用户,以查询下表:

mysql.user: User accounts, global privileges, and other non-privilege columns
mysql.db: Database-level privileges
mysql.tables_priv: Table-level privileges
mysql.columns_priv: Column-level privileges
mysql.procs_priv: Stored procedure and function privileges
mysql.proxies_priv: Proxy-user privilege

谢谢!

答案 14 :(得分:1)

有趣的是,MySQL工作台为我解决了它。在“管理”选项卡->“用户和特权”中,列出了该用户,但有错误。使用删除选项可以解决该问题。

答案 15 :(得分:0)

解决MySql的BUG:Error Code-1396

  • 每当您尝试运行创建如下所示的用户的查询时。 MySql> CREATE USER 'springstudent'@'localhost' IDENTIFIED BY 'springstudent'; 授予所有特权 * 。 * TO 'springstudent'@'localhost';
  • 但是当您尝试运行在所有权限内创建用户的查询时, 由于它创建的错误,它在不显示用户的情况下提供了特权
  • 由于这个问题,我们需要使用这个脚本来刷新权限 MySql> drop user 'springstudent'@'localhost'; 刷新权限; 创建由 'admins_password' 标识的用户 admin@localhost
  • 删除用户后,需要刷新mysql权限
  • 然后再次创建用户

发现问题.... 解决了....

答案 16 :(得分:0)

似乎您需要为数据库创建用户并为创建的用户授予特权

->创建数据库用户

CREATE  USER <'username'>@'%'IDENTIFIED BY <'password'>;

ex-创建用户'root'@'%'IDENTIFIED BY'root';

->授予特权

FLUSH PRIVILEGES;
GRANT ALL PRIVILEGES ON <db name>.* TO '<username>'@'%';

在mydb上授予所有特权。*要'root'@'%';

答案 17 :(得分: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)答:

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)答:

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)

希望这会有所帮助。

答案 18 :(得分:0)

检查是否为

  

'用户'@'%'

  

“用户” @“本地主机”

答案 19 :(得分:0)

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

重启服务器:

# mysql.server restart

然后执行CREATE USER命令。

答案 20 :(得分:0)

我最近遇到了这个错误。

对我来说有用的是检查mysql工作台&#39;用户和权限&#39;并实现用户仍然存在。

从那里删除后,我能够重新创建用户。

答案 21 :(得分:0)

我知道这是旧的,但由于这是谷歌的第一个结果,我想我应该添加我的解决方案。在我的情况下,删除用户工作正常,但重新创建用户给了我一个“错误2013(HY000):在查询期间与MySQL服务器的连接丢失”和“ERROR 2006(HY000):MySQL服务器已经消失。”我尝试了刷新权限 - &gt;删除用户解决方案,但仍然有相同的错误。

在我的情况下,错误是由于从5.1升级的mysql - &gt; 5.6。查看错误日志,我注意到它说要运行mysql_upgrade。这和我的创建用户声明是否正常工作!

答案 22 :(得分:0)

MySQL服务器使用--skip-grant-tables选项运行,因此无法执行此语句

答案 23 :(得分:-2)

我也遇到了同样的问题,经过几次搜索,我找到了一个对我有用的解决方案。我希望它会对你有所帮助。 由于您已经创建了用户,现在尝试在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,请键入&#34; localhost&#34; 而不是主机,否则请提供您要访问的服务器名称。

Ex:CREATE USER smruti @ localhost由&#39; hello&#39;;

识别

现在创建了新用户。如果您想要提供所有访问权限,请键入

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

现在您可以通过键入\q退出MySQL。现在再次登录

mysql -u newusername -p,然后按Enter键。你可以看到一切。

希望这有帮助。

答案 24 :(得分:-2)

只需从mysql.db中删除用户相关数据(也可能从其他表中删除),然后重新创建两者。