所有主机的MySQL root访问权限

lor*_*o-s 136 mysql authentication

我在远程Ubuntu机器上安装了MySQL服务器.该root用户在定义mysql.user表是这样的:

mysql> SELECT host, user, password FROM user WHERE user = 'root';
+------------------+------+-------------------------------------------+
| host             | user | password                                  |
+------------------+------+-------------------------------------------+
| localhost        | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| ip-10-48-110-188 | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| 127.0.0.1        | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| ::1              | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
+------------------+------+-------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

我可以root使用标准mysql客户端从同一远程计算机命令行界面访问用户.现在我想允许来自互联网上每个主机的root访问权限,所以我尝试添加以下行(它与前一个转储的第一行完全相同,除了host列):

mysql> SELECT host, user, password FROM user WHERE host = '%';
+------------------+------+-------------------------------------------+
| host             | user | password                                  |
+------------------+------+-------------------------------------------+
| %                | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
+------------------+------+-------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

但我个人电脑上的客户端继续告诉我(我掩盖了服务器IP):

SQL Error(2003):无法连接到'46 .xxx'上的MySQL服务器(10061)

我不知道这是认证错误还是网络错误.在服务器防火墙上,我为端口3306/TCP启用了0.0.0.0/0,这对我来说没问题......

hov*_*yan 332

该过程有两个步骤:

a)授予特权.以root用户身份执行:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';
Run Code Online (Sandbox Code Playgroud)

b)绑定到所有地址:

最简单的方法是注释掉'password'文件中的行:

#bind-address = 127.0.0.1 
Run Code Online (Sandbox Code Playgroud)

并重启mysql

service mysql restart
Run Code Online (Sandbox Code Playgroud)

默认情况下,它仅绑定到localhost,但如果您对该行进行注释,则它会绑定到它找到的所有接口.评论该行相当于my.cnf.

检查mysql服务绑定的位置以root身份执行:

netstat -tupan | grep mysql
Run Code Online (Sandbox Code Playgroud)

Ubuntu 16更新:

配置文件是(现在)

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

(至少在标准的Ubuntu 16上)

  • 好的,问题是绑定地址.谢谢.@Darhazer也谢谢你:) (5认同)
  • 为了允许root @%向其他用户授予权限,请在步骤(a)之后立即运行:GRANT USAGE ON\*.\*TO'root'@'%'WITH GRANT OPTION; (4认同)
  • 查询当前授权:'SHOW GRANTS FOR'root'@'%'; (2认同)
  • 我只是需要这样做,以便能够远程连接到服务器:`USE mysql; UPDATE用户SET Grant_priv ='Y'WHERE user ='root';` (2认同)

Bab*_*mes 33

运行以下查询:

use mysql;

update user set host='%' where host='localhost'

注意:不建议用于生产.

  • 这对我有用。尝试这个。`更新 mysql.user set host='%' where user='root'` (5认同)
  • 不是FLUSH特权; 还需要吗? (4认同)
  • 这不是完美的解决方案。它可能会起作用。对我来说,它产生了一个错误:错误1062(23000):键“ PRIMARY”的条目“%-root”重复 (2认同)
  • @Scriptlabs,用户表中可能有多个条目,主机为"localhost".并且有多个root用户,包括root.localhost,root.127.0.0.1,root.::1.所以你最好添加一个单独的用户而不是更新,这就是为什么我正在低估这个答案. (2认同)

小智 17

MYSQL 8.0 - 打开 mysql 命令行客户端

GRANT ALL PRIVILEGES ON \*.* TO 'root'@'localhost';  
Run Code Online (Sandbox Code Playgroud)

使用 mysql

UPDATE mysql.user SET host='%' WHERE user='root';  
Run Code Online (Sandbox Code Playgroud)

重启mysql服务


小智 7

有时

bind-address = 127.0.0.1

应该

bind-address =*


小智 5

在 Raspbian 上运行的 MariaDB - 很难确定包含绑定地址的文件。MariaDB 有一些关于这个主题的不太有用的信息

我用了

# sudo grep -R bind-address /etc 
Run Code Online (Sandbox Code Playgroud)

找到该死的东西在哪里。

我还必须像上面每个人指出的那样在 mysql 中设置权限和主机。

并且还有一些有趣的时间打开 3306 端口以远程连接到我的 Raspberry Pi - 最后使用iptables-persistent

现在一切都很好。