代码之家  ›  专栏  ›  技术社区  ›  Forrest Marvez

正在验证重置应用程序的用户Oracle密码

  •  1
  • Forrest Marvez  · 技术社区  · 14 年前

    这是编程和系统管理的混合,但我认为它更像是一个编程问题。

    当前正在构建用于管理Oracle用户帐户的密码管理Web应用程序(C)。

    作用域要求在允许用户设置新密码之前验证用户的Oracle用户名和密码。如果不创建用户密码表(哈希或其他方式,这是一个安全风险),如何验证旧用户密码?

    我当前的解决方案是尝试使用用户指定的用户名/密码连接到数据库。太多这样的尝试会将用户锁定在甲骨文端,因此暴力强迫并不太合理。我是否还有其他安全隐患,或者有更好的方法来处理?

    我们使用ad作为主要身份验证,但是ad帐户与oracle帐户没有关联,所以这只是一个初步检查。

    应用程序的流程(如果这有帮助):

    1. 检查适当域(Intranet)的AD
    2. 用户输入Oracle用户名/密码
    3. 输入旧密码、新密码+确认
    4. 如果正确,重置密码
    3 回复  |  直到 14 年前
        1
  •  1
  •   Jeffrey Kemp    14 年前

    正如dpbradley建议的那样,我将使用提供的凭据连接到数据库。如果成功,让他们更改密码。

        2
  •  1
  •   Gary Myers    14 年前

    oracle密码的散列算法是众所周知的,并且不难 duplicate . 因此,您可以获取用户的条目,使用相同的算法对其进行散列,并将其与散列值匹配。该值在11g之前的dba_用户或sys.user$中可见。

    这种方法的危险在于使散列可用,从而允许对密码进行暴力破解(这就是为什么11g使散列值不太可见的原因)。

        3
  •  0
  •   Ian Hern    14 年前

    当调用alter user时,您可以添加replace关键字,这样它只会在您输入了正确的旧密码(例如,alter user username identified by newpassword replace old password)时更改用户。在某些情况下,如果您输入了不正确的旧密码,这不会导致错误。但如果你遇到问题你可以查一下。