1

这是编程和系统管理员的混合体,但我认为它更多的是编程问题。

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

该范围要求在允许用户设置新密码之前验证用户 Oracle 用户名和密码。如果不创建用户密码表(散列或其他,这是一个安全风险),我如何验证旧用户密码?

我当前的解决方案是尝试使用用户指定的用户名/密码连接到数据库。在这方面的太多尝试会将用户锁定在 Oracle 端,因此暴力破解不太可能。我在这里是否还有其他安全风险,或者是否有更好的方法来处理这个问题?

我们使用 AD 作为主要身份验证,但 AD 帐户未绑定到 Oracle 帐户,因此这只是初步检查。

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

  1. AD 检查正确的域(Int​​ranet)
  2. 用户输入 Oracle 用户名/密码
  3. 输入旧密码,新密码+确认
  4. 如果正确,请重置密码
4

3 回答 3

1

散列 Oracle 密码的算法是众所周知的,不难复制。因此,您可以获取用户的条目,使用相同的算法对其进行哈希处理并将其与哈希值匹配。该值在 11g 之前的 DBA_USERS 中可见,否则在 SYS.USER$ 中可见。

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

于 2010-03-02T21:50:03.260 回答
1

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

于 2010-03-03T03:40:37.707 回答
0

调用 Alter User 时,您可以添加 Replace 关键字,这样只有在您输入了正确的旧密码时它才会更改用户(例如,alter user userName 由 newPassword replace oldPassword 识别。)在某些情况下,如果这样做不会导致错误您输入了错误的旧密码,但如果遇到问题,您可以查找它们。

于 2010-05-25T14:05:14.813 回答