Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何避免在代码中显式写入MySQL数据库密码_Java_Mysql - Fatal编程技术网

Java 如何避免在代码中显式写入MySQL数据库密码

Java 如何避免在代码中显式写入MySQL数据库密码,java,mysql,Java,Mysql,我正在构建一些动态网站,可以从ApacheTomcat界面查询MySQL数据库。虽然数据库使用加密密码存储所有用户信息,但似乎我仍然需要在java代码中显式地写入密码(root或admin帐户)来验证用户。我觉得这不太安全。正确的方法是什么 谢谢大家! 要连接到数据库,您必须在某个地方有可用的密码,这几乎适用于任何应用程序。这就是为什么您使用其他安全层来阻止人们在不知何故发现密码时使用该密码 通常,数据库服务器是安全的,只允许来自其所在的本地计算机或其他计算机的有限白名单的连接。如果您没有为其他

我正在构建一些动态网站,可以从ApacheTomcat界面查询MySQL数据库。虽然数据库使用加密密码存储所有用户信息,但似乎我仍然需要在java代码中显式地写入密码(root或admin帐户)来验证用户。我觉得这不太安全。正确的方法是什么


谢谢大家!

要连接到数据库,您必须在某个地方有可用的密码,这几乎适用于任何应用程序。这就是为什么您使用其他安全层来阻止人们在不知何故发现密码时使用该密码

通常,数据库服务器是安全的,只允许来自其所在的本地计算机或其他计算机的有限白名单的连接。如果您没有为其他任何内容使用相同的密码,那么任何窃取该密码的人将不会比以前有更多的权限访问您的数据库,因为他们需要在服务器上使用该密码

如果有人设法进入您的服务器并可以编辑文件,则密码已经不相关,并且具有足够的权限,他们无论如何都不需要密码


正如AmazingDreams所说,您倾向于从一个配置文件中读取它,该文件提供了一个在引导应用程序和设置数据库连接时可以引用的位置。

正如其他人所说,它必须存储在某个地方,通常最好的位置是配置文件。也可以设置无密码的MySQL帐户(显然,在共享服务器上,或者如果您允许远程访问MySQL,或者有公开访问phpmyadmin之类的工具,这不是一个好主意)


您还应锁定用于网站的用户帐户的权限,并使用其他用户执行管理任务。例如,如果您的网站只需要从几个表中读取数据,请仅授予对这些表的SELECT访问权限。通常,网站用户不需要访问删除或清空表,也不需要插入事件日志类型的表。

因为您使用的是像Tomcat这样的应用程序服务器/servlet容器,所以您可以利用服务器的数据连接详细信息,只需从应用程序获取连接即可

在Tomcat中,您可以在context.xml文件中配置JDBC连接,在该文件中设置连接的驱动程序、URL、用户和密码。您还可以为此连接配置引用名称。Ej:

<Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
               maxActive="100" maxIdle="30" maxWait="10000"
               username="javauser" password="javadude" driverClassName="com.mysql.jdbc.Driver"
               url="jdbc:mysql://localhost:3306/javatest"/>

代码取自。

当我不得不分享代码时,我也很担心这一点。在php中,我使用一种简单的方法,即使用任何简单的函数(如base64)对de password进行编码,在代码中而不是实际的密码中,我编写编码的密码,并在某处调用解码函数。如果有人真的试图找出密码,安全性并不高,但足以避免每个偶然的观察者看到你的密码。这是用php编写的

在Java中您可以采取进一步的方法

  • 创建自定义编码和解码函数
  • 编码功能不包含在项目中,您只需使用它一次即可对密码进行编码
  • 您可以创建一个只有自定义解码函数的小型库,并将其包含在您的项目中进行编译,这样解码逻辑就不会被任何人看到
在您的代码中,您只需编写编码密码,并调用解码函数,如下所示:

public static final String PASSWD = DecodingHelper.decode ("THE_ENCODED_STRING");

从配置文件中读取它谢谢大家。这很有帮助。
Context initContext = new InitialContext();
Context envContext  = (Context)initContext.lookup("java:/comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/myoracle");
Connection conn = ds.getConnection();
public static final String PASSWD = DecodingHelper.decode ("THE_ENCODED_STRING");