您好,我很好奇如何安全地从 java 链接到 mysql。我唯一想不通的是如何使密码远离纯文本!任何帮助都很棒。
4 回答
MySQL Connector/J 8.0 文档的这一部分解释了如何使用 SSL 和客户端证书来保护 JDBC 连接。这样,您根本不需要使用密码。
使用JDBC进行数据库连接。据,直到...为止
保持密码不是纯文本
如果某处有纯文本密码,如何连接它?我想说只使用生成的 128 位密码,然后对其进行加密。也许有一个您的程序加载的属性文件不是项目的一部分,然后从那里获取它?
另一种选择只是使用 SSH 身份验证,这将完全绕过密码。
查看MessageDigest 类的文档:
此 MessageDigest 类为应用程序提供消息摘要算法的功能,例如 MD5 或 SHA。消息摘要是一种安全的单向散列函数,它采用任意大小的数据并输出固定长度的散列值。
调用getInstance("MD5")
以获取您可以使用的 MD5 消息摘要。
好吧,这并不是那么难。只需下载 MYSQL 连接器,将其添加到您的路径,然后在其上触发 PreparedStatement,如下所示:
Class.forName("com.mysql.jdbc.Driver");
Connection connect = DriverManager
.getConnection("jdbc:mysql://localhost/dbname?"
+ "user=myusername&password=mypassword");
PreparedStatement preparedStatement = connect
.prepareStatement("select * from employees");
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
//display text
}
preparedStatement.close();
connect.close();
然后,您可以执行类似 resultSet.getString() 之类的操作来获取所需的值,然后将它们转换为您想要的任何值,以防列太多并且表不稳定。如果不是,那么您可以使用 getInteger()、getDouble() 等。
在这里查看更多:
http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html http://docs.oracle.com/javase/6/docs/api/java/sql/ResultSet.html
现在,您可以使用散列策略来散列,即屏蔽您的密码。您可以将此代码放在另一个包中,您当前的代码链接以获取这些值。