【DB笔试面试543】Oracle用户的状态有几种?分别表示什么含义?

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

         题目         部分

Oracle用户的状态有几种?分别表示什么含义?程序员


     
         答案部分          


Oracle用户的状态是由密码来决定的,而Oracle中的密码是由PROFILE来配置的。PROFILE是口令限制资源限制的命令集合当创建数据库Oracle会自动创建名称为DEFAULTPROFILE。当建立用户没有指定PROFILE选项Oracle就会将DEFAULT分配给用户。面试

经过以下的命令能够查出与密码相关的PROFILE的值:sql

1 SELECT *
2   FROM DBA_PROFILES D
3  WHERE D.PROFILE = 'DEFAULT'
4    AND (D.RESOURCE_NAME LIKE '%PASSWORD%' OR  D.RESOURCE_NAME = 'FAILED_LOGIN_ATTEMPTS');
     

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

每一个参数的含义以下所示:数据库

FAILED_LOGIN_ATTEMPTS  设定登陆到Oracle数据库时能够失败的次数。一旦某用户尝试登陆数据库的次数达到该值时,该用户的账户就被锁定,只能由DBA解锁。微信

PASSWORD_LIFE_TIME  设定口令的有效时间(天数),一旦超过这一时间,必须从新设口令。缺省为UNLIMITED网络

PASSWORD_REUSE_TIME  许多系统不准用户从新启用过去用过的口令。该资源项设定了一个失效口令要通过多少天,用户才能够从新使用该口令,缺省为180天。app

PASSWORD_REUSE_MAX  从新启用一个先前用过的口令前必须对该口令进行从新设置的次数(重复用的次数)。ide

PASSWORD_LOCK_TIME  设定账户被锁定的天数(当登陆失败达到FAILED_LOGIN_ATTEMPTS时)。函数

PASSWORD_GRACE_TIME  设定在口令失效前,给予的从新设置该口令的宽限天数。当口令失效以后,在登陆时会出现警告信息显示该天数。若是没有在宽限天内修改口令,那么口令将失效。该参数默认为7天。学习

PASSWORD_VERITY_FUNCTION  该资源项容许调用一个PL/SQL来验证口令。Oracle已提供该应用的脚本,为$ORACLE_HOME/rdbms/admin/utlpwdmg.sql。可是,用户能够制定本身的验证脚本。该参数的设定就是PL/SQL函数的名称,缺省为NULL

用户的状态能够由如下脚本查询得到:

 1SYS@lhrdb> SELECT * FROM USER_ASTATUS_MAP;
2   STATUS# STATUS
3---------- --------------------------------
4         0 OPEN
5         1 EXPIRED
6         2 EXPIRED(GRACE)
7         4 LOCKED(TIMED)
8         8 LOCKED
9         5 EXPIRED & LOCKED(TIMED)
10         6 EXPIRED(GRACE) & LOCKED(TIMED)
11         9 EXPIRED & LOCKED
12        10 EXPIRED(GRACE) & LOCKED
     

以上九种能够分为两大类:1.基本状态;2.组合状态。前五种是基本状态,后四种是组合状态。具体分类以下图所示:

 

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

每种状态的解释如 3-16所示:

3-16 用户状态表

状态序号

状态

解释

处理办法

0

OPEN

OPEN表示用户处于正常状态


1

EXPIRED

密码是否过时是经过修改PROFILE中的PASSWORD_LIFE_TIME实现的,表示该账户被设置为口令到期,要求用户在下次登陆的时候修改口令(系统会在该帐户被设置为EXPIRED后的第一次登录是提示修改密码)。能够经过SQL语句(ALTER USER LHRSYS PASSWORD EXPIRE;)来显式让用户密码过时

修改密码:

SELECT NB.PASSWORD FROM USER$ NB WHERE NB.NAME ='LHRSYS';

ALTER USER SCOTT   IDENTIFIED BY VALUES  'F894844C34402B67';

2

EXPIRED(GRACE)

当设置了GRACE之后(第一次成功登陆后到口令到期后有多少天时间可改变口令在这段时间内,账户被提醒修改口令并能够正常登录ACCOUNT_STATUS显示为EXPIRED(GRACE)

修改密码:

SELECT NB.PASSWORD FROM USER$ NB WHERE NB.NAME ='LHRSYS';

ALTER USER SCOTT   IDENTIFIED BY VALUES  'F894844C34402B67';

4

LOCKED(TIMED)

表示失败的登陆次数超过了FAILED_LOGIN_ATTEMPTS的值,被系统自动锁定须要注意的是,Oracle 10g开始,默认的DEFAULT值是10次,这个限制是由PROFILE中的FAILED_LOGIN_ATTEMPTS控制的,该信息能够经过DBA_PROFILES视图查询

解锁用户:ALTER USER LHRSYS ACCOUNT UNLOCK;

8

LOCKED

DBA显式经过SQL语句对用户进行锁定(ALTER USER LHRSYS ACCOUNT LOCK;

ALTER USER LHRSYS ACCOUNT UNLOCK;

5

EXPIRED & LOCKED(TIMED)

表示用户密码过时后,失败登陆次数超过PROFILE中的FAILED_LOGIN_ATTEMPTS的限制

将用户UNLOCK并修改密码:

ALTER USER LHRSYS  ACCOUNT UNLOCK;

ALTER USER LHRSYS IDENTIFIED BY LHR;

6

EXPIRED(GRACE) & LOCKED(TIMED)

表示用户在密码过时后的有效期内,失败登陆次数超过PROFILE中的FAILED_LOGIN_ATTEMPTS的限制

将用户UNLOCK并修改密码:

ALTER USER LHRSYS  ACCOUNT UNLOCK;

ALTER USER LHRSYS IDENTIFIED BY LHR;

9

EXPIRED & LOCKED

EXPIRED & LOCKED状态表示用户密码过时且同时处于锁定状态

将用户UNLOCK并修改密码:

ALTER USER LHRSYS  ACCOUNT UNLOCK;

ALTER USER LHRSYS IDENTIFIED BY LHR;

10

EXPIRED(GRACE) & LOCKED

表示用户在密码过时后的有效期内被DBA手工锁定

将用户UNLOCK并修改密码:

ALTER USER LHRSYS  ACCOUNT UNLOCK;

ALTER USER LHRSYS IDENTIFIED BY LHR;

Oracle中,若用户的密码变为锁定状态(LOCKEDLOCKED(TIMED))时,DBA能够直接执行“ALTER USER用户名 ACCOUNT UNLOCK”来解锁。可是,若是用户的状态变成过时状态(EXPIREDEXPIRED(GRACE)),那么DBA必需要更改用户的密码帐户才能从新使用。但有些时候,由于各类缘由并不知道原密码的明文是什么,这时候能够有以下2种办法来更新密码。

1用原密码的密文来更改密码

Oracle 10g中,DBA_USERS视图的PASSWORD字段提供了密码的密文形式,而在Oracle 11g中,该字段被弃用了,内容为空,可是在基表USER$中的PASSWORD字段依然有记录密文形式,因此能够经过以下的形式来获取密码的密文形式:

1SELECT D.USERNAME,
2       D.ACCOUNT_STATUS,
3       D.LOCK_DATE,
4       D.EXPIRY_DATE,
5       D.PROFILE,
6       NVL(D.PASSWORD,(SELECT NB.PASSWORD FROM USER$ NB WHERE NB.NAME = D.USERNAME)) PASSWORD
7  FROM DBA_USERS D
8 WHERE D.USERNAME = 'LHRSYS';
     

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=


 

另外,能够经过DBMS_METADATA.GET_DDL包或者expdpexp命令来获取建立用户的语句从而获取密码的密文形式。

1SYS@lhrdb> set long 9999
2SYS@lhrdb> SELECT DBMS_METADATA.GET_DDL('USER''LHRSYS') DDL_SQL FROM DUAL;
3DDL_SQL
4--------------------------------------------------------------------------------
5   CREATE USER "LHRSYS" IDENTIFIED BY VALUES 'S:853EA80BAE11F79D6946453F38059E30313FE84C96AE2EE4F3AA35A648BD;F809740420A44EFC'
6      DEFAULT TABLESPACE "USERS"
7      TEMPORARY TABLESPACE "TEMP"
     


获取了密码的密文后就能够用以下的命令来修改了,注意:使用密文的命令中多了一个VALUES关键字:

 1SYS@lhrdb> alter user LHRSYS identified by values 'F809740420A44EFC';
2User altered.
3SYS@lhrdb> CONN  LHRSYS/lhr@192.168.59.129/lhrdb
4Connected.
5LHRSYS@192.168.59.129/lhrdb> conn / as sysdba
6Connected.
7SYS@lhrdb> alter user LHRSYS identified by values 'S:853EA80BAE11F79D6946453F38059E30313FE84C96AE2EE4F3AA35A648BD;F809740420A44EFC';
8User altered.
9SYS@lhrdb> CONN  LHRSYS/lhr@192.168.59.129/lhrdb
10Connected.
     


因此,即便不知道用户的原密码是什么,也能够用它的密文来更改密码。这样既保持了密码不改变,又能够把EXPIRED的状态更改掉。

MOS The Impact of PASSWORD_LIFE_TIME Database Profile Parameter Default to 180 Days on Network Charging and Control (文档 ID 1543668.1)中搜到了以下的命令也能够直接获取密码:

 1SELECT SQLTEXT
2  FROM (SELECT NAME,'ALTER USER ' || NAME || ' IDENTIFIED BY VALUES ''' ||PASSWORD || ''';' SQLTEXT
3          FROM USER$
4         WHERE SPARE4 IS NULL
5           AND PASSWORD IS NOT NULL
6        UNION
7        SELECT NAME,
8               'ALTER USER ' || NAME || ' IDENTIFIED BY VALUES ''' || SPARE4 || ';' ||PASSWORD || ''';' SQLTEXT
9          FROM USER$
10         WHERE SPARE4 IS NOT NULL
11           AND PASSWORD IS NOT NULL)
12 WHERE NAME = 'LHRSYS';
     

2、直接更新USER$基表

无论用户的状态是什么,经过更新USER$表可让用户处于OPEN状态:

 1SYS@lhrdb> SELECT USERNAME, ACCOUNT_STATUS,EXPIRY_DATE,LOCK_DATE FROM DBA_USERS WHERE USERNAME = 'LHRSYS';
2USERNAME                       ACCOUNT_STATUS                   EXPIRY_DATE         LOCK_DATE
3------------------------------ -------------------------------- ------------------- -------------------
4LHRSYS                         EXPIRED                          2016-12-02 10:40:09
5SYS@lhrdb> UPDATE USERSET ASTATUS=0 WHERE NAME='LHRSYS';
61 row updated.
7SYS@lhrdb> commit;<<<<<<<<<------及时提交
8Commit complete.
9SYS@lhrdb> SELECT USERNAME, ACCOUNT_STATUS,EXPIRY_DATE,LOCK_DATE FROM DBA_USERS WHERE USERNAME = 'LHRSYS';
10USERNAME                       ACCOUNT_STATUS                   EXPIRY_DATE         LOCK_DATE
11------------------------------ -------------------------------- ------------------- -------------------
12LHRSYS                         OPEN
     

& 说明:

有关用户密码的更多内容能够参考个人BLOGhttp://blog.itpub.net/26736162/viewspace-2129595/

 


本文选自《Oracle程序员面试笔试宝典》,做者:李华荣。



watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=      

---------------优质麦课------------

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

 详细内容能够添加麦老师微信或QQ私聊。


watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=


About Me:小麦苗      

 本文做者:小麦苗,只专一于数据库的技术,更注重技术的运用

● 做者博客地址:http://blog.itpub.net/26736162/abstract/1/

 本系列题目来源于做者的学习笔记,部分整理自网络,如有侵权或不当之处还请谅解

 版权全部,欢迎分享本文,转载请保留出处

 QQ:646634621  QQ群:618766405

 提供OCP、OCM和高可用部分最实用的技能培训

● 题目解答如有不当之处,还望各位朋友批评指正,共同进步

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=DBA宝典

长按下图识别二维码或微信扫描下图二维码来关注小麦苗的微信公众号:xiaomaimiaolhr,学习最实用的数据库技术。

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk= 喜欢就点击“好看”吧



本文分享自微信公众号 - DB宝(lhrdba)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索