如何写sql语句恢复11g oracle数据库用户密码

Posted

技术标签:

【中文标题】如何写sql语句恢复11g oracle数据库用户密码【英文标题】:How to write sql statement to restore 11g oracle database user's password 【发布时间】:2012-03-27 19:47:38 【问题描述】:

在 Oracle 11g 中,我知道我可以执行以下操作:

select spare4 from user$ where name='BOB';

得到

'S:06A5CA37447558898739F8475FB32C4E4267AD4615F93BD3443028FDB8D6'

那我就可以了

alter user BOB identified by values 'S:06A5CA37447558898739F8475FB32C4E4267AD4615F93BD3443028FDB8D6'

恢复密码。 如何将它们组合在一起,以下将不起作用?

alter user BOB identified by values (select spare4 from user$ where name='BOB');

有错误

alter user BOB identified by values (select spare4 from user$ where name='BOB')
                                   *
ERROR at line 1:
ORA-02153: invalid VALUES password string

另外,如何避免两次输入用户名(此处为 BOB)?理想情况下,我想为dba_users 中的每个用户执行此alter 操作。

非常感谢!

【问题讨论】:

【参考方案1】:

我会编写一个简短的 PL/SQL 脚本来完成它:

DECLARE
BEGIN
  FOR R IN (SELECT 'ALTER USER '||name||' IDENTIFIED BY VALUES '''||spare4||'''' AS s FROM user$ WHERE name <> 'ANONYMOUS') LOOP
    EXECUTE IMMEDIATE R.s;
  END LOOP;
END;
/

You can't use a subquery in DDL.

【讨论】:

谢谢!太好了。只是想知道您是否知道为什么用户ANONYMOUS,因为它的spare4 是空的,所以它不起作用。如何修改脚本以解决这种极端情况? 您可以在驱动循环的 SELECT 语句中排除 ANONYMOUS。答案已更新。 当然。但我需要未过期的ANONYMOUS,因为它目前也已过期。我该怎么做? 在运行脚本之前更改或设置 ANONYMOUS 的密码以使密码过期。然后你也可以删除脚本中的 WHERE 子句。 真的很抱歉。但是如何不留下ANONYMOUS的密码呢? alter user ANONYMOUS identified by values ''; 不起作用,出现错误 ORA-00600: internal error code, arguments: [kzsviver:1], [], [], [], [], [], [], [], [], [], [], [] 【参考方案2】:

你当然可以写一点 PL/SQL

DECLARE
  l_sql_stmt VARCHAR2(1000);
BEGIN
  FOR u IN (SELECT * FROM user$)
  LOOP
    l_sql_stmt := 'ALTER USER ' || name || 
                  ' IDENTIFIED BY VALUES ''' ||
                  u.spare4 ||
                  '''';
    EXECUTE IMMEDIATE l_sql_stmt;
  END LOOP;
END;

不过,我更担心会更改数据库中每个用户的密码的任何事情。有充分的理由更改单个用户的密码,做某事,然后在不知道原始密码的情况下将其更改回来,这已经很不寻常了。我很难想象需要对几十个帐户这样做。

【讨论】:

以上是关于如何写sql语句恢复11g oracle数据库用户密码的主要内容,如果未能解决你的问题,请参考以下文章

只有一个dmp文件 怎么恢复oracle数据库 !

oracle 11g怎么创建用户表,就是能够在可视化界面里看见和操作,要有图片说明的,视频也行,新手求解?

『ORACLE』 PLSQL动态游标的使用(11g)

Oracle11g备份与恢复

oracle11g中有执行语句和执行脚本,有啥区别?

oracle11g 数据文件误删恢复(无备份)