错误1396(HY000):操作CREATE USER失败'jack'@'localhost'

我似乎无法重新创build一个我已经删除的简单用户,甚至作为MySQL中的根。

我的情况:用户'杰克'以前存在,但我从mysql.user中删除,以重新创build它。 我在这张桌子里看不到这个痕迹。 如果我执行这个命令的其他随机用户名,说'吉米',它工作正常(就像它最初为'杰克')。

我已经做了什么来损坏用户“杰克”,我怎样才能消除这种腐败,以重新创build“杰克”作为这个安装MySQL的有效用户?

看下面的例子。 (当然,原来,“杰克”的创build和删除之间有很多时间)。

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错误post似乎在刷新privs后在类似于你的情况下报告一些成功。

是的,这个错误在那里。 但是,我发现一个小的解决方法。

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

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

删除用户admin @ localhost;
冲洗特权;
创build由“ admins_password ”标识的用户admin @ localhost

干杯

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

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

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

13.7.1.2。 DROP USER语法

DROP 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 ; 就像文档所build议的那样,但是MySQL并不会将'%'当作通配符来使用,这样会导致所有主机上的所有用户都被拒绝。 毕竟它并不那么狂野。 或者,它可能会在删除localhost用户,然后尝试删除%。

我很清楚,当它试图在%上删除用户时,它会发出错误信息并退出。 本地主机上的后续CREATE USER将失败,因为本地主机用户从未被删除。 似乎没有必要浪费时间挖掘一张海报所build议的寻找鬼的授权表。

我看到7票:

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

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

实际上似乎有一个真正的错误生成相同的错误消息,但它必须与第一个创build的用户(新的MySQL服务器安装后)被删除。 不pipe这个bug是否已经修复,我不知道; 但是我不记得最近发生的事情,而且我现在已经达到了5.5.27。

如果您在mysql.user表上使用DELETE语句尝试删除用户,则尝试使用CREATE USER重新build立CREATE USER ,您将收到1396错误。 通过运行DROP USER 'username'@'host';摆脱这个错误DROP USER 'username'@'host';

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

(如果您尝试重新创build插孔,您将得到1396错误)

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

(通过运行DROP USER来摆脱这种情况)

 DROP USER 'jack'@'localhost'; 

(我认为FLUSH PRIVILEGES不会受到伤害,但肯定会首先丢弃用户。)

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

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

最好使用提供的工具,而不是在后台进行垃圾回收。

放下用户,刷新权限; 然后,创build用户。 它工作!

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

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

我有同样的错误。 但是命令“FLUSH PRIVILEGES” 没有帮助。 我这样做:

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

这篇文章MySQL错误1045(28000):访问被拒绝用户帐单@'本地主机'(使用密码:是)是有用的。 有时,有一个匿名用户“@'localhost”或“@”127.0.0.1“。 所以,要解决这个问题,

  1. 首先放下“创build用户”失败的用户。

  2. 创build新用户。

  3. 为新用户授予所需的权限。

  4. 冲洗特权。

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

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

一个简单的解决这个问题。 由于“删除”命令只删除“mysql”数据库“用户”表中的用户logging,可以将其添加回去,然后完全删除用户。 然后你可以创build用户相同的名称。

第一步:在mysql数据库中查找用户表的logging格式

 use mysql; select * from user; 

步骤2.根据步骤1中显示的列,使用用户名创build一个虚拟logging。 例如,将其插入表格中,提醒用您的用户名replace“用户名”。

 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; 

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

MySQL服务器正在运行–skip-grant-tables选项,所以它不能执行这个语句

我知道这是旧的,但因为它是谷歌的第一个结果,我想我应该加我的解决scheme。 在我的情况下,删除用户工作正常,但重新创build用户给了我一个“错误2013(HY000):失去连接到MySQL服务器在查询”和“错误2006(HY000):MySQL服务器已经消失。 我尝试了刷新权限 – >删除用户的解决scheme,但仍然有相同的错误。

在我的情况下,错误是由于从5.1 – > 5.6的MySQL升级。 查看错误日志,我注意到它说运行mysql_upgrade。 这是否和我的创build用户声明工作正常!

我最近得到这个错误。

对我来说工作是检查mysql工作台“用户和权限”,并实现用户仍然存在。

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

我也遇到了同样的问题,经过几次search,我发现了一个解决scheme,为我工作,我希望它会帮助你。 由于您已经创build了用户,现在尝试在您的Mysql控制台上执行FLUSH PRIVILEGES 。 这个问题已经在MySql的bug后。 您也可以检查这一个。现在冲洗后,您可以创build一个新的用户。 遵循以下步骤:

 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”而不是主机,否则请input要访问的服务器名称。

例如:创build用户smruti @ localhost由'hello'IDENTIFIED;

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

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

现在你可以通过input\q来退出MySQL。现在再次login

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

希望这可以帮助。

只需从mysql.db中删除用户相关的数据(也许从其他表也可以),然后重新创build。