MySQL 8远程访问

sHa*_*NeR 4 mysql authentication mysql-8.0

我通常会正确设置MySQL以进行远程访问。

目前,我陷入了MySQL 8的困境。

第一件事是在mysql.conf.d / mysqld.cnf上,我没有任何绑定地址行,因此我手动添加了它(绑定地址0.0.0.0),并授予了对用户的访问权限'%'

当我连接时,我收到消息“身份验证失败”

但它在localhost /命令行上运行良好

小智 14

遇到同样的问题,连接到 MySQL Workbench 并更新了用户权限。

MySQL 版本:8.0.20 社区。操作系统:Windows 10。

  1. 打开 MySQL Workbench --> 服务器 --> 用户和权限
  2. 选择用户
  3. 将“主机匹配限制”更改为“%”,以便从任何主机进行访问。
  4. 应用更改。
  5. 如果需要,重新启动 MySQL 服务。它对我有用,无需重新启动。

截屏, MySQL 工作台 8.0.20

  • 这是 MySQL 8 的完美且最佳的解决方案。忘记有关 bind_address 或 bind-address 的所有内容并应用此技巧。 (2认同)

rbz*_*rbz 7

怎么做:

  1. bind_addressmy.ini文件中删除或注释该参数。

(文件名称因操作系统而异。在Linux上,my.ini实际上是位于目录/ etc / mysql /中的my.cnf)

  1. 重新启动服务。
  2. 创建root用户(是的,是新用户,因为存在的是“ root @ localhost”,仅本地访问):

    CREATE USER 'root'@'%' IDENTIFIED BY '123';

  3. 赋予特权:

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';

对于DBA用户,请WITH GRANT OPTION在最后添加。


因为它不能用GRANT创建

MySQL 8无法再使用创建用户GRANT,因此,IDENTIFIED BY '123'如果尝试将其与结合使用会GRANT出现错误,这是最常见的错误。


Sha*_*uti 6

MySQL 8 中的远程访问:

1) 允许来自任何主机的访问

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

bind-address            = 0.0.0.0
Run Code Online (Sandbox Code Playgroud)

2)允许用户从任何地方访问:

mysql

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
UPDATE mysql.user SET host='%' WHERE user='root';
Run Code Online (Sandbox Code Playgroud)

3) 将身份验证更改为密码

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'ThePassword';
Run Code Online (Sandbox Code Playgroud)

  • 除非您不想对“root”帐户执行此操作,否则它只会打开另一个攻击媒介。创建一个只能访问所需内容的新帐户,而不是使用超级用户 (3认同)

小智 3

对于 MySQL 8,打开 mysqld.cnf 文件

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
Run Code Online (Sandbox Code Playgroud)

并修改或添加bind-address选项:

[mysqld]
bind-address = 0.0.0.0
Run Code Online (Sandbox Code Playgroud)

重启mysql服务器

sudo service mysql restart
Run Code Online (Sandbox Code Playgroud)

  • 在手册8.0中,将*bind-address*更改为*bind_address* [链接](https://dev.mysql.com/doc/refman/8.0/en/ipv6-remote-connections.html) (3认同)
  • 忘记向 cnf 文件添加任何其他内容,不要添加“bind-address”或“bind_address”。正确的解决方案是授予 root 用户(或其他用户)远程访问权限,因为 root 仅具有本地主机访问权限: sudo mysql -u root -p # CREATE USER 'root'@'%' IDENTIFIED BY '1234567890'; # 将 *.* 上的所有权限授予 'root'@'%'; sudo systemctl 重新启动 mysql (3认同)