代码之家  ›  专栏  ›  技术社区  ›  Telcontar

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

  •  2
  • Telcontar  · 技术社区  · 16 年前

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

    5 回复  |  直到 6 年前
        1
  •  5
  •   Mat Mannion    16 年前

    您可以通过安全套接字连接进行连接,或者在将密码发送到数据库(或者更好,两者都是)之前在本地散列密码——理想情况下,密码以纯文本形式存在的唯一时间是在散列之前。如果您可以在客户机端完成所有这些工作,那么越多越好。

        2
  •  4
  •   Csa77 Bartosz Radaczyński    6 年前

    您可以在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)以下JAR需要是类路径 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

        3
  •  2
  •   Haacked    16 年前

    同意,不要以明文形式发送用户选择的密码。但是,除了使用公共密钥加密之外,如果你通过电子邮件给他们发送一个密码,它将是明文的。我经常看到的一件事是,当用户忘记密码并请求将其发送给他们时,系统会生成一个新密码并发送 那个 一个给用户。然后用户可以更改密码。

    这样,用户选择的密码(用户可能在其他地方使用)就不会被发送,而他们的临时密码是明文发送的,他们应该很快就更改它。

        4
  •  0
  •   Niyaz    16 年前

    如果不想以纯文本形式发送数据,请使用加密!!!!

    使用一些加密算法,如aes、twofish等。

    您还必须考虑客户机和服务器的位置。如果它们都在同一台机器上,就没有使用加密。如果它们在不同的机器中,使用一些加密算法发送敏感数据。

    如果您正在检查密码的有效性,您只需发送密码的哈希即可。注意,只有当您自己比较密码时,此方法才有效。如果其他应用程序(超出您的控制)正在执行验证作业,则无法散列密码。

        5
  •  0
  •   eckes    16 年前

    如果您直接连接到没有中间层的数据库,那么应该考虑为每个实际用户使用一个数据库用户,否则您就不能真正保证应用程序的访问安全。

    如果使用ora*net连接到Oracle,用户密码将自动加密(从Oracle 8开始),但在某些情况下,它可能会返回到未加密的密码。这可以用禁用 ORA_ENCRYPT_LOGIN=true 在客户的环境中。