防止未授权的软件访问MySQL数据库

4
我正在使用Java编写一个应用程序,希望使其能够访问远程MySQL服务器。 我的问题是,如果应用程序有用户名和密码,其他人可以拿走它们并使用不同的软件访问我的数据库。 有没有一种方法可以防止这种情况发生?
更新: 我找到了this连接到Android设备上的远程MySQL数据库的解决方法。 你需要在中间放置一个服务,比如一个PHP页面,将数据编码为JSON格式,Android应用程序通过http获取数据。 以下是我找到的示例:连接到MySQL数据库

你的意思是应用程序保存了硬编码的数据库凭据吗? - AlexR
是的,如果我使用Hibernate,那么这些都会在hibernate.cfg.xml文件中定义。 - yossi
4个回答

4

拥有用户名和密码的设计是为了特别授权访问数据库。这就是重点。

您可以采取额外的措施,如限制数据库连接到特定主机,以便至少您的付费客户可以访问数据库,而其他人则无法访问,但您的客户可能选择使用不同的软件来访问数据库。除非有授权条款,否则没有解决方法。

您可以在自己的硬件上运行中间程序,连接到数据库,并将数据库访问权限限制为受您直接管理控制的软件。您的程序将验证所有来自您客户控制下的软件的请求,并允许您想要允许的查询,并拒绝(并记录)您不必允许的查询。(您不需要发送原始SQL数据 - 您可以对数据和查询进行任意处理。)


0

您可以在应用服务器上设置JDBC数据源。这里是Oracle Glassfish的示例。

因此,您的凭据不会在代码/资源中使用。


据我所知,通过JNDI公开的jdbc连接将无法远程访问(超出当前JVM范围)。 - jatanp
你说得对。但是我没有从作者的帖子中看到这样的问题(使用另一个JVM的连接)。 - Artem

0
如果你说你有一个应用程序试图远程访问MySQL(不在同一台服务器上),那么我认为你不需要担心,因为你的应用程序代码建立的连接在尝试对MySQL服务器进行身份验证和授权时不会暴露用户名和密码。

它不会,但信息存储在软件内部,因此如果有人想要提取该信息,尤其是因为Java是一种解释性语言,他可以这样做。 - yossi
很多时候这是一个问题,应用程序配置XML中有大量的机密信息。我也想听听有哪些选项。 :D - OCB

0

您可以限制对MySQL服务器的访问,以便只有特定的IP地址或IP范围可以访问它。

另外,请确保您在应用程序中使用的用户仅具有对数据库所需的权限。例如,该用户可能不需要能够创建或删除表。您甚至可以在表和列级别为用户指定权限。


这并没有帮助,因为我不知道服务器将从哪些IP地址访问。 - yossi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接