我们可以为用户提供一个oracle权限吗?该权限只能更改其他用户的密码



我创建了一个过程,如下所示。这个过程出现在schema1中,并试图修改另一个模式/用户(比如schema2(的密码。为了实现这一点,用户schema1必须已经更改了用户权限,但由于应用程序级别的一些限制,我无法向schema1提供alter user权限。我尝试在过程中使用ALTER SESSION进行查询,但它不起作用。有人能帮我解决这个问题吗?

代码:

Procedure p_demo(p_schema in varchar, p_pswd in varchar2)
is
begin
execute immediate 'alter session set current_schema ='||p_schema;
execute immediate 'alter user '||p_schema||' identified by '||p_pswd;
end;

更改current_schema对权限或当前登录的用户没有影响。它只是更改对象名称解析的工作方式。如果在current_schema设置为schema1时查询对象foo,Oracle将在schema1模式中查找,而不是在当前用户的模式中查找。它不会让您访问schema1.foo表。

我不太确定我是否理解这个目标。如果您试图确保只有schema2用户可以更改schema2用户的密码,则可以定义使用调用方权限而不是定义方权限的过程。

create or replace procedure change_my_password( p_username in varchar2, 
p_password in varchar2 )
authid current_user
is
begin
execute immediate 'alter user '||p_username||' identified by '||p_password;
end;
/

如果目标是让程序归schema1所有,并允许schema2用户以外的用户更改schema2的密码(即允许应用程序用户或帮助台用户重置用户的密码(,则schema1可能需要alter user权限。否则,这可能是不可行的。

如果你真的很绝望,你可能会使用未记录的(我在这里强调的是未记录的,随时可能更改,可能会有奇怪的副作用,可能会让Oracle支持部门不满意(dbms_sys_sql包。这是APEX在内部使用的包,用于作为其他用户运行代码。我不认为一个理智的DBA会考虑给应用程序用户execute访问该包的权限,而不是更安全的alter user权限,但如果你试图绕过一些公司策略,而不太关心实际的安全性。。。

本例涉及3个用户:

  • scott,试图更改他人的密码(这是您的schema1(
  • mike,其密码应更改(您的schema2(
  • mydba,他在我的数据库中被授予DBA角色(如果你没有这样的用户,SYS可以,但是-你宁愿有自己的"DBA"用户,如果不必的话,不要惹SYS(

连接为scott,我无法修改mike的密码:

SQL> alter user mike identified by lion;
alter user mike identified by lion
*
ERROR at line 1:
ORA-01031: insufficient privileges

我将以mydba的身份连接,并创建一个类似于您的存储过程:

SQL> connect mydba/mypwd@c11gt
Connected.
SQL> create or replace procedure p_demo (p_schema in varchar2, p_pswd in varchar2) is
2  begin
3    execute immediate 'alter user ' || p_schema || ' identified by ' || p_pswd;
4  end;
5  /
Procedure created.
SQL> exec p_demo('mike', 'lion');
PL/SQL procedure successfully completed.

OK;它是有效的。我会将execute权限授予scott:

SQL> grant execute on p_demo to scott;
Grant succeeded.

返回scott;看看他现在能做什么:

SQL> connect scott/tiger@c11gt
Connected.
SQL> exec mydba.p_demo('mike', 'friday');
PL/SQL procedure successfully completed.

mike的凭据有效吗?

SQL> connect mike/friday@c11gt
Connected.
SQL>

是的,一切都很好。


所以:您不必将alter user授予schema1;让它使用特权用户拥有的过程,该特权用户可以更改其他人的密码。

我们不能如下所示:尝试过这样做,但没有成功。我想做的基本上是给一个角色赋予alter用户权限,并将该角色分配给我的oracle过程。创建角色role_name;将ALTER USER授予角色名称将role_name上的所有内容授予过程

最新更新