试着

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命令调整为实际存在的用户规范。

其他回答

我也遇到了同样的问题。即使路由有'%'也不能远程连接。现在,看看my.ini文件(windows中的配置文件),bind-address语句被遗漏了。

所以…我把这个bind-address = *放在[mysqld]后,重新启动服务。现在起作用了!

对于那些已经对创建用户'root'@'localhost'感到困惑的人,当你已经在服务器机器上有一个root帐户时,请记住,你的'root'@'localhost'和'root'@'your_remote_ip'是mysql服务器中两个不同的用户(相同的用户名,但不同的范围)。因此,创建一个带有your_remote_ip后缀的新用户实际上会创建一个新的有效的根用户,您可以使用该用户从远程机器访问mysql服务器。

例如,如果您使用root从IP为10.154.10.241的远程机器连接到mysql服务器,并且您希望为远程root帐户设置一个密码,该密码为'Abcdef123!@#',下面是你需要遵循的步骤:

On your mysql server machine, do mysql -u root -p, then enter your password for root to login. Once in mysql> session, do this to create root user for the remote scope: mysql> CREATE USER 'root'@'10.154.10.241' IDENTIFIED BY 'Abcdef123!@#'; After the Query OK message, do this to grant the newly created root user all privileges: mysql> GRANT ALL ON *.* TO 'root'@'10.154.10.241'; And then: FLUSH PRIVILEGES; Restart the mysqld service: sudo service mysqld restart Confirm that the server has successfully restarted: sudo service mysqld status

如果上面的步骤没有任何错误地执行,那么您现在可以使用root从远程机器访问mysql服务器。

我在CentOS上也有同样的问题,这为我工作了(版本:8.0.11):

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

1. 授予的权限

授予mysql>的所有权限。以授予选项“根”@“%”;

mysql> FLUSH PRIVILEGES

2. 检查用户表:

Mysql >使用Mysql

Mysql > select host,user from user

3.修改配置文件

Mysql默认绑定ip:127.0.0.1,如果我们要远程访问服务,只需删除配置

#Modify the configuration file
vi /usr/local/etc/my.cnf

#Comment out the ip-address option
[mysqld]
# Only allow connections from localhost
#bind-address = 127.0.0.1

4.最后重新启动服务

重启mysql

我看到了很多(错误的)答案,就像这样简单:

USE mysql;
CREATE USER 'user'@'localhost' IDENTIFIED BY 'P@ssW0rd';
GRANT ALL ON *.* TO 'user'@'localhost';
FLUSH PRIVILEGES;

注意:可以使用root来连接数据库,而不是自己创建的用户。但是,使用默认的根帐户让应用程序连接到数据库并不是首选的方法。可选特权可以按以下方式应用(请注意并记住最小特权原则):

-- Grant user permissions to all tables in my_database from localhost --
GRANT ALL ON my_database.* TO 'user'@'localhost';

-- Grant user permissions to my_table in my_database from localhost --
GRANT ALL ON my_database.my_table TO 'user'@'localhost';

-- Grant user permissions to all tables and databases from all hosts --
GRANT ALL ON *.* TO 'user'@'*';

如果你遇到以下错误:

错误1130 (HY000):主机' 1.2.3.4 '不允许连接到这个 MySQL服务器

您需要在/etc/mysql/my.cnf文件中增加/修改以下两行,并重新启动mysql。

bind-address           = 0.0.0.0
skip-networking

你可能会遇到以下错误,这有点令人困惑:

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

这意味着要么用户根本不存在,要么user@host组合不存在。你可以用下面的命令检查:

SELECT host, user FROM user