您的位置:首页 > 数据库 > Oracle

不知道密码的情况下重置Oracle过期帐号密码

2017-11-16 11:40 281 查看
最近有网友问到,如何在不知道密码的情况下,重置Oracle过期被锁帐号密码。

之所以要重置,而不是修改;是因为该帐号被很多下游系统所使用,如果修改了密码下游系统也需要进行修改,比较麻烦。

同时,由于年代久远,也没有人知道该帐号的密码。。。。。

那有没有办法在不知道、且不修改密码的情况下重置密码呢?

答案是肯定的,方法如下:

注:如下操作需要使用sysdba进行(因为需要查询user$ 表)

1、首先查询帐号当前的状态

SELECT username, account_status, expiry_date

 FROM dba_users

 WHERE username = 'TEST_USER';

 

USERNAME

--------------------------------------------------------------------------------

ACCOUNT_STATUS                   EXPIRY_DATE

-------------------------------- -------------------

TEST_USER

EXPIRED & LOCKED                 2017_11_16:11:23:54

可以看到当前是过期+锁定状态

2、查询被锁帐号的密码密文

11g及以上

SQL>  select password from user$ where name='TEST_USER';

PASSWORD

--------------------------------------------------------------------------------

E00E2CB7754DD48E

10g

select password from dba_users where username='TEST_USER';

得到密文:E00E2CB7754DD48E

3、重置密码

SQL> alter user test_user identified by values 'E00E2CB7754DD48E';

User altered.

4、在次确认帐号状态

SQL> SELECT username, account_status, expiry_date

  2   FROM dba_users

  3   WHERE username = 'TEST_USER';

USERNAME

--------------------------------------------------------------------------------

ACCOUNT_STATUS                   EXPIRY_DATE

-------------------------------- -------------------

TEST_USER

LOCKED                           2018_05_15:11:26:57

可以看到,帐号的过期状态已经没有了,现在只剩下锁定状态

5、解锁帐号

SQL> alter user test_user account unlock;

User altered.

6、最后确认帐号状态

SQL> SELECT username, account_status, expiry_date

  2   FROM dba_users

  3   WHERE username = 'TEST_USER';

USERNAME

--------------------------------------------------------------------------------

ACCOUNT_STATUS                   EXPIRY_DATE

-------------------------------- -------------------

TEST_USER

OPEN                             2018_05_15:11:26:57

大功告成!

为了防止此帐号以后又被过期锁定,可以考虑对此特殊帐号创建一个单独的profile,并取消密码过期策略。

执行如下sql,查看帐号的profile

SQL> SELECT username,profile

  2   FROM dba_users

  3   WHERE username = 'TEST_USER';

USERNAME

--------------------------------------------------------------------------------

PROFILE

--------------------------------------------------------------------------------

TEST_USER

DEFAULT

可以看到是默认的DEFAULT PROFILE

SQL> SELECT resource_name,limit FROM dba_profiles s WHERE s.profile='DEFAULT' AND resource_name in('PASSWORD_LIFE_TIME','FAILED_LOGIN_ATTEMPTS');

RESOURCE_NAME

--------------------------------

LIMIT

--------------------------------------------------------------------------------

FAILED_LOGIN_ATTEMPTS

10

PASSWORD_LIFE_TIME

180

可以看到,默认的DEFAULT PROFILE的密码过期时间是180天,最大密码错误次数为10次(超过帐号就会被锁定)

可以执行如下命令,将其修改为无限制

ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS UNLIMITED;

ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

SQL> SELECT resource_name,limit FROM dba_profiles s WHERE s.profile='DEFAULT' AND resource_name in('PASSWORD_LIFE_TIME','FAILED_LOGIN_ATTEMPTS');

RESOURCE_NAME

--------------------------------

LIMIT

--------------------------------------------------------------------------------

FAILED_LOGIN_ATTEMPTS

UNLIMITED

PASSWORD_LIFE_TIME

UNLIMITED

注间:上面是以默认的DEFAULT  PROFILE为例,大家应该根据自己的情况创建不同的PROFILE,有关如何创建PROFILE请自行查阅相关文章。



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: