105

我可以使用以下代码轻松授予对一个 IP 的访问权限:

$ mysql -u root -p
Enter password:    
mysql> use mysql    
mysql> GRANT ALL ON *.* to root@'192.168.1.4' IDENTIFIED BY 'your-root-password';     
mysql> FLUSH PRIVILEGES;

但我需要允许整个子网 192.168.1.* 远程访问数据库。

我怎样才能做到这一点?

4

8 回答 8

137

看起来您也可以使用网络掩码,例如

GRANT ... TO 'user'@'192.168.0.0/255.255.255.0' IDENTIFIED BY ...
于 2016-07-15T07:05:35.717 回答
110

编辑:考虑在此页面上查看并支持Malvineous的答案。网络掩码是一个更优雅的解决方案。


只需在 IP 地址中使用百分号作为通配符。

来自http://dev.mysql.com/doc/refman/5.1/en/grant.html

您可以在主机名中指定通配符。例如,user_name@'%.example.com'适用于域中user_name的任何主机,适用于C类子网中的任何主机。example.comuser_name@'192.168.1.%'user_name192.168.1

于 2012-07-31T15:01:20.187 回答
32

您只需使用 '%' 作为通配符,如下所示:

GRANT ALL ON *.* to root@'192.168.1.%' IDENTIFIED BY 'your-root-password';
于 2012-07-31T15:01:29.050 回答
17
mysql> GRANT ALL ON *.* to root@'192.168.1.%' IDENTIFIED BY 'your-root-password';  

通配符是“%”而不是“*”

于 2012-07-31T15:01:35.690 回答
9

只是我遇到的一个特殊性的注释:
考虑:

db server:  192.168.0.101
web server: 192.168.0.102

如果您在 mysql.user 中定义了一个用户,'user'@'192.168.0.102'使用密码 1 和另一个'user'@'192.168.0.%'使用密码 2,

然后,

如果您尝试使用密码 2 以“用户”身份从 Web 服务器连接到数据库服务器,

它将导致“拒绝访问”错误,因为 'user'@'192.168.0.102'在通配符身份验证上使用了单一 IP 身份'user'@'192.168.0.%'验证。

于 2016-06-02T12:55:15.687 回答
2

连接服务器并想在主机上连接后,您应该执行以下步骤:

  1. mysql打开mysql
  2. 写;GRANT ALL ON . to root@'write_your_ip_addres' IDENTIFIED BY 'write_password_to_connect'
  3. 按 control 和 X 退出 mysql
  4. nano /etc/mysql/my.cnf
  5. 在 my.cnf 文件夹中的 bind-address = 127.0.0.1之前写 #
  6. #绑定地址 = 127.0.0.1
  7. 使用 control + X 保存 my.cnf 文件夹
  8. service mysql restart
  9. 你可以通过主机上的 navicat 连接
于 2020-01-09T11:54:18.883 回答
2

受@Malvineaus 回答的启发,我自己尝试了一下,发现它对我不起作用。

您可以使用“192.168.1.%”或“192.168.1.0/255.255.255.0”指定子网掩码,但子网必须始终使用完整的八位字节。请参阅https://mariadb.com/kb/en/create-user/#host-name-component。结果,一种规范方式和另一种规范方式之间的功能是相同的。

例如 '192.168.1.0/255.255.255.128' 将不起作用,因为它不在完整的八位字节边界上。

于 2020-09-15T10:31:58.347 回答
1

MySQL 8.0.23 及以后的版本现在也支持 CIDR 表示法。

所以,基本上:

-- CIDR Notation
GRANT ... TO 'user'@'192.168.1.0/24' IDENTIFIED BY ...

-- Netmask Notation
GRANT ... TO 'user'@'192.168.1.0/255.255.255.0' IDENTIFIED BY ...
于 2021-02-18T07:22:51.727 回答