请参见下面的示例。 (当然,最初,创建“ 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)
#1 楼
尝试执行FLUSH PRIVILEGES;
。关于该错误代码的此MySQL错误文章似乎在刷新privs之后报告了与您类似的情况下的某些成功。 #2 楼
是的,这个错误在那里。但是,我发现了一个小的解决方法。假定用户在那里,因此删除用户
删除用户后,需要刷新mysql特权
现在创建用户。
应该解决它。假设我们要创建用户admin @ localhost,则应使用以下命令:
drop user admin@localhost; flush privileges; create user admin@localhost identified by 'admins_password'
干杯
评论
单凭冲洗特权对我不起作用。删除用户即可修复所有问题。谢谢。
–杰克
2012年2月27日在17:35
我也是。我必须先删除用户。
– kgiannakakis
2012年5月10日上午10:21
@QuantumMechanic解决方案对我不起作用,但先滴然后冲洗就可以了。
–滚刀
2012年8月2日,0:23
就我而言,仅删除用户就足够了,而无需刷新特权。
– Scadge
14年7月16日在10:19
显然,只是想指出这项工作与客户无关。我正在使用SQLElectron,并在AWS RDS托管的MySQL中遇到相同的错误。这样就解决了。
– bupereira
20-09-29在14:13
#3 楼
自2007年以来,此错误就一直存在于bugs.mysql.com上,并且该线程主要只是直到一年前所有这些错误答案的模仿。根据MySQL文档,类似
CREATE USER
的命令,GRANT
,REVOKE
和DROP 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 user
时;就像文档所建议的那样,但是MySQL不会以将所有主机上的所有用户都丢弃的方式将'%'视为通配符。毕竟不是那么疯狂。或者,它可能有时在删除localhost用户然后尝试删除%1的本地用户时起作用。对我来说很清楚,当它尝试删除%处的用户时,它将发出错误消息并退出。由于从未删除本地用户,后续在本地的
CREATE USER
将失败。似乎没有必要浪费时间在赠款表上挖掘以寻找鬼魂,正如一位海报建议的那样。我看到7票赞成: 'jack @ localhost'; //完全删除帐户与删除的第一个创建的用户(在安装新的mysql服务器之后)有关。我不知道该错误是否已修复。但我不记得最近发生过这种情况,目前我的版本是5.5.27。
评论
您是MySQL文档编写者吗?
–起搏器
15年1月14日在10:15
这就是我的答案。 Mariadb继承了此错误。
–切碎
18年9月11日13:43
为什么这不是公认的答案:/。无论如何,谢谢@ user1969061。这肯定在mariadb-server-5.5.60-1.el7_5.x86_64中为我工作
–han独奏
19年7月3日在6:40
刚遇到MySQL 8.0.22上的问题,@ tver3305的解决方案对我有用。那个虫子现在已经是老城区了。
–诽谤
20/11/29在3:14
#4 楼
如果在DELETE
表上使用mysql.user
语句试图删除用户,然后尝试使用CREATE USER
重新建立用户,则会收到1396
错误。通过运行DROP USER 'username'@'host';
DELETE
FROM mysql.user
WHERE user = 'jack';
摆脱此错误(如果尝试重新创建插孔,将出现1396错误)。 br />
(通过运行
DROP USER
摆脱这种情况) )#5 楼
您不应该以这种方式手动删除用户。 MySQL具有用于删除特权的REVOKE
语法以及用于删除特权的DROP USER
语法:评论
这是真正的答案,但不是我遇到的问题(由我的愚蠢造成)。非常感谢您让我直率!
–罗斯·贝特曼
2011年4月5日在17:02
@Marc,然后,为什么他们甚至还发明了冲洗特权?官方的MySQL文档确实在谈论诸如从user删除的内容,其中user ='jack';和冲洗特权。您为什么说它们不属于所提供的工具?
–起搏器
2015年1月14日在10:18
正如@ user1969061指出的那样,此处的“ jack @ localhost”可能应该是“ jack” @“ localhost”。
– jochen
15年11月1日在18:20
#6 楼
删除用户,刷新特权;然后,创建用户。确实有效!评论
在删除用户之前,仅刷新特权无效。谢谢。
–布兰登·菲茨帕特里克(Brandon Fitzpatrick)
2015年6月8日在18:07
#7 楼
尝试delete from mysql.db where user = 'jack'
,然后创建一个用户评论
这对帮助我了解如何损坏我的安装很有用。非常感谢你。
–罗斯·贝特曼
2011年4月5日在17:03
进一步阅读Fely的评论。涉及更多表。
–囚犯13
17-10-18在7:20
#8 楼
在MySQL 5.6中,无法使用Drop user userid;
。使用:Drop user 'userid'@'localhost';
和/或Drop user 'userid'@'%';
。这样,我就可以删除用户并重新创建它。#9 楼
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';
#10 楼
检查是否'user'@'%'
或
'user' @'localhost'
#11 楼
如果要使用sql删除用户,则需要删除以下表中的相关数据:columns_priv
,db
,procs_priv
,tables_priv
。然后执行flush privileges;
评论
不错的答案!您的答案揭示了实际发生的“幕后”问题,而不仅仅是“使用此补丁程序,您就很好了”。我喜欢两种答案都包含在内,所以我可以从汤到坚果都可以理解。现在,我知道如果您要正确执行此方法,将有多少工作-这进一步证明了为什么一个人应该使用他人概述的方法。太棒了!尽管上面的许多答案都不错,但我还是给我投票,因为我知道成为该网站的新手会怎样。当您刚入门时,他们很难帮助他人。
–囚犯13
17-10-18在1:23
这应该是另一种可接受的答案。我正在使用mysql 5.5,并且DROP USER IF EXISTS尚不可用,因此我必须使用DELETE FROM用户语法(我必须首先测试用户的存在)。仅从用户表中删除是行不通的。冲洗特权也没有。您必须从上面的其他表中删除。
–alds
18年7月11日在9:37
#12 楼
有趣的是,MySQL工作台为我解决了它。在“管理”选项卡->“用户和特权”中,列出了该用户,但有错误。使用delete选项解决了该问题。#13 楼
有关此问题的简单解决方法。由于“删除”命令仅删除“ mysql”数据库的“用户”表中的用户记录,因此我们可以将其添加回去,然后完全删除用户。然后您可以创建具有相同名称的用户。步骤1.在mysql数据库中找到用户表的记录格式
use mysql;
select * from user;
步骤2。根据步骤1中显示的列,使用用户名创建一个虚拟记录。将其插入表中,例如,提醒您用用户名替换“用户名”。数据以使其正常工作。
步骤3.删除用户。
评论
尝试DESCRIBE
–囚犯13
17-10-18在1:21
#14 楼
这篇文章MySQL错误1045(28000):用户'bill'@'localhost'的访问被拒绝(使用密码:YES)很有用。有时,会有一个匿名用户“ @'localhost”或“ @'127.0.0.1”。因此,要解决该问题,首先删除其“创建用户”失败的用户。
创建新用户。
授予新用户所需的特权。
刷新特权。
评论
谢谢你我忘记运行删除了匿名用户的mysql_secure_installation。
– ablackhat
17年8月21日在8:42
#15 楼
我有同样的错误。但是命令“冲洗特权”;没有帮助。我是这样的:
CREATE USER 'jimmy'@'localhost' IDENTIFIED BY 'test123';
UPDATE mysql.user SET USER='jack' WHERE USER='jimmy';
#16 楼
我遇到了与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
!谢谢! />
#17 楼
MySQL服务器正在使用--skip-grant-tables选项运行,因此它无法执行此语句#18 楼
我知道这很旧,但是由于它是Google的第一个结果,所以我认为我应该添加解决方案。以我为例,删除用户可以正常工作,但是重新创建用户给我一个“错误2013(HY000):在查询过程中丢失与MySQL服务器的连接”和“错误2006(HY000):MySQL服务器已消失。”我尝试了刷新特权->删除用户解决方案,但仍然遇到相同的错误。在我的情况下,该错误是由于MySQL从5.1-> 5.6升级所致。查看错误日志时,我注意到它说要运行mysql_upgrade。这样做和我的create user语句都工作正常!
#19 楼
我最近收到此错误。对我有用的是在mysql工作台中检查“用户和特权”,并意识到用户仍然存在。
从那里删除它之后,我能够重新创建用户。
#20 楼
mysql> DELETE FROM mysql.db WHERE user = 'jack'
重新启动服务器:
# mysql.server restart
然后执行
CREATE USER
命令。评论
这没有用。删除后在CREATE遇到错误。
– Waqasgard
18/12/13在10:09
#21 楼
我今天遇到了这个问题,并通过执行以下步骤解决了这个问题:1)手动将麻烦的用户(提供必填字段的值)插入到
mysql.user
中, “ lang-sql prettyprint-override”> 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)A.
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)A.
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)
希望有帮助。
#22 楼
似乎需要为数据库创建用户并为创建的用户授予特权->为数据库创建用户
CREATE USER <'username'>@'%'IDENTIFIED BY <'password'>;
ex-创建用户'root'@'%'IDENTIFIED BY' root';
->授予特权
FLUSH PRIVILEGES;
GRANT ALL PRIVILEGES ON <db name>.* TO '<username>'@'%';
-授予mydb上的所有特权。*至'root'@'%';
#23 楼
只需从mysql.db中删除与用户相关的数据(也许也从其他表中删除),然后重新创建两者即可。#24 楼
我也遇到了同样的问题,经过几次搜索,我找到了一个对我有用的解决方案。希望对您有所帮助。由于您已经创建了用户,现在尝试在Mysql控制台上执行
FLUSH PRIVILEGES
。 此问题已存在于MySql Bug中。您也可以检查此问题。现在刷新后,您可以创建一个新用户。可以看到Mysql控制台。
Step-1: Open terminal Ctrl+Alt+T
Step-2: mysql -u root -p , it will ask for your MySQL password.
您可以输入所需的用户名来代替用户名。如果在本地计算机上运行Mysql,则键入“ localhost”而不是主机,否则输入您要访问的服务器名称。
例如:CREATE USER smruti @ localhost由'hello'标识;
现在创建新用户。如果要授予所有访问权限,请键入
GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';
现在可以通过键入
\q
退出MySQL。现在再次通过mysql -u newusername -p
登录,然后按Enter。您可以看到所有内容。希望对您有所帮助。
评论
我已经找到了这个建议,并在较早的时候就尝试了,但没有成功,但也许还有其他问题。现在再次尝试,然后与另一个用户重新创建情况,我发现这确实可以解决问题。当然,今天的正式答案是“不要傻”,并使用REVOKE和DROP USER正确地做。我对这三个答案都很感激(这个答案恰好是使我摆脱当前困境的那个答案)。
–罗斯·贝特曼
2011-4-5 17:05
是2016年,mysql版本是v14.14,现在仍然坏了。
– ivo Welch
2015年12月18日,0:20
我首先需要根据@ tver3305答案删除用户。
– Shautieh
16-10-28在16:20
我在10.1.21中看到了同样的问题,但是“刷新权限”没有任何区别。我放下用户,刷新,然后创建,但失败,并出现“在第7行出现错误1396(HY000):操作CREATE USER for ...失败。”。我希望我可以让mysql / mariadb详细说明该错误,例如为什么会失败。
– David M. Karr
17 Mar 15 '17 at 20:08
即使当我也尝试删除用户时,我也收到错误消息,“刷新特权”对我不起作用,在进行了一些研究后,我发现通过撤消所有访问权限并删除用户的方法,我认为不是,冲洗操作将在类似情况下提供帮助,我在此页面上分享了我的详细解释rathishkumar.in/2018/10/…
–爱尔兰语
18-10-22在8:25