5

我用 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 反编译器都会非常简单。就此而言,我如何能够阻止他们找到密码或用户名?

4

6 回答 6

10

当您让您的用户直接访问您的数据库时,您必须记住您已经让他们直接访问您的数据库。你无法改变这一点。再多的加密或混淆都无法消除他们对您数据库的访问权限。

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

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

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

于 2012-07-08T07:19:26.557 回答
1

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

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

MySQL 确实支持外部身份验证方法。MS SQL Server 也是如此。

于 2012-07-08T07:23:43.300 回答
0

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

于 2012-07-08T07:19:36.163 回答
0

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

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

于 2012-07-08T07:20:59.713 回答
0

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

您还可以尝试将用户名和密码存储在字符串中并将它们作为变量传递。然后构建一个由相似事物组成的复杂矩阵,并用它做看似复杂的事情,以削弱黑客,让他在尝试找到您的代码两小时后失去兴趣。

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

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

于 2012-07-08T07:32:44.707 回答
0

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

或者更好的方法,如果你不想让用户知道你的代码,通过webservice创建完整的应用程序,这样客户端就可以访问外部api,你不需要把你的业务逻辑jar放在客户端机器上。我认为这是实现此案的最佳方法。

于 2012-07-08T07:29:51.663 回答