如何授予远程访问整个子网的MySQL?

我可以使用此代码轻松授予对一个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。*远程访问数据库。

我怎样才能做到这一点?

编辑:考虑看和upvoting Malvineous在这个页面上的答案。 networking掩码是一个更优雅的解决scheme。


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

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

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

它看起来像你也可以使用networking掩码 ,例如

 GRANT ... TO 'user'@'192.168.0.0/255.255.255.0' IDENTIFIED BY ... 

你可以像这样使用'%'作为你的通配符:

 GRANT ALL ON *.* to root@'192.168.1.%' IDENTIFIED BY 'your-root-password'; 
 mysql> GRANT ALL ON *.* to root@'192.168.1.%' IDENTIFIED BY 'your-root-password'; 

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

只是我所面临的一个特点的说明:
考虑:

 db server: 192.168.0.101 web server: 192.168.0.102 

如果您在mysql.user中将用户定义为'user'@'192.168.0.102'与password1,另一个'user'@'192.168.0.%'与password2,

然后,

如果您尝试使用password2作为“user”从Web服务器连接到数据库服务器,

它会导致一个“访问被拒绝”的错误,因为单个'user'@'192.168.0.102'authentication用于通配符'user'@'192.168.0.%'authentication。