转至:http://blog.itpub.net/519536/viewspace-672276/

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 --

【用户状态】详细解读Oracle用户ACCOUNT_STATUS的九种状态的更多相关文章

  1. 【密码】Oracle用户密码系列

    [密码]Oracle用户密码系列 1.1  BLOG文档结构图 1.2  前言部分 1.2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识, ...

  2. Oracle用户,权限,角色以及登录管理 scoot 授权

    Oracle用户,权限,角色以及登录管理 1. sys和system用户的区别 system用户只能用normal身份登陆em.除非你对它授予了sysdba的系统权限或者syspoer系统权限. sy ...

  3. Oracle用户的初始化问题

    上一篇博文介绍了关于.bashrc和.bash_profile的相关知识,在oracle的用户设置中能发挥作用. 场景:上周准备学习一下oracle,下载了安装文件后,在linux上新建了一个用户or ...

  4. Oracle用户和模式,表空间

    oracle 用户与表空间关系 oracle用户与表空间关系用户=商家表=商品表空间=仓库1. 1个商家能有很多商品,1个商品只能属于一个商家2. 1个商品可以放到仓库A,也可以放到仓库B,但不能同时 ...

  5. [linux] C语言Linux系统编程-TCP通信的11种状态

    三次握手由client主动发出SYN请求, 此时client处于SYN_SENT状态(第一次握手)当server收到之后会由LISTEN转变为SYN_REVD状态, 并回复client, client ...

  6. Java线程的五种状态详解

    状态转换图 1.new状态:通过new关键字创建了Thread或其子类的对象 2.Runnable状态:即就绪状态.可从三种状态到达,new状态的Thread对象调用start()方法,Running ...

  7. Windows 电脑的四种运行状态工作状态 (Working), S0 睡眠状态 (Sleep), S1 或 S3 休眠状态 (Hibernate), S4 关机状态 (Shutdown), S5

    == Windows 电脑的四种运行状态 == 这四种运行状态(或称电源状态)是: 工作状态 (Working), S0 睡眠状态 (Sleep), S1 或 S3 休眠状态 (Hibernate), ...

  8. 简单理解Hibernate三种状态的概念及互相转化

    本文描述了Hibernate三种状态的概念及互相转化.Java对象的生命周期中有三种状态,而且互相转化.它们分别是临时状态,持久化状态,以及游离状态. AD:WOT2015 互联网运维与开发者大会 热 ...

  9. thinkjs——一个字段一种数字代表两种状态

    问题来源: 现有一张company数据表,其中有一个字段state(-2:待审核:-1:禁用:0:正常:1:会员过期:),一般而言,在前期设计数据表的时候,会将每种状态下都用一种特定的数字代表,但是这 ...

随机推荐

  1. HttpServletRequest接口详解

    般情况下,浏览器(客户端)通过 HTTP 协议来访问服务器的资源,Servlet 主要用来处理 HTTP 请求.Servlet 处理 HTTP 请求的流程如下: Servlet 容器接收到来自客户端的 ...

  2. 不难懂------react---Immutable的基本使用

    一.Immutable简介 Immutable Data 就是一旦创建,就不能再被更改的数据.对 Immutable 对象的任何修改或添加删除操作都会返回一个新的 Immutable 对象.Immut ...

  3. IDEA出现Cannot resolve symbol “xxx“(无法解析符号)的解决办法

    1,File->Invalidate Caches/Restart 清除缓存并重启 idea 2,检查pom文件中的依赖关系是否正确 3,maven -> Reimport 4,打开pro ...

  4. Spring系列9:基于注解的Spring容器配置

    写在前面 前面几篇中我们说过,Spring容器支持3种方式进行bean定义信息的配置,现在具体说明下: XML:bean的定义和依赖都在xml文件中配置,比较繁杂. Annotation-based ...

  5. Python3.7.3 + pycharm安装

    Python3.7.3下载地址: https://www.python.org/ https://www.python.org/getit/ Pycharm: http://www.jetbrains ...

  6. CSS之创意hover效果

    一.发送效果 HTML <div id="send-btn"> <button> // 这里是一个svg的占位 Send </button> & ...

  7. java 变量的定义 类型转换 基本的数据类型

    package com.aaa.zxf.ajax.test; import org.junit.Test; /** * 六. * 如何在ideal的maven项目中导入 Test 测试类? * * * ...

  8. 安装JDK,以及配置环境变量

    卸载JDK 删除Java的安装目录 删除JAVA_HOME 删除path下关于Java的目录 Java-version 安装JDK 使用浏览器搜索JDK,找到下载地址 同意协议 下载电脑对应的版本 双 ...

  9. Network Kit与三七游戏共创流畅游戏体验,无惧网络延迟

    本文分享于HMS Core联盟论坛<[开发者说]无惧高网络吞吐量,HMS Core Network Kit与三七游戏共创流畅游戏体验>的采访整理. 三七游戏拥有<斗罗大陆·魂师对决& ...

  10. Java面试必问之线程池的创建使用、线程池的核心参数、线程池的底层工作原理

    一.前言 大家在面试过程中,必不可少的问题是线程池,小编也是在面试中被问啥傻了,JUC就了解的不多.加上做系统时,很少遇到,自己也是一知半解,最近看了尚硅谷阳哥的课,恍然大悟,特写此文章记录一下!如果 ...