错误1396(HY000):为'username'@'localhost'创建用户操作失败,密码为'mypassword'。

13

我错误地从我的 mysql.user 表中删除了 root 用户。

delete from mysql.user where user='username';

为了创建相同的根用户,我正在尝试执行以下查询:

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

当我操作创建用户 'username'@'localhost' 时,出现以下错误:

ERROR 1396 (HY000): Operation CREATE USER failed for 'username'@'localhost'

根据这个Stack Overflow回答,我尝试过FLUSH PRIVILEGES;,但仍然遇到相同的错误。

你有什么想法是出了什么问题吗?


答案

我还需要从mysql.db表中删除相同的内容。

delete from mysql.db where user='username';

就这样了...

3个回答

12

如果您使用DROP USER命令删除用户,则该用户将被完全删除。如果您需要以后再添加具有相同用户名的用户,可以使用FLUSH PRIVILEGES命令从MySQL内存中完全删除权限。

DROP USER username@hostname;

因为权限存在问题,您必须在创建相同用户之前重新启动mysql或运行FLUSH PRIVILEGES命令。

在基于Linux的系统中重新启动mysql的方法:

sudo service mysql restart

在Windows系统中重新启动

net stop mysql
net start mysql

在mysql提示符中刷新权限

FLUSH PRIVILEGES;

如果您知道用户拥有哪些权限,可以使用REVOKE命令进行撤销。

REVOKE privillege1, privillege2, ... FROM deleted_user@host

1

这个用户必须在mysql系统架构的其他表中被引用。我将以删除该用户相同的方式重新创建它:

INSERT INTO mysql.user (user, host, password)
VALUES ('root', 'localhost', PASSWORD('pasw'));

那么

FLUSH PRIVILEGES;
GRANT ALL ON *.* TO 'root'@'localhost';

永远不要碰这个模式的另一个原因(抱歉,我忍不住了)。

0
关于上述问题,在我的情况下,password字段不存在,导致mysql抛出错误。
这个命令有所帮助:
INSERT INTO mysql.user (user, host, ssl_cipher, x509_issuer, x509_subject, plugin, authentication_string) VALUES ('user', 'localhost', '', '', '', 'mysql_native_password', PASSWORD('pass'));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接