我似乎无法重新创建一个我删除的简单用户,即使是MySQL中的root用户。
我的情况:之前存在用户'jack',但是我从mysql.user中删除了它以便重新创建它。我在那张桌子上看不出这种痕迹。如果我为其他一些随机用户名执行此命令,比如'jimmy',它就可以正常工作(就像它最初为'jack'做的那样)。
我做了什么来破坏用户'jack'以及如何撤消这种损坏以便重新创建'jack'作为MySQL安装的有效用户?
见下面的例子。 (当然,最初,'杰克'和他的移除之间有很多时间。)
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)
答案 0 :(得分:468)
是的,这个bug就在那里。但是,我找到了一个小的解决方法。
那应该解决它。假设我们想要创建用户admin @ localhost,这些命令就是:
drop user admin@localhost; flush privileges; create user admin@localhost identified by 'admins_password'
干杯
答案 1 :(得分:192)
尝试执行FLUSH PRIVILEGES
。 This MySQL bug post on that error code似乎在冲洗私人之后报告了一些类似于你的案件的成功。
答案 2 :(得分:41)
自2007年以来,这个bug一直存在于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用户;
该语句从所有授权表中删除该帐户的特权行。
我唯一一次收到此错误的时间是DROP USER user
;就像文档建议的那样,但是MySQL并没有将'%'视为一种通配符,这种方式会丢弃所有主机上的所有用户。毕竟它并不那么狂野。或者,有时它可能会删除localhost用户,然后尝试删除%的用户。
我很清楚,当它尝试在%处删除用户时,会发出错误消息并退出。 localhost的后续CREATE USER
将失败,因为localhost用户从未被删除。正如一张海报建议的那样,似乎没有必要浪费时间在资助表中寻找鬼魂。
我看到7票赞成:
DROP USER'jack @ localhost'; //完全删除帐户
这被解释为DROP USER 'jack@localhost'@'%';
#wrong
实际上似乎存在一个真正的错误,它会生成相同的错误消息,但它与第一个创建的用户(在新的mysql服务器安装之后)被删除有关。这个bug是否已修复,我不知道;但我不记得最近发生的事情,我现在达到5.5.27版。
答案 3 :(得分:30)
如果您在DELETE
表上使用mysql.user
语句尝试删除用户,然后尝试使用CREATE USER
重新建立该用户,您将获得1396
1}}错误。通过运行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 PRIVILEGES
不会伤害,但绝对会先放弃用户。)
答案 4 :(得分:24)
您不应该以这种方式手动删除用户。 MySQL具有删除权限的REVOKE
语法和删除它们的DROP USER
:
REVOKE priv1,priv2,priv3,etc... FROM 'jack@localhost'; // remove certain privileges
DROP USER 'jack@localhost'; // completely delete the account
最好使用提供的工具,而不是在后台乱逛。
答案 5 :(得分:11)
删除用户,刷新权限;然后,创建用户。它确实有效!
答案 6 :(得分:10)
尝试delete from mysql.db where user = 'jack'
,然后创建用户
答案 7 :(得分:6)
在MySQL 5.6中使用Drop user userid;
不起作用。使用:Drop user 'userid'@'localhost';
和/或Drop user 'userid'@'%';
。通过这种方式,我可以删除用户并重新创建它。
答案 8 :(得分:5)
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';
答案 9 :(得分:2)
如果要删除具有sql的用户,则需要删除这些表中的相关数据:columns_priv
,db
,procs_priv
,tables_priv
。然后执行flush privileges;
答案 10 :(得分:2)
这篇文章MySQL ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)很有用。有时,有一个匿名用户''@ localhost'或''@'127.0.0.1'。所以,要解决这个问题,
首先删除“创建用户”失败的用户。
创建新用户。
为新用户授予必要的权限。
刷新权限。
答案 11 :(得分:2)
我有同样的错误。但命令“FLUSH PRIVILEGES;”没有帮助。 我确实喜欢这样:
CREATE USER 'jimmy'@'localhost' IDENTIFIED BY 'test123';
UPDATE mysql.user SET USER='jack' WHERE USER='jimmy';
答案 12 :(得分:2)
关于这个问题的简单解决方法。由于“删除”命令仅删除“mysql”数据库的“user”表中的用户记录,我们可以将其添加回来然后完全删除用户。然后,您可以创建具有相同名称的用户。
步骤1.在mysql数据库中找到用户表的记录格式
use mysql;
select * from user;
步骤2.根据步骤1中显示的列,使用用户名创建一个虚拟记录。将其插入表格,例如,提醒您将“用户名”替换为您的用户名。
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;
现在您可以创建具有相同名称的用户。
答案 13 :(得分:1)
我遇到了与OP相同的问题,并且接受的答案对我不起作用。在接受的答案的评论中,@ Rathish发布了一个对我有用的解决方案,我想引起注意。
以下是链接:
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
谢谢!
答案 14 :(得分:1)
有趣的是,MySQL工作台为我解决了它。在“管理”选项卡->“用户和特权”中,列出了该用户,但有错误。使用删除选项可以解决该问题。
答案 15 :(得分:0)
解决MySql的BUG:Error Code-1396
发现问题.... 解决了....
答案 16 :(得分:0)
似乎您需要为数据库创建用户并为创建的用户授予特权
->创建数据库用户
CREATE USER <'username'>@'%'IDENTIFIED BY <'password'>;
ex-创建用户'root'@'%'IDENTIFIED BY'root';
->授予特权
FLUSH PRIVILEGES;
GRANT ALL PRIVILEGES ON <db name>.* TO '<username>'@'%';
在mydb上授予所有特权。*要'root'@'%';
答案 17 :(得分:0)
我今天遇到了这个问题,并通过执行以下步骤解决了这个问题:
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)
希望这会有所帮助。
答案 18 :(得分:0)
检查是否为
'用户'@'%'
或
“用户” @“本地主机”
答案 19 :(得分:0)
mysql> DELETE FROM mysql.db WHERE user = 'jack'
重启服务器:
# mysql.server restart
然后执行CREATE USER
命令。
答案 20 :(得分:0)
我最近遇到了这个错误。
对我来说有用的是检查mysql工作台&#39;用户和权限&#39;并实现用户仍然存在。
从那里删除后,我能够重新创建用户。
答案 21 :(得分:0)
我知道这是旧的,但由于这是谷歌的第一个结果,我想我应该添加我的解决方案。在我的情况下,删除用户工作正常,但重新创建用户给了我一个“错误2013(HY000):在查询期间与MySQL服务器的连接丢失”和“ERROR 2006(HY000):MySQL服务器已经消失。”我尝试了刷新权限 - &gt;删除用户解决方案,但仍然有相同的错误。
在我的情况下,错误是由于从5.1升级的mysql - &gt; 5.6。查看错误日志,我注意到它说要运行mysql_upgrade。这和我的创建用户声明是否正常工作!
答案 22 :(得分:0)
MySQL服务器使用--skip-grant-tables选项运行,因此无法执行此语句
答案 23 :(得分:-2)
我也遇到了同样的问题,经过几次搜索,我找到了一个对我有用的解决方案。我希望它会对你有所帮助。
由于您已经创建了用户,现在尝试在Mysql控制台上执行FLUSH PRIVILEGES
。
This issue is already in MySql bug post.您也可以检查一个。刷新后,您可以创建一个新用户。
按照以下步骤:
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,请键入&#34; localhost&#34; 而不是主机,否则请提供您要访问的服务器名称。
Ex:CREATE USER smruti @ localhost由&#39; hello&#39;;
识别现在创建了新用户。如果您想要提供所有访问权限,请键入
GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';
现在您可以通过键入\q
退出MySQL。现在再次登录
mysql -u newusername -p
,然后按Enter键。你可以看到一切。
希望这有帮助。
答案 24 :(得分:-2)
只需从mysql.db中删除用户相关数据(也可能从其他表中删除),然后重新创建两者。