我创建了一个 java 应用程序,它使用 jdbc 连接到 sql 数据库。它是一个 Swing 应用程序。连接到数据库的代码在项目的文件之一中。 sql server 的用户名和密码是硬编码的。
我想要一个解决方案,这样我就可以连接到服务器(网络上具有数据库的计算机之一)而不直接在应用程序中写入密码,而应该从服务器上的某个文件中读取。如何做吗?
这里又出现了一个安全问题,我必须在应用程序中提供文件名。由于 jar 文件很容易被反编译以获得源代码,任何人都可以看到文件名并访问它。
如何解决这个安全问题?
最佳答案
我理解您的顾虑,但是没有办法完全您想要的。如果应用程序必须连接到数据库,它必须“知道”访问凭据。
“混淆”技术(如“加密密码并即时解密”或“从其他地方提取密码”)只是将问题转移到其他地方的缓和剂。
您应该考虑添加一个抽象层。您的应用程序应该访问仅提供应用程序所需的 CRUD 功能的远程网络服务,应用 Principle of least privilege .现代客户端-服务器体系结构的设计方式使得“富客户端”(如您的 Swing 应用程序)不直接与 DBMS 交互。是的,它速度较慢,但更安全且可扩展。此外,您的富客户端变得“不太富”(它不实现业务逻辑),从而避免了在您更改表等情况下更新它的需要。
使用网络服务还可以让您实现复杂的约束。例如,以在线帮助台为例。一个常见的规则是您不能在已关闭的工单上发布消息。你如何在 DBMS 中执行它?如果我可以登录到您的 DBMS,我可以为 closed
属性设置为 1
的票发布任意多的消息:除非某些某些 DBMS 甚至不支持繁琐的 CHECK 子句。
隐藏你的数据库!
将 REST 视为用于 Web 服务的 SOAP 的轻量级替代方案。在 Java 中,您可以使用 Jersey 快速创建 REST 服务器和客户端.
关于java - 使用 jdbc 连接到数据库的安全问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14181762/