【发布时间】:2014-09-12 17:15:23
【问题描述】:
背景
我们有一个 Web 应用程序,它作为通用应用程序用户登录到 Oracle 数据库,但是由于历史原因,我们将所有用户用户都存储为 Oracle 数据库用户(我们针对 Oracle 数据库进行身份验证以将它们登录到Web应用程序)。我们还有其他 Oracle Forms 应用程序更直接地使用数据库用户(它们不能被删除)。
我正在尝试允许用户通过网络应用程序通用用户更改自己的密码。
问题
如何授予 Web 应用程序通用用户更改特定用户密码的能力,而不授予其更改超级用户密码的能力?如果有人以某种方式窃取了 Web 应用程序的凭据,我们希望限制损害。
Oracle 数据库通过以下方式支持这一点:
alter user user123 identified by new_password123 replace old_password123;
这对我们的目的非常有用,因为我们在将旧密码更改为新密码时会要求用户提供他们的旧密码。
不管有没有“replace”语法,我们都需要授予相同的权限,“alter user”,它授予通用 Web 应用程序用户太多的权力(例如,更改任何用户的密码,即使不知道旧密码)。
那么有没有办法设置权限,以便您可以更改任何您想要的密码,但前提是您知道旧密码?
【问题讨论】:
-
您可以创建一个通过
execute immediate发出alter的过程,并同时使用旧密码和新密码;您可以添加进一步检查以排除某些已知用户名。然后授予对该过程的权限,而不是授予alter any user。这对你有用吗? -
好的,谢谢。在你自己和下面的 Justin Cave 之间,我认为我走在正确的轨道上。