试着

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。


当前回答

以我为例,我想做一些类似的事情,我遵循了这里的一些步骤,但最好的方法是@星云提到的:

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

在这之后,我遇到了一个错误,而试图查询数据库或连接SQLTools从VSCode。

客户端不支持服务器请求的认证协议;考虑升级MySQL客户端

运行这个查询将修复这个问题:

ALTER USER 'user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Your_newP@s$w0Rd';

我还想提到的是,这些步骤在本地环境中是可以工作的,在生产环境中执行某些操作时,建议将每个用户分配到每个数据库,并相应生成密码,如果需要,还可以采取不同的其他安全措施。

其他回答

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

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

非常感谢@星云 如果您想只允许远程IP使用以下命令

CREATE USER 'user_test'@'113.yy.xx.94' IDENTIFIED BY 'YOUR_PWD';
GRANT ALL ON *.* TO 'user_test'@'113.yy.xx.94';
FLUSH PRIVILEGES;

这招对我很管用:

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

从MySQL 8开始,您不再可以(隐式地)使用GRANT命令创建用户。用CREATE USER代替,后面跟着GRANT语句:

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

请注意WITH GRANT OPTION的安全风险,请参阅:

授予数据库的所有权限

检查您的用户名和域是否与之前创建的相同。Mysql通过用户表中的两列选择帐户。如果是不同的,mysql可能认为您想要通过授权创建一个新帐户,这在8.0版本之后不支持。