【问题标题】:Limit MySQL requests限制 MySQL 请求
【发布时间】:2010-06-04 11:16:27
【问题描述】:

上下文: Java 客户端应用程序需要访问服务器端 MySQL 数据库。

需要:限制每个客户端对数据库的可能请求数(基于客户端的 IP)。

问题 1:是否可以仅通过更改 MySQL 数据库设置来做到这一点?

问题 2: 允许直接从客户端应用程序访问数据库是个好主意吗?还是我应该让客户端应用程序通过 TCP 与服务器端应用程序通信? (因此只允许服务器端应用程序访问数据库)

【问题讨论】:

    标签: java mysql client limit


    【解决方案1】:
    1. 是的。查看MySQL's GRANT statement 的语法。在 with_option 中,您可以指定MAX_QUERIES_PER_HOUR。您甚至可以在不影响其他权限的情况下为现有用户设置限制:

      db.* 上授予使用权限... REQUIRE SSL WITH MAX_QUERIES_PER_HOUR 120 MAX_UPDATES_PER_HOUR 100;

    2. 当然可以,只要客户端在数据库的内部网络上,并且只授予它们正常运行所需的最低权限。为所有客户端维护 MySQL 授权可能有些困难,但至少您将使用经过验证的安全系统,而不是尝试将安全系统重写为可能存在错误的服务器端应用程序。

    另见5.5.4. Setting Account Resource Limits

    【讨论】:

    • 您还可以控制(通过 mysql.user 表):max_questions、max_updates、max_connections、max_user_connections
    • 一个拒绝或允许在表级别上进行操作的安全系统对于大多数应用程序来说是勉强够用的。每个被允许更新其邮件地址的用户也将被允许更新同一个表中的所有其他值。读取也一样。这对于大多数应用程序来说是不可接受的。瘦 Web 服务层(例如带有 WSS4J 的 JAX-WS)要灵活得多。
    • 我已经修改了我的答案以明确指定客户端应该在内部网络上,正如@extraneon 明确提到的那样。数据库不得暴露在 Internet 上,因为这会带来太大的安全风险。
    • @sfussenegger:是的。我假设客户端只会执行 SELECT 和 INSERT 语句。如果需要更新,则“最小权限”子句被破坏。为“他们的数据”的每个客户端创建视图可能是不可行的,因此服务器端应用程序可能是促进更新的最佳选择。
    【解决方案2】:

    关于问题 2。

    我认为这取决于数据的敏感性、服务器和客户端之间的网络连接以及客户端的推出模式。

    • 敏感数据:我肯定会为此使用客户端-服务器-数据库解决方案。然后,您可以使用可能的客户端证书或读卡器实现 https 连接。
    • 网络连接:您不想将数据库公开到 Internet。曾经。但是,如果它是一个内部应用程序,只能从受保护的公司网络访问,并且数据不敏感,则直接数据库连接是可行的。正确处理行锁定或事务处理,否则您的用户将不高兴:)
    • 推出模式:如果应用程序正在积极开发,那么数据库模式很可能会随之改变,从而迫使客户端进行更新。使用中间服务器(例如 SOAP/XML),您可以将数据库模式与数据请求分离,并且您有更多空间来升级/更改数据库,而无需更新所有客户端。

    我个人会选择中间服务器,因为它更易于维护和优化。 Python 和 Java 都有很好的解决方案,可以让您快速创建具有数据库访问权限的 SOAP/XML 服务器。然后,您可以根据特定屏幕中的需要定义 XML 消息,使用适当的锁,并且不考虑 (ehm) 数据库模式。它将数据库模型与客户端中的MVC模型解耦,让客户端相对干净。

    【讨论】:

      【解决方案3】:
      1. 您可以限制用户和主机对数据库的访问。
      2. 这取决于您传递的数据的敏感性以及您使用的网络(Internet 或 LAN)。

      【讨论】:

      • 1) 我不想为每个客户端创建一个数据库用户。 (我只使用一个“客户端用户”。)但是如何限制主机(IP)的访问? 2) 我正在通过 Internet 传递重要的用户数据。
      【解决方案4】:

      客户端 -> 服务器 -> 数据库当然是最安全的方法,因为客户端 -> 数据库要求客户端应用程序包含数据库登录凭据。

      使用客户端 -> 服务器 -> 数据库使问题一无效:]。

      【讨论】:

        猜你喜欢
        • 2017-08-28
        • 2021-03-05
        • 2012-03-08
        • 2015-11-22
        • 2017-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多