【发布时间】:2010-06-04 11:16:27
【问题描述】:
上下文: Java 客户端应用程序需要访问服务器端 MySQL 数据库。
需要:限制每个客户端对数据库的可能请求数(基于客户端的 IP)。
问题 1:是否可以仅通过更改 MySQL 数据库设置来做到这一点?
问题 2: 允许直接从客户端应用程序访问数据库是个好主意吗?还是我应该让客户端应用程序通过 TCP 与服务器端应用程序通信? (因此只允许服务器端应用程序访问数据库)
【问题讨论】:
上下文: Java 客户端应用程序需要访问服务器端 MySQL 数据库。
需要:限制每个客户端对数据库的可能请求数(基于客户端的 IP)。
问题 1:是否可以仅通过更改 MySQL 数据库设置来做到这一点?
问题 2: 允许直接从客户端应用程序访问数据库是个好主意吗?还是我应该让客户端应用程序通过 TCP 与服务器端应用程序通信? (因此只允许服务器端应用程序访问数据库)
【问题讨论】:
是的。查看MySQL's GRANT statement 的语法。在 with_option 中,您可以指定MAX_QUERIES_PER_HOUR。您甚至可以在不影响其他权限的情况下为现有用户设置限制:
在
db.* 上授予使用权限... REQUIRE SSL WITH MAX_QUERIES_PER_HOUR 120 MAX_UPDATES_PER_HOUR 100;
当然可以,只要客户端在数据库的内部网络上,并且只授予它们正常运行所需的最低权限。为所有客户端维护 MySQL 授权可能有些困难,但至少您将使用经过验证的安全系统,而不是尝试将安全系统重写为可能存在错误的服务器端应用程序。
【讨论】:
关于问题 2。
我认为这取决于数据的敏感性、服务器和客户端之间的网络连接以及客户端的推出模式。
我个人会选择中间服务器,因为它更易于维护和优化。 Python 和 Java 都有很好的解决方案,可以让您快速创建具有数据库访问权限的 SOAP/XML 服务器。然后,您可以根据特定屏幕中的需要定义 XML 消息,使用适当的锁,并且不考虑 (ehm) 数据库模式。它将数据库模型与客户端中的MVC模型解耦,让客户端相对干净。
【讨论】:
【讨论】:
客户端 -> 服务器 -> 数据库当然是最安全的方法,因为客户端 -> 数据库要求客户端应用程序包含数据库登录凭据。
使用客户端 -> 服务器 -> 数据库使问题一无效:]。
【讨论】: