【用户状态】详细解读Oracle用户ACCOUNT_STATUS的九种状态

简介: DBA_USERS视图中ACCOUNT_STATUS记录的用户的当前状态,一般情况下在使用的正常用户均处于OPEN状态。例如我们查看sec用户的当前状态,此时该用户处于OPEN状态,可以正常使用。
DBA_USERS视图中ACCOUNT_STATUS记录的用户的当前状态,一般情况下在使用的正常用户均处于OPEN状态。
例如我们查看sec用户的当前状态,此时该用户处于OPEN状态,可以正常使用。
sys@ora10g> select username, account_status from dba_users where username = 'SEC';

USERNAME                       ACCOUNT_STATUS
------------------------------ --------------------------------
SEC                            OPEN

1.所有用户状态汇总
除了常用的OPEN状态还有哪些用户状态?
这个信息可以通过USER_ASTATUS_MAP获得。

sys@ora10g> 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.

用户状态不会超出以上九种。

2.九种状态的分类
以上九种可以分为两大类:1.基本状态;2.组合状态。
前五种是基本状态:
         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

规律是这样的:后四种的组合状态可以通过状态号STATUS#获得它是哪两种状态的组合,例如10=2+8(10 EXPIRED(GRACE) & LOCKED = 2 EXPIRED(GRACE) + 8 LOCKED)。因此只要了解基本状态的含义其他便可无师自通。

3.五种基本状态的诠释
这五种基本状态又可以分为三类:1.正常状态;2.锁定状态;3.密码过期状态。
1)OPEN状态不用多解释,表示用户处于正常状态。

2)用户被锁定状态,LOCKED和LOCKED(TIMED)两种状态都属于锁定状态
用户被锁定一般分为两种:一种是DBA显式的通过SQL语句对用户进行锁定;另外一种是被动的锁定,例如默认情况下如果密码输入错误超过10次(这个限制是由PROFILE中的FAILED_LOGIN_ATTEMPTS控制的,该信息可以通过DBA_PROFILES视图查询),用户将被锁定,有关被动锁定的描述请参考文章《【故障】“ORACLE用户被锁定”故障处理和分析》(http://space.itpub.net/519536/viewspace-608769)。

(1)显式锁定sec用户LOCKED状态演示
sys@ora10g> alter user sec account lock;

User altered.

sys@ora10g> select username, account_status from dba_users where username = 'SEC';

USERNAME                       ACCOUNT_STATUS
------------------------------ --------------------------------
SEC                            LOCKED

(2)输入10次错误密码后被动锁定LOCKED(TIMED)状态演示
尝试输入10次错误密码后再次查询用户状态。
sys@ora10g> select username, account_status from dba_users where username = 'SEC';

USERNAME                       ACCOUNT_STATUS
------------------------------ --------------------------------
SEC                            LOCKED(TIMED)

3)用户密码过期状态,EXPIRED和EXPIRED(GRACE)两种状态都属于密码过期状态
密码是否过期是通过修改PROFILE中的PASSWORD_LIFE_TIME实现的,密码过期后还可以使用的天数是通过PROFILE中的PASSWORD_GRACE_TIME控制的。有关PROFILE的描述请参考文章《【PROFILE】使用Oracle的PROFILE对用户资源限制和密码限制的研究与探索》(http://space.itpub.net/519536/viewspace-616287)。

关于密码过期我们也可以使用SQL显式的去完成,简单演示一下。
sys@ora10g> alter user sec password expire;

User altered.

sys@ora10g> select username, account_status from dba_users where username = 'SEC';

USERNAME                       ACCOUNT_STATUS
------------------------------ --------------------------------
SEC                            EXPIRED

sys@ora10g> conn sec/sec
ERROR:
ORA-28001: the password has expired


Changing password for sec
New password:
Retype new password:
Password changed
Connected.
sec@ora10g>
sec@ora10g> select username, account_status from dba_users where username = 'SEC';

USERNAME                       ACCOUNT_STATUS
------------------------------ --------------------------------
SEC                            OPEN

4.关于四种组合状态的解释
因为锁定的两种状态(LOCKED和LOCKED(TIMED))和密码过期的两种状态(EXPIRED和EXPIRED(GRACE))之间没有关系。因此他们之间可以任意组合,2×2=4,因此有四种组合状态:
         5 EXPIRED & LOCKED(TIMED)
         6 EXPIRED(GRACE) & LOCKED(TIMED)
         9 EXPIRED & LOCKED
        10 EXPIRED(GRACE) & LOCKED

分别解释这四种组合状态
1)EXPIRED & LOCKED(TIMED)状态表示用户过期后,错误密码尝试次数超过PROFILE中的FAILED_LOGIN_ATTEMPTS的限制;
2)EXPIRED(GRACE) & LOCKED(TIMED)状态表示用户在密码过期后的有效期内,不成功登录次数超过PROFILE中的FAILED_LOGIN_ATTEMPTS的限制;
3)EXPIRED & LOCKED状态表示用户过期的同时处于锁定状态,做一个实验。
sec@ora10g> alter user sec account lock password expire;

User altered.

sec@ora10g> select username, account_status from dba_users where username = 'SEC';

USERNAME                       ACCOUNT_STATUS
------------------------------ --------------------------------
SEC                            EXPIRED & LOCKED

sec@ora10g> conn sec/sec
ERROR:
ORA-28000: the account is locked


Warning: You are no longer connected to ORACLE.

4)EXPIRED(GRACE) & LOCKED状态表示用户在密码过期后的有效期内被DBA手工锁定。

5.小结
Oracle用户虽然有九种之多的状态,貌似很复杂,但只要我们能够对其进行清晰的划分类别,理解起来便会很容易。
从正常、锁定和密码过期三个角度去理解用户状态,一切都会水到渠成。

Good luck.

secooler
10.08.31

-- The End --

目录
相关文章
|
SQL Oracle 关系型数据库
探秘Oracle表空间、用户、表之间的关系
 之前的DRP项目虽然用到了oracle,但是所有数据库对象的建立都是按文档来的,并没有仔细思考总结,后面再次用到oracle时,不能再那么糊里糊涂的用了,得稍微探索一下下了,究竟这些oracle中的数据库对象之间都存在什么关系呢?
探秘Oracle表空间、用户、表之间的关系
|
Oracle 关系型数据库 Linux
如果oracle用户下的$ORACLE_HOME bin oracle文件的属主或权限出了问题,那么该如何修复呢?
如果oracle用户下的$ORACLE_HOME bin oracle文件的属主或权限出了问题,那么该如何修复呢?
309 1
|
SQL Oracle 关系型数据库
常见问题:在 Windows 平台的 Oracle 12.1 数据库版本上的 Oracle Home 用户 (Doc ID 2101982.1、Doc ID 1529702.1)
常见问题:在 Windows 平台的 Oracle 12.1 数据库版本上的 Oracle Home 用户 (Doc ID 2101982.1、Doc ID 1529702.1)
175 0
|
Oracle 关系型数据库 Linux
Oracle Linux 8.5 上架微软应用商店,用户可免费下载
Oracle Linux 8.5 上架微软应用商店,用户可免费下载
Oracle Linux 8.5 上架微软应用商店,用户可免费下载
|
Oracle 关系型数据库 数据安全/隐私保护
oracle学习25-手工删除oracle归档日志后操作步骤 和修改用户默认解锁时间
oracle学习25-手工删除oracle归档日志后操作步骤 和修改用户默认解锁时间
124 0
|
Oracle 关系型数据库 数据库
oracle学习8-使用profile管理用户口令
oracle学习8-使用profile管理用户口令
122 0
|
Oracle 关系型数据库 数据库
Oracle用户操作、数据类型、表格修改、约束设置详解
Oracle用户操作、数据类型、表格修改、约束设置相关操作以及使用案例

推荐镜像

更多