在客户机-服务器应用程序:怎么送到该数据库用户的应用程序的密码?
题
我有一个Java桌面应用程序,直接连接的数据库(Oracle).该应用程序有多个用户账户。什么是正确的方法发送用户密码(不DB password)通过网络?我不想送它在纯文本
解决方案
你可以连接在一个安全的连接,或者散的密码之前,本地发送数据库(或者更好,既)-理想的情况下,唯一的一次密码,应该存在于纯文本形式是前哈希。如果你可以做所有这一切在客户方面,越多越好。
其他提示
你可以使用SSL之间的连接Oracle客户和Oracle数据库。配置SSL之间oracle客户和服务器使用JDBC:
在服务器的一面:
1)首先,听者必须配置使用的TCPS协议:
LISTENER = (ADDRESS_LIST= (ADDRESS=(PROTOCOL=tcps)(HOST=servername)(PORT=2484)))
WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=/server/wallet/path/)))
在客户面:
1)以下罐需要类路径
ojdb14.jar
, oraclepki.jar
, ojpse.jar
2)的网址的连接应该是:
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
同意,从来没有发送密码用户选择在明文。但是,短期使用公共钥匙加密,如果你给他们发电子邮件密码,这是要在明文。有一件事我见过经常发生的情况是,当用户忘记密码,并请它正在发送给它们,系统生成一个新的密码和发送 那 一个用户使用。然后,用户可以更改密码。
这样,密码用户选择了(这些用户可以使用其他)永远不会发送,而他们的临时发送密码明文的,他们应该改变它的到来之后。
如果你不想要发送的数据以纯文本,使用加密!!!
使用一些加密算法如AES,Twofish等。
你也必须考虑到哪你的客户和服务器。如果他们俩都是在同一台机器,就没有使用的使用加密。如果他们是在不同的机器,使用一些加密算法发送敏感的数据。
如果你正在检查有效性的密码,你可以发送的散列的密码。注意,这个方法将工作,如果你只是比较密码你自己。如果其他一些应用程序(出你的控制)是这样做的验证工作,你不能散的密码。
如果你直接连接的数据库没有中间层,应考虑使用数据库的用户对于每个真正的用户,因为否则你真的不能安全接入的应用程序。
如果你连接到Oracle与奥拉*净的用户密码是自动加密(自Oracle8)但是它可能回落到未加密的密码在一些情况。这可以是与残疾 ORA_ENCRYPT_LOGIN=true
在环境中的客户。