ITPub博客

首页 > > > Oracle账号expired状态修改

Oracle账号expired状态修改

作者:格伯纳 时间:2023-02-23 14:31:36 0 删除 编辑

概述,

开发反馈账号过期了,不能正常登陆。通过dba_users表的查询,账号状态为expired,现进行修改恢复账号正常使用。


1、查询dba_users表查看用户的状态

SQL> select username, account_status from dba_users where username = 'FID_TEST';

USERNAME                       ACCOUNT_STATUS
------------------------------ --------------------------------
FID_TEST                       EXPIRED

SQL> 

2、上面步骤用户状态为expired,现需查询user$表,用户的信息都是存在user$这样一个系统表里面的,且user$表信息可以更改。

SQL> select user#, name, astatus from user$ where name = 'FID_TEST';

     USER# NAME                              ASTATUS
---------- ------------------------------ ----------
        86 FID_TEST                                1

SQL> 

3、通过查询user$表得出 astatus的状态为1,但是1表示什么意思?需要通过查询表:user_astatus_map,这个表记录的账号的所有状态信息

SQL> select * from user_astatus_map;

   STATUS# STATUS
---------- --------------------------------
         0 OPEN
         1 EXPIRED
         2 EXPIRED(GRACE)
         4 LOCKED(TIMED)
         8 LOCKED
         5 EXPIRED & LOCKED(TIMED)
         6 EXPIRED(GRACE) & LOCKED(TIMED)
         9 EXPIRED & LOCKED
        10 EXPIRED(GRACE) & LOCKED

9 rows selected. 

4、通过上面的查询,可知其账号状态信息。现进行更新状态,执行如下指令:

SQL> update user$ set astatus = 0 where name = 'FID_TEST';
SQL> commit;
SQL> alter system flush shared_pool; 

5、查询验证更新结果

SQL> select username, account_status from dba_users where username = 'FID_TEST';

USERNAME                       ACCOUNT_STATUS
------------------------------ --------------------------------
FID_TEST                       OPEN

在11G中,dba_users.password已经不再显示用户的密码:

SQL> select username,ACCOUNT_STATUS from dba_users where username in ('SYSTEM','SCOTT');
 
USERNAME                       ACCOUNT_STATUS
------------------------------ --------------------------------
SCOTT                          OPEN
SYSTEM                         EXPIRED
 
SQL> select password from dba_users where username in ('SYSTEM','SCOTT');
 
PASSWORD
------------------------------

在系统表user$中,可以查看用户的密码(PASSWORD)和状态(ASTATUS)

SQL> select user#,name,password,astatus from user$ where name in ('SYSTEM','SCOTT');
 
     USER# NAME                           PASSWORD                          ASTATUS
---------- ------------------------------ ------------------------------ ----------
        83 SCOTT                          F894844C34402B67                        0
         5 SYSTEM                         2D594E86F93B17A1                        1
 
SQL>

可以通过上面的查询结果,用原来的密码来修改过期用户的密码:

SQL> alter user system identified by values '2D594E86F93B17A1'; 
 
User altered.
 
SQL> select user#,name,password,astatus from user$ where name in ('SYSTEM','SCOTT');
 
     USER# NAME                           PASSWORD                          ASTATUS
---------- ------------------------------ ------------------------------ ----------
        83 SCOTT                          F894844C34402B67                        0
         5 SYSTEM                         2D594E86F93B17A1                        0
 
SQL>

其实也可以直接修改表user$的字段ASTATUS为0,这样用户账号就变成open状态了。


参考:

blog.csdn.net/weixin_30

ORACLE数据库用户账号处于expired状态如何处理 - abce - 博客园 (cnblogs.com)

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31509949/viewspace-3125552/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
管理员

注册时间:2018-03-30

  • 博文量
    2383
  • 访问量
    983892