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上)
Bab*_*mes 33
运行以下查询:
use mysql;
update user set host='%' where host='localhost'
注意:不建议用于生产.
小智 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服务
小智 5
在 Raspbian 上运行的 MariaDB - 很难确定包含绑定地址的文件。MariaDB 有一些关于这个主题的不太有用的信息。
我用了
# sudo grep -R bind-address /etc
Run Code Online (Sandbox Code Playgroud)
找到该死的东西在哪里。
我还必须像上面每个人指出的那样在 mysql 中设置权限和主机。
并且还有一些有趣的时间打开 3306 端口以远程连接到我的 Raspberry Pi - 最后使用iptables-persistent。
现在一切都很好。