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

我的案例:用户'jack'之前存在,但我从mysql中删除了它。用户才能重新创建它。我在那张桌子上没看到这东西的痕迹。如果我对其他一些随机用户名执行这个命令,比如'jimmy',它就能正常工作(就像它最初对'jack'所做的那样)。

我做了什么破坏用户'jack',我如何撤销这个破坏,以重新创建'jack'作为MySQL安装的有效用户?

参见下面的示例。(当然,最初,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)

当前回答

尝试做一个FLUSH PRIVILEGES;。关于这个错误代码的MySQL bug post似乎报告了一个类似于您的情况,在冲洗privs后取得了一些成功。

其他回答

自2007年以来,这个bug一直存在于bugs.mysql.com上,这个线程主要是在重复一年前的所有错误答案。

根据MySQL文档,像CREATE USER、GRANT、REVOKE和DROP USER这样的命令不需要后续的FLUSH PRIVILEGES命令。原因很清楚,如果你读过文件的话。这是因为直接修改MySQL表不会将信息重新加载到内存中;然而,针对这个错误的大量解决方案都声称FLUSH PRIVILEGES是答案。

这甚至可能不是一个bug。这是一个文档阴谋——不同版本的文档在一个关键的地方有所不同。

13.7.1.2. DROP USER语法

...

DROP USER USER [, USER]…

...

DROP USER 'jeffrey'@'localhost';

如果只指定帐户名的用户名部分,则使用'%'的主机名部分。

DROP USER在MySQL 5.0.0中只删除没有特权的帐户。在MySQL 5.0.2中,它被修改为删除帐户特权。这意味着删除一个帐户的过程取决于你的MySQL版本。

从MySQL 5.0.2开始,你可以像下面这样删除一个帐户和它的特权:

DROP USER用户

该语句从所有授权表中删除该帐户的特权行。

我唯一一次得到这个错误是当我做DROP USER USER;就像文档建议的那样,但是MySQL不会将'%'作为通配符来处理,这样会删除所有主机上的所有用户。毕竟也没那么狂野。或者,当它删除本地主机用户,然后尝试删除位于%的用户时,它有时可能会工作。

我很清楚,当它试图删除%的用户时,它会发出错误消息并退出。后续在本地主机上创建用户将失败,因为本地主机用户从未被删除。似乎没有必要像一位发帖者建议的那样,浪费时间在拨款表中寻找“幽灵”。

我看到7票赞成:

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

它被解释为DROP USER 'jack@localhost'@'%';#错了

实际上似乎有一个真正的错误,产生相同的错误消息,但它与第一个创建的用户(在新的mysql服务器安装后)被删除有关。我不知道这个漏洞是否已经修复;但我不记得最近发生过这种事,我现在的体温达到了5.5.27。

我今天遇到了这个问题,我通过以下步骤解决了它:

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)

希望这能有所帮助。

如果你在mysql上使用DELETE语句。如果试图删除一个用户,然后尝试用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特权不会造成伤害,但肯定会先放弃用户。)

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

MySql的错误解决:错误码1396

Whenever you had try to run query which create a User as Shown Below. MySql> CREATE USER 'springstudent'@'localhost' IDENTIFIED BY 'springstudent'; GRANT ALL PRIVILEGES ON * . * TO 'springstudent'@'localhost'; But when you try to run query which create user within all previleges, Due to bug it create gives previleges without showing user Because of this Problem we need to use this script for flush priviledges MySql> drop user 'springstudent'@'localhost'; flush privileges; create user admin@localhost identified by 'admins_password' After deleting the user, there is need to flush the mysql privileges Then Create User again

Gotchaaa ....Solved ....