如何更改ORACLE 用户的 expired状态
2012-06-01 17:17
357 查看
oracle中, 经常用户的状态会变成locked, expired 等状态, 这种情况下怎么处理呢?
首先, 如果是locked状态还好办, DBA直接执行alter user scott account unlock 就可以了.
但是如果变成expired状态, oracle本身是不提供解锁的语句的, 因为账户过期,必须要用户更改密码, 账户才能重新使用. 但有些时候, 因为各种原因, 我们并不知道原密码的明文是什么,这时候就很麻烦了, 经研究发现,有两种方法可以实现:
一. 用原密码的密文来更改密码:
这种情况下,虽然我们不知道原密码是什么,但可以用它的密文来更改密码,这样,在不知道原密码的情况下,既保持了密码不改变, 又可以把expired的状态更改掉.
二. 下面这一条语句搞定,不管用户的状态是什么:
原理详解:
用户的信息都是存在user$这样一个系统表里面的
而用户ASTATUS对应的表为:user_astatus_map
关键是user$表本身是可以更改的, 所以此时我们就可以直接把用户的ASTATUS字段改成0就可以了
再来观察结果:
首先, 如果是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
相关文章推荐
- 如何更改ORACLE 用户的 expired状态
- 如何更改ORACLE 用户的 expired状态
- oracle中如何用提示符显示用户状态?
- Oracle如何用户更改密码
- ORACLE数据库用户账号处于expired状态如何处理
- oracle更改用户状态
- 如何启用Oracle 11g的默认用户Scott
- ORACLE如何使用DBMS_METADATA.GET_DDL获取表,表空间,用户,视图等的DDL语句
- 如何更改用户密码
- Oracle 中如何删除一个用户拥有的所有对象
- 如何找回Oracle中system,sys用户的密码
- 更改LINUX监听端口为20777以及禁止oracle用户登录
- 如何处理更改计算机名称导致oracle无法启动
- 如何在oracle中查询所有用户表的表名、主键名称、索引、外键等
- Oracle 10g如何对用户姓名,按首字母排序、查询
- Oracle中如何显示当前的所有用户表
- Oracle如何创建用户,表空间
- oracle中如何删除一个用户
- 如何实现Oracle修改用户权限
- 如何查看oracle用户具有的权限和角色