试着
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命令调整为实际存在的用户规范。
我看到了很多(错误的)答案,就像这样简单:
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