使用JDBC时,字符串或char []是否有密码?

时间:2013-12-03 03:34:54

标签: java string jdbc passwords char

这来自安全的观点。最佳实践说不使用String来存储密码,而是使用char []。这是否适用于随时使用密码?例如,使用JDBC时可以使用String来保存密码吗?

public final void Login(String username, String password){
...
conn = DriverManager.getConnection(url, username, password);
...
}

或者可以使用char []代替String吗?

2 个答案:

答案 0 :(得分:3)

我不知道我接受的前提是char []在系统资源(例如JDBC数据库连接)的上下文中比字符串更安全。无论如何,您可以使用连接管理器(或连接池,适用于您的容器),然后连接管理器(只有连接管理器)可以看到基础数据库用户名/密码。

答案 1 :(得分:1)

java中的字符串是不可变的,一旦你创建它,它就无法改变,因此无论何时我们说 String s =“abc”; S = “DEF”; 它们不引用相同的字符串,而是创建“abc”字符串对象,s引用它,当我们说s =“def”时,另一个字符串对象“def”由s引用,因此放弃“abc”。

所以“abc”留在堆中,现在假设这是一个高度安全的密码浮动在堆中等待被某个错误的一方访问。

这就是为什么鼓励使用char []作为密码。

还有其他替代方案,如StringBuffer。