首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何编写sql语句还原11g oracle数据库用户密码

如何编写sql语句还原11g oracle数据库用户密码
EN

Stack Overflow用户
提问于 2012-03-28 03:47:39
回答 2查看 5.6K关注 0票数 1

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

代码语言:javascript
运行
复制
select spare4 from user$ where name='BOB';

并获取

代码语言:javascript
运行
复制
'S:06A5CA37447558898739F8475FB32C4E4267AD4615F93BD3443028FDB8D6'

然后我就可以做

代码语言:javascript
运行
复制
alter user BOB identified by values 'S:06A5CA37447558898739F8475FB32C4E4267AD4615F93BD3443028FDB8D6'

恢复密码。我如何将它们组合在一起,下面的内容将不起作用?

代码语言:javascript
运行
复制
alter user BOB identified by values (select spare4 from user$ where name='BOB');

带着错误

代码语言:javascript
运行
复制
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操作。

非常感谢!

EN

回答 2

Stack Overflow用户

发布于 2012-03-28 04:17:07

我会写一个简短的PL/SQL脚本来做这件事:

代码语言:javascript
运行
复制
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.

票数 2
EN

Stack Overflow用户

发布于 2012-03-28 04:16:50

您当然可以编写一些PL/SQL

代码语言:javascript
运行
复制
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;

不过,我非常担心任何更改数据库中每个用户的密码的事情。不同寻常的是,有一个很好的理由来更改单个用户的密码,执行一些操作,然后在不知道原始密码的情况下将其更改回来。我很难想象需要对几十个账户这么做。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9896619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档