在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
操作。
非常感谢!
发布于 2012-03-28 04:17:07
我会写一个简短的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;
/
发布于 2012-03-28 04:16:50
您当然可以编写一些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;
不过,我非常担心任何更改数据库中每个用户的密码的事情。不同寻常的是,有一个很好的理由来更改单个用户的密码,执行一些操作,然后在不知道原始密码的情况下将其更改回来。我很难想象需要对几十个账户这么做。
https://stackoverflow.com/questions/9896619
复制相似问题