如何从使用该程序的人隐藏MySQL数据库的密码

我用JDBC创建了一个java程序,它成功连接到我的计算机服务器的MySQL数据库,如下所示:

try { // The newInstance() call is a work around for some // broken Java implementations Class.forName("com.mysql.jdbc.Driver").newInstance(); } catch (Exception ex) { // handle the error } try { conn = DriverManager.getConnection(("jdbc:mysql://191.168.1.15:3306/databasename"), "username", "password"); // Do something with the Connection } catch (SQLException ex) { // handle any errors System.out.println("SQLException: " + ex.getMessage()); System.out.println("SQLState: " + ex.getSQLState()); System.out.println("VendorError: " + ex.getErrorCode()); } 

但是,如果有人想要找出密码,那么使用任何java反编译器都会非常简单。 我怎么能阻止他们找到密码或用户名呢?

当您让用户直接访问您的数据库时,您必须记住您已授予他们直接访问您的数据库的权限 。 你不能改变它。 没有任何加密或混淆可以使他们有权访问您的数据库。

所以你需要考虑,你真的希望他们能够访问你的数据库吗?

  • 如果您确实想要授予数据库访问权限,请确保正确设置权限。 例如,如果他们只需要读取权限,请确保您提供给他们的用户只具有读取权限。

  • 如果您实际上并不希望它们直接访问数据库,但您希望它们可以访问数据,那么根本不要将数据库密码放在程序 。 例如,您可能希望在数据库前设置Web服务,并让您的用户查询Web服务。 Web服务将具有数据库密码,但您的用户不会。

你没有。 这就是静态密码不好的原因。

通常,您在企业环境中执行的操作是使用外部身份validation方法(例如,LDAP,Active Directory)对数据库进行身份validation,然后使用组来确定用户所需的访问级别。

MySQL支持外部身份validation方法 。 MS SQL Server也可以。

将jdbc字符串移动到与已编译的类和/或jar文件分开的配置文件中。 这样,如果您分发代码,那么他们也需要您的配置文件。

这取决于您的申请。 如果要隐藏此信息,可以构建Web服务或Web应用程序。 这些数据是安全的。 否则,您通常不希望他们访问您的数据库,他们应该配置自己的数据库。

否则,您可以授予他们访问您的数据库的权限,并且该用户应具有其要求的相应权限,您应该检查数据库中的每个操作。

唯一的方法是使用加密密码并将其存储在单独的文件中。 要对其进行反编译,请使用webservice。

或者更好的方法,如果您不希望用户知道您的代码,请通过webservice创建完整的应用程序,这样客户端就可以访问外部API,而您无需将业务逻辑jar放在客户端计算机上。 我认为这是实现此案的最佳方式。

我建议使用代理,在查询后返回json或xml。 这样你就可以从服务器端构建安全性,设置蜜jar陷阱,为查询构建自己的编码器解码器,通过https发送内容以防止听众。

您还可以尝试将用户名和密码存储在字符串中并将其作为变量传递。 然后建立一个类似事物的复杂矩阵,并用它做看似复杂的事情,磨损黑客,这样他在两个小时后试图找到你的代码就失去了兴趣。

您还可以考虑将密码放在本机库dll或.so中,具体取决于您的平台…

问题仍然存在,黑客只需要实现你的代码,并且他有完全的访问权限,所以我强烈推荐代理。