这更像是我身边的一般思想和猜测,是计算机科学的学生。 让我们设置场景: 让我们假设我已经用Java创建了一个很棒的应用程序,我打算将来销售。 java应用程序具有复杂的结构,并使用JDBC等连接到数据库以连接到DB,从DB中的某个表获取信息,然后使用该数据。 为了能够将Java程序连接到DB,我必须为程序提供DB的一些信息,例如链接,DB的用户名和密码。 我的数据库拥有很多我不希望别人在没有权限的情况下看到的信息。 但是这些信息在我创建的java代码中清晰可见。在将应用程序编译成JAR文件或.EXE文件后,我有多确定没有人可以访问此信息?
这可能是一个愚蠢的问题,但我只是好奇。
由于
答案 0 :(得分:1)
不要编译用户&密码值到Java应用程序中。编写应用程序,能够从外部属性文件中读取这些值。然后,您的客户有责任限制对 文件的访问权限,以便只有受信任的用户才能阅读或更改。
答案 1 :(得分:1)
除了安全问题之外,数据库连接字符串,用户名和密码等配置不是已发布应用程序的一部分,而是特定于安装的设置。所有应用程序需要做的是为最终用户提供一种简单的方法来拼出这些设置(例如属性文件,xml等等)。
使用这种方法,用户有责任保护用户名和密码。
答案 2 :(得分:0)
简短的回答,你不能。如果它在jar或exe中,它将是可见的。最好的办法是加密编译好的文件。
答案 3 :(得分:0)
实际上没有办法阻止某人将代码反编译回类似于其原始状态的东西。你可能会让它变得更加困难,但如果有人确定,他们可以将其恢复为代码形式。因此,正确的响应是不将任何敏感信息放入您的Java代码中。把它放在其他地方。
在这种情况下,您可以考虑将您希望客户端访问的信息在数据库中移动到不包含敏感信息的其他数据库。或者,如果您的数据库软件允许,则在数据库上创建一个新用户,该用户只能访问客户端将查看的数据,并在您的Java程序中使用该登录。
编辑:mysql用户
要在mysql中创建新用户,请运行以下命令:
CREATE USER 'username'@'hostname' IDENTIFIED BY 'password';
如果您希望同一个用户可以从任何主机访问,请hostname
替换%
默认情况下,此用户创建时没有权限,因此现在添加权限。这是一个例子
GRANT [permission_level] ON database.table TO 'username'@'hostname';
将表名替换为*
以指定数据库中的每个表。
有关这些选项语法的完整说明,请点击此处:CREATE,GRANT
这可以帮助您限制谁可以访问mysql数据库中的内容。