我有一个直接与DB(Oracle)连接的Java桌面应用程序。该应用程序有多个用户帐户。通过网络发送用户密码(而不是DB密码)的正确方法是什么?我不想以纯文本发送它
答案 0 :(得分:5)
您可以通过安全套接字连接进行连接,或者在将密码发送到数据库之前在本地散列密码(或者更好,两者都有) - 理想情况下,密码应该以纯文本形式存在的唯一时间是散列之前。如果你能在客户端做到这一切,那就更好了。
答案 1 :(得分:4)
您可以在Oracle客户端和Oracle数据库之间使用SSL连接。使用JDBC在oracle客户端和服务器之间配置SSL:
在服务器端:
1)首先,必须将侦听器配置为使用TCPS协议:
LISTENER = (ADDRESS_LIST= (ADDRESS=(PROTOCOL=tcps)(HOST=servername)(PORT=2484)))
WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=/server/wallet/path/)))
在客户端:
1)以下jars需要是classpath
ojdb14.jar
,oraclepki.jar
,ojpse.jar
2)用于连接的URL应为:
jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=servername)(PORT=2484))(CONNECT_DATA=(SERVICE_NAME=servicename)))
3)需要设置以下属性(作为系统属性(-D选项)或连接属性)
javax.net.ssl.trustStore,
javax.net.ssl.trustStoreType,
javax.net.ssl.trustStorePassword
参考:http://www.oracle.com/technology/tech/java/sqlj_jdbc/pdf/wp-oracle-jdbc_thin_ssl_2007.pdf
答案 2 :(得分:2)
同意,永远不要发送用户在纯文本中选择的密码。但是,如果您使用公钥密码术,如果您通过电子邮件向他们发送密码,那么它将是明文密码。我经常看到的一件事是,当用户忘记密码并请求将密码发送给他们时,系统会生成一个新密码并将 密码发送给用户。然后,用户可以更改密码。
这样,用户选择的密码(用户可能在其他地方使用的密码)永远不会被发送,而他们的临时密码是以明文形式发送的,他们应该很快就会改变它。
答案 3 :(得分:0)
如果您不想以纯文本格式发送数据,请使用加密!!!
使用一些加密算法,如AES,Twofish等。
您还必须考虑客户端和服务器的位置。如果它们都在同一台机器上,则不使用加密。如果它们位于不同的计算机中,请使用一些加密算法来发送敏感数据。
如果您正在检查密码的有效性,则可以发送密码的哈希值。请注意,只有在您自己比较密码时,此方法才有效。如果某个其他应用程序(由您无法控制)正在执行验证作业,则无法对密码进行哈希处理。
答案 4 :(得分:0)
如果直接连接到没有中间层的数据库,则应考虑为每个真实用户使用数据库用户,否则您无法真正保护应用程序的访问权限。
如果使用ORa * Net连接到Oracle,则会自动加密用户密码(自Oracle 8起),但在某些情况下可能会回退到未加密的密码。可以在客户端环境中使用ORA_ENCRYPT_LOGIN=true
禁用此功能。