试着

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;

注意:可以使用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

其他回答

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

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特权

冲洗特权;

这只是我对这个问题的看法。我有完全相同的问题,试图从MySQL工作台连接。我正在运行一个bitnami-mysql虚拟机来为开发设置一个本地沙盒。

Bitnami的教程说要运行“Grant All Privileges”命令:

/opt/bitnami/mysql/bin/mysql -u root -p -e "grant all privileges on *.* to 'root'@'%' identified by 'PASSWORD' with grant option";

这显然行不通,最后我用Mike Lischke的答案让它起作用了。

我认为发生的情况是root@%用户有与之关联的错误凭据。因此,如果你试图修改用户的特权,但运气不好,尝试:

删除用户。 重新创建用户。 确保在MySQL配置文件上有正确的绑定。 在我的例子中,我已经注释掉了这行,因为它只是用于沙盒环境。


1. 删除用户。

从Mysql控制台:

列出用户(有助于查看所有用户):

select user, host from mysql.user;

删除期望用户:

drop user '{{ username }}'@'%';

2. 重新创建用户。

创建用户并授予权限:

CREATE USER '{{ username }}'@'%' IDENTIFIED BY '{{ password }}';
GRANT ALL PRIVILEGES ON *.* TO '{{ username }}'@'%' WITH GRANT OPTION;

执行如下命令:

FLUSH PRIVILEGES;

3.确保在MySQL配置文件上有正确的绑定。

找到您的MySQL配置文件(附加说明在最后)。如果你想让MySQL监听多个网络上的连接,在配置文件中找到下面这行:

bind-address=127.0.0.1

并使用“#”注释它:

#bind-address=127.0.0.1

对于生产环境,您可能希望使用限制网络访问(最后的附加说明)。

然后重新启动MySQL服务。

希望这对有同样问题的人有所帮助!


绑定:如果你想了解更多,我建议你看看下面的内容 解决方案如何将MySQL服务器绑定到多个IP地址。它 基本上是说你可以打开MySQL,限制连接 防火墙,或者如果你的MySQL版本是8.0.13或更高。

该文件可以有不同的位置,这取决于你的 Linux分发和安装。在我的系统里,地址是 ”“/ etc / my . cnf中所做。以下是其他推荐地点: /etc/mysql/mysql.conf.d /etc/mysql/my.cnf 你也可以搜索配置位置,如本网站所示: 如何找到MySQL配置文件的位置。

在选择语句中,将'user'@'%'更改为'user'@'localhost'解决了我的问题

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

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';

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

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

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