如何更改ORACLE 用户的 expired状态
来源:互联网 发布:mac如何设置两个桌面 编辑:程序博客网 时间:2024/05/22 23:18
转载至:http://blog.csdn.net/yfleng2002/article/details/7624095
oracle中, 经常用户的状态会变成locked, expired 等状态, 这种情况下怎么处理呢?
首先, 如果是locked状态还好办, DBA直接执行alter user scott account unlock 就可以了.
但是如果变成expired状态, oracle本身是不提供解锁的语句的, 因为账户过期,必须要用户更改密码, 账户才能重新使用. 但有些时候, 因为各种原因, 我们并不知道原密码的明文是什么,这时候就很麻烦了, 经研究发现,有两种方法可以实现:
- SQL>conn /as sysdba
- SQL>select password from dba_users where username='SCOTT';
- password
- ------------------------------
- E65E6AF62B2449CF
- SQL>alter user SCOTT identified by values 'E65E6AF62B2449CF';
这种情况下,虽然我们不知道原密码是什么,但可以用它的密文来更改密码,这样,在不知道原密码的情况下,既保持了密码不改变, 又可以把expired的状态更改掉.
二. 下面这一条语句搞定,不管用户的状态是什么:
- UPDATE USER$ SET ASTATUS=0 WHERE NAME='SCOTT';
原理详解:
用户的信息都是存在user$这样一个系统表里面的
- SQL> select name,ASTATUS,password from user$ where name IN('SYS','SCOTT');
- NAME ASTATUS PASSWORD
- ------------------------------ ---------- ------------------------------
- SCOTT 1 E65E6AF62B2449CF
- SYS 0 8A8F025737A9097A
- SQL> select username,account_status from dba_users where username in('SYS','SCOTT');
- USERNAME ACCOUNT_STATUS
- ------------------------------ --------------------------------
- SYS OPEN
- SCOTT EXPIRED
而用户ASTATUS对应的表为: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.
关键是user$表本身是可以更改的, 所以此时我们就可以直接把用户的ASTATUS字段改成0就可以了
- SQL> UPDATE USER$ SET ASTATUS=0 WHERE NAME='SCOTT';
- 1 row updated.
- SQL> COMMIT;
- Commit complete.
- SQL> alter system flush shared_pool;
- System altered.
- SQL> select name,ASTATUS,password from user$ where name IN('SYS','SCOTT');
- NAME ASTATUS PASSWORD
- ------------------------------ ---------- ------------------------------
- SCOTT 0 E65E6AF62B2449CF
- SYS 0 8A8F025737A9097A
- SQL> select username,account_status from dba_users where username in('SYS','SCOTT');
- USERNAME ACCOUNT_STATUS
- ------------------------------ --------------------------------
- SCOTT OPEN
- SYS OPEN
0 0
- 如何更改ORACLE 用户的 expired状态
- 如何更改ORACLE 用户的 expired状态
- 如何更改ORACLE 用户的 expired状态
- oracle更改用户状态
- Oracle如何用户更改密码
- open.locked,expired,EXPIRED(GRACE) ,LOCKED(TIMED) 数据库用户的几个状态
- Oracle的用户状态
- oracle更改用户的密码
- 如何更改linux 用户的home目录
- oracle 更改用户名称
- Oracle 12c 新特性---password expired 的用户会输出到alert日志中
- PS模块 更改系统、用户状态的函数
- 如何更改Oracle 数据文件的位置
- Oracle EBS中工单状态更改的几点说明
- 如何维持APP用户的登陆状态
- 如何维持APP用户的登陆状态
- oracle用户状态
- oracle用户状态
- javascript数据结构和算法
- 广告软件屏蔽
- 动态规划之三角形求值问题
- google code 免费svn服务器使用说明
- 将Vim改造为强大的IDE—Vim集成Ctags/Taglist/Cscope/Winmanager/NERDTree/OmniCppComplete(有图有真相)
- 如何更改ORACLE 用户的 expired状态
- Remove Nth Node From End of List
- 内存管理
- 动态规划之钢条切割问题
- 【2014-06-07】-珠海长隆海底世界
- linux命令点滴
- 面向对象--设计模式
- JavaScript获取地址栏中的参数
- ABAP通过OLEDB读取本地Access(MDB)文件