我理解你的担忧,但没有办法完全达到你想要的。如果应用程序必须与数据库连接,它必须“知道”访问凭据。
“混淆”技术(如“加密密码并即时解密”或“从其他地方提取密码”)只是将问题转移到其他地方的缓解措施。
您应该考虑添加一个抽象层。您的应用程序应该访问仅提供应用程序所需的 CRUD 功能的远程 Web 服务,并应用最小权限原则。现代客户端-服务器架构的设计方式是“富客户端”(如您的 Swing 应用程序)不直接与 DBMS 交互。是的,它速度较慢,但更安全且可扩展。此外,您的富客户端变得“不那么丰富”(它不实现业务逻辑),因此例如,如果您更改表,则无需更新它。
使用 Web 服务还使您能够实施复杂的约束。例如,以在线帮助台为例。一个常见的规则是您不能在已关闭的工单上发布消息。你如何在 DBMS 中执行它?如果我可以登录到您的 DBMS,我可以为closed
属性设置为的票发布尽可能多的消息1
:除非某些 DBMS 甚至不支持某些繁琐的 CHECK 子句,否则没有任何东西会强制执行约束。
隐藏你的数据库!
将 REST 视为用于 Web 服务的 SOAP 的轻量级替代方案。在 Java 中,您可以使用Jersey快速创建 REST 服务器和客户端。