Oracle账号expired状态修改
概述,
开发反馈账号过期了,不能正常登陆。通过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; ---注意如果数据库处于负载中的时候此命令可能会使库down掉,如果是RAC则每个节点都需要执行
5、查询验证更新结果
SQL> select username, account_status from dba_users where username = 'FID_TEST'; USERNAME ACCOUNT_STATUS ------------------------------ -------------------------------- FID_TEST OPEN
补充:如果Oracle profile没有限制DB用户密码重用也可以直接修改为相同的密码然后每个节点刷新一下share_pool即可。
SQL> alter user FID_TEST identified by values '123456'; User altered. SQL> alter system flush shared_pool;
在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状态了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)