简答题 8.  Oracle用户的状态有几种?分别表示什么含义?
【正确答案】Oracle用户的状态是由密码来决定的,而Oracle中的密码是由PROFILE来配置的。PROFILE是口令限制、资源限制的命令集合。当建立数据库时,Oracle会自动建立名称为DEFAULT的PROFILE。当创建用户而没有指定PROFILE选项时,Oracle就会将DEFAULT分配给用户。
   通过如下的命令可以查出与密码相关的PROFILE的值:
   
   

   每个参数的含义如下所示:
   (1)FAILED_LOGIN_ATTEMPTS设定登录到Oracle数据库时可以失败的次数。一旦某用户尝试登录数据库的次数达到该值时,该用户的账户就被锁定,只能由DBA解锁。
   (2)PASSWORD_LIFE_TIME设定口令的有效时间(天数),一旦超过这一时间,必须重新设口令。缺省为UNLIMITED。
   (3)PASSWORD_REUSE_TIME许多系统不许用户重新启用过去用过的口令。该资源项设定了一个失效口令要经过多少天,用户才可以重新使用该口令,默认周期为180天。
   (4)PASSWORD_REUSE_MAX重新启用一个先前用过的口令前必须对该口令进行重新设置的次数(重复用的次数)。
   (5)PASSWORD_LOCK_TIME设定账户被锁定的天数(当登录失败达到FAILED_LOGIN_ATTEMPTS时)。
   (6)PASSWORD_GRACE_TIME设定在口令失效前,给予的重新设置该口令的宽限天数。当口令失效之后,在登录时会出现警告信息显示该天数。如果没有在宽限天数内修改口令,口令将失效。
   (7)PASSWORD_VERITY_FUNCTION该资源项允许调用一个PL/SQL来验证口令。Oracle已提供该应用的脚本,为$ORACLE_HOME/rdbms/admin/utlpwdmg.sql。但是,用户可以制定自己的验证脚本。该参数的设定就是PL/SQL函数的名称,默认为NULL。
   用户的状态可以由以下脚本查询获得:
   
   
   以上九种可以分为两大类:①基本状态;②组合状态。前五种是基本状态,后四种是组合状态。具体分类如图所示。
   

   用户状态的分类

   每种状态的解释见表。
   

   在Oracle中,若用户的密码变为锁定状态[LOCKED、LOCKED(TIMED)1时,DBA可以直接执行“ALTER USER用户名ACCOUNT UNLOCK”来解锁。但是,如果用户的状态变成过期状态[EXPIRED、EXPIRED(GRACE)],那么DBA必须要更改用户的密码账户才能重新使用。但有些时候,因为各种原因并不知道原密码的明文是什么,这时候可以有如下两种办法来更新密码。
   (1)用原密码的密文来更改密码  在Oracle 10g中,DBA USERS视图的PASSWORD字段提供了密码的密文形式,而在Oracle 11g中,该字段被弃用了,内容为空,但是在基表USER$中的PASSWORD字段依然有记录密文形式。另外,可以通过DBMS_METADATA.GET_DDL包或者expdp.exp命令来获取创建用户的语句从而获取密码的密文形式。如下的SQL即获取密码的密文形式:
   
   获取了密码的密文后就可以用如下的命令来修改了,注意:使用密文的命令中多了一个VALUES关键字:
   
   所以,即使不知道用户的原密码是什么,也可以用它的密文来更改密码。这样既保持了密码不改变,又可以把EXPIRED的状态更改掉。在MOS文档ID 1543668.1中也有命令可以直接获取密码。
   (2)直接更新USER$基表  不管用户的状态是什么,通过更新USER$表可以让用户处于OPEN状态。
   
【答案解析】