错误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 USER
, GRANT
, REVOKE
和DROP 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“。 所以,要解决这个问题,
-
首先放下“创build用户”失败的用户。
-
创build新用户。
-
为新用户授予所需的权限。
-
冲洗特权。
在MySQL 5.6中使用Drop user userid;
不起作用。 使用: Drop user 'userid'@'localhost';
和/或Drop user 'userid'@'%';
。 通过这种方式,我可以放弃用户并重新创build它。
如果你想用sql删除一个用户,你需要删除这些表中的相关数据: columns_priv
, db
, procs_priv
, tables_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。