在客户端 - 服务器应用程序中:如何向数据库发送用户的应用程序密码?

时间:2008-09-16 07:49:07

标签: java oracle security passwords

我有一个直接与DB(Oracle)连接的Java桌面应用程序。该应用程序有多个用户帐户。通过网络发送用户密码(而不是DB密码)的正确方法是什么?我不想以纯文本发送它

5 个答案:

答案 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.jaroraclepki.jarojpse.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禁用此功能。