当前位置:Gxlcms > 数据库问题 > 【密码】Oracle用户密码系列

【密码】Oracle用户密码系列

时间:2021-07-01 10:21:17 帮助过:9人阅读

密码Oracle用户密码系列

1.1  BLOG文档结构图

技术分享 

1.2  前言部分

1.2.1  导读和注意事项

各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~

用户的9种状态含义(重点)

如何解锁账户

如何修改密码无效状态

如何获取密码的密文,如何利用密文修改用户的密码(重点)

如何查询失败的登陆次数

11g 密码大小写问题

⑦ 11g 密码延迟验证

密码复杂性校验

 

Tips

本文在itpubhttp://blog.itpub.net/26736162)、博客园(http://www.cnblogs.com/lhrbest)和微信公众号(xiaomaimiaolhr有同步更新

文章中用到的所有代码相关软件相关资料及本文的pdf版本都请前往小麦苗的云盘下载小麦苗的云盘地址见:http://blog.itpub.net/26736162/viewspace-1624453/

若网页文章代码格式有错乱,下载pdf格式的文档来阅读

本篇BLOG,代码输出部分一般放在一行一列的表格中。

本文有错误或不完善的地方请大家多多指正,您的批评指正是我写作的最大动力。

 

1.2.2  本文简介

客户的一个账户密码过期了,但是客户设置了永不过期,问到我为什么。我当时觉得设置了永不过期那肯定是生效的,只是这个部分的内容忘得差不多了,当时还想到可能是resource_limit这个参数没有设置为TRUE的缘故,后来查了官方文档才知道并不是这个原因。于是下决心把这部分的内容系统学习一下,自己总结的内容分享给大家。

1.3  使用profile管理用户口令

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

通过如下的命令可以查出与密码相关的PROFILE的值:

 SELECT *

   FROM DBA_PROFILES D

  WHERE D.PROFILE = ‘DEFAULT‘

    AND (D.RESOURCE_NAME LIKE ‘%PASSWORD%‘ OR

        D.RESOURCE_NAME = ‘FAILED_LOGIN_ATTEMPTS‘);

技术分享 

每个参数的含义如下所示:

l FAILED_LOGIN_ATTEMPTS  设定登录到Oracle数据库时可以失败的次数。一旦某用户尝试登录数据库的达到该值时,该用户的帐户就被锁定,只能由DBA能解锁。

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

l PASSWORD_REUSE_TIME  许多系统不许用户重新启用过去用过的口令。该资源项设定了一个失效口令要经过多少天,用户才可以重新使用该口令,缺省为UNLIMITED

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

l PASSWORD_LOCK_TIME  设定帐户被锁定的天数(当登录失败达到FAILED_LOGIN_ATTEMPTS时)。

l PASSWORD_GRACE_TIME  设定在口令失效前,给予的重新设该口令的宽限天。当口令失效之后回,在登录时会出现警告信息显示该天数。如果没有在宽限天内修改口令,口令将失效。

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

1.3.1  修改密码为永不过期

 

SYS@lhrdb> select username, account_status,EXPIRY_DATE,profile from dba_users where username = ‘LHRSYS‘;

 

USERNAM ACCOUNT_STATUS                  EXPIRY_DATE         PROFILE

------- ------------------------------- ------------------- ------------------------------

LHRSYS  OPEN                            2016-12-07 15:20:36 TESTPROFILE

 

SYS@lhrdb> alter user lhrsys password expire;

 

User altered.

 

SYS@lhrdb> select username, account_status,EXPIRY_DATE,profile from dba_users where username = ‘LHRSYS‘;

 

USERNAM ACCOUNT_STATUS                  EXPIRY_DATE         PROFILE

------- ------------------------------- ------------------- ------------------------------

LHRSYS  EXPIRED                         2016-12-02 16:36:24 TESTPROFILE

 

SYS@lhrdb> ALTER PROFILE TESTPROFILE LIMIT PASSWORD_LIFE_TIME UNLIMITED;

 

Profile altered.

 

SYS@lhrdb> select username, account_status,EXPIRY_DATE,profile from dba_users where username = ‘LHRSYS‘;

 

USERNAM ACCOUNT_STATUS                  EXPIRY_DATE         PROFILE

------- ------------------------------- ------------------- ------------------------------

LHRSYS  EXPIRED                         2016-12-02 16:36:24 TESTPROFILE

 

SYS@lhrdb> SELECT NB.PASSWORD FROM USER$ NB WHERE NB.NAME =‘LHRSYS‘;

 

PASSWORD

------------------------------

F809740420A44EFC

 

SYS@lhrdb> ALTER USER LHRSYS   IDENTIFIED BY VALUES ‘F809740420A44EFC‘;

 

User altered.

 

SYS@lhrdb> select username, account_status,EXPIRY_DATE,profile from dba_users where username = ‘LHRSYS‘;

 

USERNAM ACCOUNT_STATUS                  EXPIRY_DATE         PROFILE

------- ------------------------------- ------------------- ------------------------------

LHRSYS  OPEN                                                TESTPROFILE

 

SYS@lhrdb>

 

1.3.2  ACCOUNT_STATUS的九种状态

技术分享 

SYS@lhrdb> 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.

 

 

以上九种可以分为两大类: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+810 EXPIRED(GRACE) & LOCKED = 2 EXPIRED(GRACE) + 8 LOCKED)。因此只要了解基本状态的含义其他便可无师自通。

这五种基本状态又可以分为三类:1.正常状态;2.锁定状态;3.密码过期状态。

1OPEN表示用户处于正常状态。

2)用户被锁定状态,LOCKEDLOCKED(TIMED)两种状态都属于锁定状态

用户被锁定一般分为两种:一种是DBA显式的通过SQL语句对用户进行锁定;另外一种是被动的锁定,例如默认情况下如果密码输入错误超过10次(这个限制是由PROFILE中的FAILED_LOGIN_ATTEMPTS控制的,该信息可以通过DBA_PROFILES视图查询),用户将被锁定。

技术分享

1.3.2.1  锁定状态

一、 LOCKED

显式锁定LHRSYS用户LOCKED状态演示

SELECT D.USERNAME,

       D.ACCOUNT_STATUS,

       D.LOCK_DATE,

       D.EXPIRY_DATE,

       D.PROFILE,

       NVL(D.PASSWORD,

           (SELECT NB.PASSWORD FROM USER$ NB WHERE NB.NAME = D.USERNAME)) PASSWORD

  FROM DBA_USERS D

 WHERE D.USERNAME = ‘LHRSYS‘

人气教程排行