如何为整个子网授予对MySQL的远程访问权限?

sky*_*ar7 80 mysql grant

我可以使用以下代码轻松授予对一个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;
Run Code Online (Sandbox Code Playgroud)

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

我怎样才能做到这一点?

Mal*_*ous 92

看起来像你也可以使用一个网络掩码,如

GRANT ... TO 'user'@'192.168.0.0/255.255.255.0' IDENTIFIED BY ...
Run Code Online (Sandbox Code Playgroud)

  • 不要尝试使用像"172.16.0.0/16"这样的CIDR表示法,这不起作用.始终使用完整的网络掩码. (6认同)
  • 这应该是公认的答案,因为它是唯一技术上正确的答案.支持至少5.5:http://dev.mysql.com/doc/refman/5.5/en/account-names.html (5认同)
  • 看来您必须使用该范围内的第一个 IP 地址;例如使用 192.168.0.34/255.255.255.0 将失败! (2认同)

p0l*_*ear 91

编辑:考虑在这个页面上查看并提升Malvineous的答案.Netmasks是一个更优雅的解决方案.


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

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

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

  • 像"192.168.1.my-hacked-rnds.killing.mysql.com""是专门解决在https://dev.mysql.com/doc/refman/5.5/en/account-names.html实例:_To箔这样的尝试,MySQL不允许匹配以数字和点开头的主机名.... IP通配符值只能匹配IP地址,而不能匹配主机名._ (18认同)
  • 我只是这样做了,但是,比如,什么使它不适用于:user_name@'192.168.1.my-hacked-rnds.killing.mysql.com'???? 我现在继续,因为这是MySQL,我觉得我不想知道答案. (5认同)

Mik*_*ant 28

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

GRANT ALL ON *.* to root@'192.168.1.%' IDENTIFIED BY 'your-root-password';
Run Code Online (Sandbox Code Playgroud)


Dav*_*len 12

mysql> GRANT ALL ON *.* to root@'192.168.1.%' IDENTIFIED BY 'your-root-password';  
Run Code Online (Sandbox Code Playgroud)

通配符是"%"而不是"*"


sit*_*443 8

只是我面临的一个特殊性的说明:
考虑:

db server:  192.168.0.101
web server: 192.168.0.102
Run Code Online (Sandbox Code Playgroud)

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

然后,

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

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

  • Kmeixner,你指望他在评论里写这么多?应用一些常识,不要再做机器人了。这个社区是为了帮助开发人员不要让他们的生活变得困难。 (15认同)
  • 我不确定这是对问题的回答。如果它没有直接回答原始问题,则应将其作为评论发布。 (2认同)