在DBA的实际工作中,经常会遇到一些情况,例如,我不知道一个用户的密码,但是我需要通过这个用户登入到数据库里面做一些动作,而且还必须通过此用户登录,比如为一个用户创建私有的DB Link

或者迁移一些数据到新的数据库,开发人员要求和原来的数据库密码保持一致,我们一个个去收集密码麻烦还容易出错,这个时候怎么办呢? Oracle 的alter user语句提供了一个identified by values子句,这个子句可以让DBA在不知道密码明文的情况下,直接使用数据库字典中保存的密码密文进行修改密码。

  1. 例如我需要登入一个用户,完成以后改回原来的密码,如下:

SQL>select PASSWORD from sys.user$ where name = 'UT001';  --获取当前用户的密码密文
SQL>alter user UT001 identified by 123456;                --修改用户密码为123456
SQL>alter user UT001 identified by values 'S:C7C81BBE7760B5BBB3973F0971AA36C737BF6DCC4A34FE925CE70B0739BD'; --修改密码为原来的密码。


2. 迁移数据库环境,在新库创建和源库一致的用户名和密码,如下:

SQL>select 'create user '|| name || ' identified by values ''' || password || ''';' from sys.user$ where name in ('UT001','UT002'.....);

使用拼接好的SQL直接在新库里面执行即可,当然,也可以制定PROFILE,DefTABLESPACE,TempTABLESPACE等等信息。