我似乎无法重新创建一个我已经删除的简单用户,即使是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)

当前回答

自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。

其他回答

我也犯了同样的错误。但是命令“FLUSH PRIVILEGES;”不起作用。 我喜欢这样:

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

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

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.db where user = 'jack'然后创建一个用户

我也遇到过同样的问题,经过几次搜索,我找到了一个适合我的解决方案。我希望它能帮助你。 由于您已经创建了用户,现在尝试在Mysql控制台中执行FLUSH PRIVILEGES。 这个问题已经出现在MySql bug中了。你也可以看看这个。现在,在刷新之后,您可以创建一个新用户。 遵循以下步骤:

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”而不是主机,否则输入你想访问的服务器名。

实例:创建用户smruti@localhost由“hello”标识;

现在创建了新用户。如果你想给所有的访问然后键入

授予*上的所有特权。* TO 'newuser'@'localhost';

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

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

希望这能有所帮助。

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

——>为数据库创建用户

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

创建用户“root”@“%”,用户名为“root”;

——>授予特权

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

授予mydb上的所有特权。*到“root”@“%”;