java - 使用 jdbc 连接到数据库的安全问题

标签 java sql security jdbc

我创建了一个 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/

相关文章:

java - 从lastfm.rdfize.com 添加RDF 模型

java - 对于有关构建搜索引擎的学术项目,什么是基于 Java 的优秀爬虫?

mysql - SQL 返回最受欢迎/不受欢迎类别的名称

javascript - 跨域ajax同步调用检索纯文本

perl open() 注入(inject)预防

java - 有没有办法在Java中内存映射大于Integer.MAX_VALUE的文件?

java - 似乎 <br 正在进入我的 JSON 响应

c# - 在 ASP.NET (C#) 中实现安全、唯一的 "single-use"激活 URL

c# - 如何将图像存储到 varbinary(max) 列?

mysql - MySQL 中何时使用单引号、双引号和反引号