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

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

时间: 2024-08-01 05:13:46

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

oracle用户概念、oracle用户表空间和oracle用户资源文件

Oracle 用户管理 一.用户的概念 用户,即user,通俗的讲就是访问oracle数据库的"人".在oracle中,可以对用户的各种安全参数进行控制,以维护数据库的安全性,这些概念包括模式(schema).权限.角色.存储设置.空间限额.存取资源限制.数据库审计等.每个用户都有一个口令,使用正确的用户/口令才能登录到数据库进行数据存取. 二.用户默认表空间 表空间是信息存储的最大逻辑单位.当用户连接到数据库进行资料存储时,若未指出数据的目标存储表空间时,则数据存储在用户的默认表空间

Oracle管理用户(四) Oracle用户磁盘配额的管理

quota 管理:对象的最大存储空间,用户在表空间上建立对象,必须在相应的tablespace 上获得quota. 1.查看用户磁盘配额使用信息 SQL> select TABLESPACE_NAME,USERNAME,BYTES/1024,MAX_BYTES/1024/1024 from dba_ts_quotas; TABLESPACE_NAME      USERNAME        BYTES/1024 MAX_BYTES/1024/1024 --------------------

详细解读JAVA多线程实现的三种方式_java

最近在做代码优化时学习和研究了下JAVA多线程的使用,看了菜鸟们的见解后做了下总结. 1.继承Thread类实现多线程 继承Thread类的方法尽管被我列为一种多线程实现方式,但Thread本质上也是实现了Runnable接口的一个实例,它代表一个线程的实例,并且,启动线程的唯一方法就是通过Thread类的start()实例方法.start()方法是一个native方法,它将启动一个新线程,并执行run()方法.这种方式实现多线程很简单,通过自己的类直接extend Thread,并复写run(

【密码】Oracle用户密码系列

[ 密码 ] Oracle 用户密码系列 1.1   BLOG 文档结构图   1.2   前言部分 1.2.1   导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识, ~O(∩_∩)O~ : ① 用户的 9 种状态含义 (重点) ② 如何解锁账户 ③ 如何修改密码无效状态 ④ 如何获取密码的密文,如何利用密文修改用户的密码 (重点) ⑤ 如何查询失败的登陆次数 ⑥ 11g 密码大小写问题 ⑦ 11g 密码延迟验证 ⑧ 密码复杂性校验   Ti

Android中程序的停止状态详细介绍_Android

很多人遇到过广播收不到的问题,比如Google Play推广安装广播没有收到等,诸如这些问题,又都是什么原因呢,这篇文章将进行回答. 从Android 3.1(HoneyComb) 也就是API 12开始,Android引入了一套新的启动控制,这就是程序的停止状态.那让我们看一下Google对于程序的停止状态的描述. 什么是程序的停止状态 复制代码 代码如下: Starting from Android 3.1, the system's package manager keeps track

Android中程序的停止状态详细介绍

很多人遇到过广播收不到的问题,比如Google Play推广安装广播没有收到等,诸如这些问题,又都是什么原因呢,这篇文章将进行回答. 从Android 3.1(HoneyComb) 也就是API 12开始,Android引入了一套新的启动控制,这就是程序的停止状态.那让我们看一下Google对于程序的停止状态的描述. 什么是程序的停止状态 复制代码 代码如下: Starting from Android 3.1, the system's package manager keeps track

Oracle 用户概念与基本操作

目录 目录 Oracle的用户 通过系统用户来登陆SQLPlus system和sys的区别 查看登陆的用户 启用和锁定一个用户 启用用户 锁定用户 创建用户 修改用户 删除用户 角色权限 常用的用户相关数据字典 Oracle的用户 用户:User,通俗的讲就是访问oracle数据库的账号. 在oracle中,可以对用户的各种安全参数进行控制,以维护数据库的安全性,这些概念包括模式(schema).权限.角色.存储设置.空间限额.存取资源限制.数据库审计等.每个用户都有一个口令,使用正确的use

Oracle用户特权管理与审计

1 引言 信息对于取得成功是非常重要的,但是如果信息被破坏或被错误利用,就会给成功带来威胁.Oracle提供了广泛的安全特性以保护用户的信息免受未经授权的访问及有意或无意的破坏.这种安全性是在用户到用户,权限到权限的基础上通过授予或撤消权限来提供的,并且是附加于(独立于)用户的计算机系统本身已有的安全机制之上.在实现了权限分配的基础上,我们又面临着实时跟踪被使用的系统资源与数据库资源,监测用户对数据库的行为的问题,这就是大型数据库管理系统所必需的审计功能.在这里,我们将共同探讨Orale用户权限

ORACLE用户管理

ORACLE用户管理包括:       创建用户.修改用户.删除用户   创建用户的脚本命令是CREATE USER语句,创建用户一般要由DBA或拥有该系统权限的用户来执行.那么我们首先来创建一个名为:kerry的用户(账号) CREATE USER kerry IDENTIFIED BY K123456 DEFAULT TABLESPACE USERS QUOTA 10M ON USERS TEMPORARY TABLESPACE TEMP   创建用户以后,我们可以通过下面的脚本来查看用户信