【问题标题】:How to grant remote access to MySQL for a whole subnet?如何为整个子网授予对 MySQL 的远程访问权限?
【发布时间】:2012-07-29 09:18:39
【问题描述】:

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

我该怎么做?

【问题讨论】:

    标签: mysql grant


    【解决方案1】:

    MySQL 8.0.23 onwards 现在也支持 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 ...
    

    【讨论】:

      【解决方案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' 将不起作用,因为它不在完整的八位字节边界上。

      【讨论】:

        【解决方案3】:

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

        1. mysql打开mysql
        2. 写信GRANT ALL ON <em>.</em> 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. #bind-address = 127.0.0.1
        7. 用 control + X 保存 my.cnf 文件夹
        8. 写信service mysql restart
        9. 您可以通过主机上的 navicat 进行连接

        【讨论】:

          【解决方案4】:

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


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

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

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

          【讨论】:

          • 我只是这样做了,但是,比如说,是什么使它不适用于:user_name@'192.168.1.my-hacked-rnds.killing.mysql.com'????我现在继续,因为这是 MySQL,我觉得我不想知道答案。
          • +Florian,我认为它比简单地使用 '%' 要好,因为它确实增加了必须克服的安全层,但我认为你确实说明了它的弱点。我当然会通过其他方式补充此配置,例如将数据库服务器锁定在一个单独的子网中,我可以通过防火墙控制访问以消除您的顾虑等。
          • 像 '192.168.1.my-hacked-rnds.killing.mysql.com'' 这样的例子在dev.mysql.com/doc/refman/5.5/en/account-names.html 中得到了特别的解决:为了阻止这种尝试,MySQL 不允许匹配主机名以数字和点开头。 ... IP 通配符值只能匹配 IP 地址,不能匹配主机名。
          【解决方案5】:

          looks like you can also use a netmask,例如

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

          【讨论】:

          • 这应该是公认的答案,因为它是唯一技术正确的答案。至少从 5.5 开始支持:dev.mysql.com/doc/refman/5.5/en/account-names.html
          • 不要尝试使用像“172.16.0.0/16”这样的 CIDR 表示法,这不起作用。始终使用完整的网络掩码。
          • 看来您必须使用范围内的第一个 IP 地址;使用例如 192.168.0.34/255.255.255.0 将失败!
          • @SanderBackus: 192.160.0.34/255.255.255.0192.168.0.34/24 相同,这实际上没有意义(/24 表示最后一个数字可以从 0 到 255,忽略您的值 34)。如果您对 IP 使用有效的掩码,例如 192.168.0.34/255.255.255.252,它是否有效?
          • @Malvineous 这就是我的观点。如果使用 192.160.0.34/255.255.255.0 mysql 不允许使用 192.160.0.34。我的意思是允许完整的 /24 (是的,我使用了完整的网络掩码,如文档所示),但显然如果你必须使用 192.160.0.0/255.255.255.0 来允许完整的范围。
          【解决方案6】:

          只是记录我遇到的一个特殊性:
          考虑:

          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 服务器连接到数据库服务器,

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

          【讨论】:

          • 我不确定这是对问题的回答。如果它没有直接回答原始问题,则应将其作为评论发布。
          • Kmeixner ,你希望他在评论中写这么多吗?运用一些常识,不要再做机器人了。这个社区是为了帮助开发者不要让他们的生活变得困难。
          • 感谢您的宝贵建议。
          【解决方案7】:
          mysql> GRANT ALL ON *.* to root@'192.168.1.%' IDENTIFIED BY 'your-root-password';  
          

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

          【讨论】:

            【解决方案8】:

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

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

            【讨论】:

              猜你喜欢
              • 2016-12-21
              • 1970-01-01
              • 2016-07-05
              • 2011-09-18
              • 2014-04-17
              • 1970-01-01
              • 1970-01-01
              • 2016-03-16
              • 1970-01-01
              相关资源
              最近更新 更多