在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)?理想情况下,我想为alter
中的每个用户执行此dba_users
操作。
非常感谢!
答案 0 :(得分:2)
我会编写一个简短的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;
/
答案 1 :(得分:0)
你当然可以写一些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;
但是,我会担心任何改变数据库中每个用户密码的事情。这是非常不寻常的,有充分的理由改变个人用户的密码,做一些事情,然后在不知道原始密码的情况下将其更改回去。我很难想象需要对几十个账户做这件事。