限制MySQL请求

时间:2010-06-04 11:16:27

标签: java mysql client limit

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

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

问题1:是否可以通过更改MySQL数据库设置来实现此目的?

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

4 个答案:

答案 0 :(得分:4)

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

      

    db上授予使用权。*要......使用MAX_QUERIES_PER_HOUR要求SSL 120 MAX_UPDATES_PER_HOUR 100;

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

  3. 另见5.5.4. Setting Account Resource Limits

答案 1 :(得分:3)

关于问题2.

我认为这取决于数据的敏感性,服务器与客户端之间的网络连接以及客户端的推出架构。

  • 敏感数据:我肯定会使用客户端 - 服务器 - 数据库解决方案。然后,您可以使用可能的客户端证书或读卡器实现https连接。
  • 网络连接:您不希望将数据库公开给互联网。永远。但如果它是内部应用程序,只能从受保护的公司网络访问,并且数据不敏感,则直接数据库连接是可行的。请正确处理行锁定或事务处理,否则您的用户将不满意:)
  • 部署架构:如果应用程序是主动开发的,那么数据库架构很可能会随之更改,从而迫使客户端进行更新。使用中间服务器(例如,SOAP / XML),您可以将数据库模式与数据请求分离,并且您有更多空间来升级/更改数据库而无需更新所有客户端。

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

答案 2 :(得分:2)

  1. 您可以限制用户和主机对数据库的访问。
  2. 这取决于您传递的数据和您使用的网络(Internet或LAN)的敏感度。

答案 3 :(得分:1)

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

与客户合作 - >服务器 - >数据库使问题1无效:]。