试着

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;

得到

错误1064(42000):你有一个错误的SQL语法;查看手册 对应于你的MySQL服务器版本,正确的语法使用'IDENTIFIED BY 'root' WITH GRANT OPTION'在第一行。

注意:在以前的版本中尝试时,相同的工作。

也试过

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

得到

错误1410(42000):不允许使用GRANT创建用户

MySQL(8.0.11.0)用户名/密码为root/root。


当前回答

指定的用户在您的MySQL上不存在(因此,MySQL试图像在版本8之前那样使用GRANT创建它,但由于此版本引入的限制而失败)。

MySQL在这一点上是相当愚蠢的,所以如果你有'root'@'localhost',并试图授予'root'@'%'特权,它将它们视为不同的用户,而不是任何主机上的广义root用户,包括localhost。

错误消息也具有误导性。

因此,如果您得到错误消息,请使用以下内容检查现有用户

SELECT CONCAT("'", user, "'@'", host, "'") FROM mysql.user;

然后创建缺失的用户(正如Mike建议的那样),或者将GRANT命令调整为实际存在的用户规范。

其他回答

ubuntu 22.04.1 Mysql版本8.0.31-0

我的根用户没有GRANT权限,所以我不能授予新用户任何权限。 解决方案是删除当前的根用户,并使用'mysql_native_password'创建一个新用户。

命令如下 以root用户登录mysql

mysql> DROP USER 'root'@'localhost' IDENTIFIED BY 'PASSWORD' FROM mysql.user;
mysql> CREATE USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'locahost' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;

复制并立即使用:

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
GRANT ALL ON *.* TO 'username'@'localhost';
FLUSH PRIVILEGES;

而不是使用单行代码,如:

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

然后:

GRANT ALL ON *.* TO 'username'@'localhost';

然后:

FLUSH PRIVILEGES;

这些命令对我来说很有用:

1-登录mysql,查看所有用户

Sudo mysql -u root 从mysql.user中选择用户和主机;

2-delete旧用户

删除用户root@localhost;

3-创建新用户

创建用户“root”@“localhost”

4-给它添加所有权限:

授予所有*。*到“root”@“localhost” ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password “我的密码”;

5-finally flush特权

冲洗特权;

1)这对我很管用。首先,创建一个新用户。示例:用户名为foo,密码为bar

> mysql> CREATE USER 'foo'@'localhost' IDENTIFIED WITH mysql_native_password BY 'bar';

2)将下面的代码替换为用户名'foo'。

> mysql> GRANT ALL PRIVILEGES ON database_name.* TO'foo'@'localhost';

注意:database_name是你想要拥有权限的数据库。意思是所有对所有

3)以foo用户登录

mysql> mysql -u foo -p

密码:酒吧

4)确保你的初始连接从Sequelize设置为foo与pw bar。

您将得到这个错误

错误1410(42000):不允许使用GRANT创建用户

如果您试图在一个不存在的用户上运行GRANT !

因此,首先运行这个,以确保你在GRANT中使用的用户与你所拥有的用户完全匹配:

select User, Host from User;

特别要注意的是,您创建的用户是否在localhost,而您试图授予的用户是%