我刚刚意识到在我的可执行文件中没有最好的方法来隐藏MySQL字符串连接密码,尤其是在JAR文件中。即使在EXE中对其进行加密也只会减慢进程(尽管我不确定从EXE文件获取加密密码需要多长时间)。
所以,根据我的理解,我需要中间的东西来对数据库进行添加,编辑,删除等操作。看起来像REST API或SOAP服务的工作。
我的问题是,我应该使用哪一个?或者我应该使用其他东西?我在想Zend Framework来创建这些REST API。然后,我将使用Qt创建一个桌面应用程序来调用这些API。但是,如果我继续使用REST,我的应用程序将是一个3层应用程序。如果我只创建一个Web应用程序会不会更好?也许我应该坚持使用桌面应用程序调用那些API,因为应用程序已经完成,我只需要从直接连接到MySQL,再调用那些API来执行任务,而不是将整个应用程序更改为Web。
任何建议都会非常有帮助。提前谢谢。
更新
我正在寻找能够保护我的MySQL密码连接的安全性。
Obfuscator只会混淆代码,它不会隐藏我的字符串数据库信息,在我看来,使用像JAD反编译JAR后使用grep可以很容易地找到它。
关于我的申请:
我目前的解决方案(请注释):
答案 0 :(得分:3)
这取决于您正在寻找什么样的安全性。这是为了保护应用程序免受用户侵害吗?保护用户的数据免受其他用户的侵害?为了保护多个用户的数据?为了保护用户的数据免受攻击者的攻击?
在许多应用程序中,以纯文本格式存储数据库登录凭据没有任何问题。在其他情况下,您可以尝试:
请记住,没有完美的安全性,所以无论你选择什么都不需要牢不可破。它需要足够强大才能打破,以避免绕过安全机制的麻烦超过数据的价值。因此,例如,如果数据是扫雷中最高分的列表,那么ROT13可能就足够了。
修改强> 我只想补充一点,即使你不能在应用程序中硬编码加密密钥,也有Java,.NET和大多数其他流行语言/框架的混淆器。这些工具的关键用途之一是隐藏敏感的硬编码字符串,如加密密钥。
编辑2: 鉴于有关该应用程序的其他详细信息,在这种情况下只适用1,6和8。而正如乔治正确指出的那样,SOAP API更适合#6。
我还想提一下,是 Java资源混淆器,用于加密字符串文字。 This只是一个例子。
答案 1 :(得分:2)
这很大程度上取决于您的应用运行的环境
a)db和客户端本地
b)本地网络中的数据库和客户端
c)db在互联网上
我的两分钱:
a)我会创建一个单独的db用户,不会使用密码,但会限制对localhost的访问权限
b)直接连接到数据库是好的,但我希望每个用户都必须使用自己的密码登录并仅授予他所需的权限。
c)允许mysql连接到公共服务器是个坏主意。在这种情况下,webservices将是一个很好的解决方案。
无论如何,如果您的案例是b或c,我会坚持使用用户的登录对话框。
也许你应该看看这个http://www.greensql.net/工具。
它就像一个防火墙,但对于mysql / postresql
所以你可以拒绝任何东西,只允许你想要的查询。
答案 2 :(得分:1)
如果您使用Java实现数据库桌面应用程序,我建议使用Java DB作为数据库。有几种方法可以保护它,并且在连接字符串中有密码的替代方法。我建议阅读Java DB Security - Security Features in Java DB Release 10.4
使用Java DB轻松部署应用程序,因为您可以将大部分内容嵌入到同一个jar文件中。我在用Java实现的销售点应用程序中使用它。