我想要远程访问 MySQL:
GRANT ALL ON *.* TO thufir@'192.168.0.16' IDENTIFIED BY 'hfdks4329vjkl';
当Workbench连接失败时,我用ping和telnet查看了一下:
Brents-MacBook:~ thufir$
Brents-MacBook:~ thufir$ ping 192.168.0.21
PING 192.168.0.21 (192.168.0.21): 56 data bytes
64 bytes from 192.168.0.21: icmp_seq=0 ttl=64 time=0.274 ms
64 bytes from 192.168.0.21: icmp_seq=1 ttl=64 time=0.499 ms
^C
--- 192.168.0.21 ping statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.274/0.387/0.499/0.113 ms
Brents-MacBook:~ thufir$
Brents-MacBook:~ thufir$ telnet 192.168.0.21
Trying 192.168.0.21...
^C
Brents-MacBook:~ thufir$
Brents-MacBook:~ thufir$ telnet 192.168.0.21 3306
Trying 192.168.0.21...
^C
Brents-MacBook:~ thufir$
我正在安装coreutils
并且必须学习如何netstat
在 Mac 上使用,而且lsof
——显然它是不同的。
服务器arrakis
正在运行OpenSuSE
;端口已关闭?
注意:我没有在 Mac 上安装 MySQL,它出现错误...
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 更新
MariaDB [mysql]>
MariaDB [mysql]> GRANT ALL ON *.* TO `thufir`@'%' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.00 sec)
MariaDB [mysql]>
MariaDB [mysql]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
MariaDB [mysql]>
MariaDB [mysql]> select host, user, grant_priv from user;
+------------+--------+------------+
| host | user | grant_priv |
+------------+--------+------------+
| localhost | root | Y |
| linux-k7qk | root | Y |
| 127.0.0.1 | root | Y |
| ::1 | root | Y |
| localhost | | N |
| linux-k7qk | | N |
| % | cron | N |
| localhost | cron | N |
| localhost | custom | N |
| % | custom | N |
| % | slave | N |
| % | root | N |
| % | thufir | N |
+------------+--------+------------+
13 rows in set (0.00 sec)
MariaDB [mysql]>
答案1
要在 MySQL 中启用网络,您需要确保正确处理两件事:MySQL 授权和 MySQL 本身需要启用网络:
设置 MySQL 授权。
你的GRANT
命令对我来说似乎很奇怪:
GRANT ALL ON *.* TO thufir@'192.168.0.16' IDENTIFIED BY 'hfdks4329vjkl';
为什么'192.168.0.16'
用单引号引起来而用户不是?它可能将其视为'192.168.0.16'
主机的单引号文字。因此,请尝试这样做:
GRANT ALL ON *.* TO '[email protected]' IDENTIFIED BY 'hfdks4329vjkl';
但是当我授予这样的权限时,二命令,其结构如下:
GRANT USAGE ON *.* TO '[email protected]' IDENTIFIED BY 'thufir';
GRANT ALL PRIVILEGES ON *.* TO '[email protected]';
然后在设置授权后,您必须刷新权限表以获取要加载的新权限:
FLUSH PRIVILEGES;
你就可以出发了。
启用 MySQL 网络。
但话虽如此,请检查您的my.cnf
是否有bind-address
这样的设置:
bind-address = 127.0.0.1
默认情况下,这会将 MySQL 绑定到localhost
(即127.0.0.1
:),这是 MySQL 的正常“开箱即用”安全行为,因为将数据库服务器暴露给网络可能会带来安全风险。因此,在这种情况下(因为您需要启用网络),您需要将其注释掉,如下所示:
#bind-address = 127.0.0.1
并确保skip-networking
已被禁用,并像这样注释掉:
#skip-networking
然后重新启动MySQL服务器以使新的设置生效。
后记。
现在,您拥有的 MySQLGRANT
命令使用 IP 地址,192.168.0.16
但所有ping
和telnet
测试都是针对的192.168.0.21
。那么它是哪个 IP 地址?当您在 MySQL 中设置授权时,您基于客户IP 地址;不是服务器 IP 地址。
因此,如果服务器有 IP 地址192.168.0.16
,客户端也有 IP 地址192.168.0.21
,那么 MySQLGRANT
命令应该使用192.168.0.21
和不是正如192.168.0.16
您的示例所示。也许这就是问题所在?