【密码】Oracle用户密码系列

简介: 【 密码 】 Oracle 用户密码系列 1.1   BLOG 文档结构图   1.

密码 Oracle 用户密码系列

1.1   BLOG 文档结构图

wpsDDB1.tmp 

1.2   前言部分

1.2.1   导读和注意事项

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

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

如何解锁账户

如何修改密码无效状态

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

如何查询失败的登陆次数

11g 密码大小写问题

⑦ 11g 密码延迟验证

密码复杂性校验

 

Tips

本文在 itpub http://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 会自动建立名称为 DEFAULT PROFILE 。当 创建 用户 没有指定 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' );

wpsDDB2.tmp 

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

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 的九种状态

wpsDDB3.tmp 

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+8 10 EXPIRED(GRACE) & LOCKED = 2 EXPIRED(GRACE) + 8 LOCKED )。因此只要了解基本状态的含义其他便可无师自通。

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

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

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

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

wps4FAF.tmp

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

wpsDDC5.tmp 

SYS@lhrdb> ALTER USER LHRSYS ACCOUNT LOCK;

 

User altered.

 

SYS@lhrdb> conn lhrsys/lhr

ERROR:

ORA-28000: the account is locked

 

 

Warning: You are no longer connected to ORACLE.

@> conn /  as sysdba

Connected.

 

SYS@lhrdb> select username, account_status,d.lock_date from dba_users d where username = 'LHRSYS';

 

USERNAME                       ACCOUNT_STATUS                   LOCK_DATE

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

LHRSYS                         LOCKED                           2016-12-02 09:33:50

 

SYS@lhrdb> ALTER USER LHRSYS ACCOUNT UNLOCK;

 

User altered.

 

SYS@lhrdb> select username, account_status,d.lock_date from dba_users d where username = 'LHRSYS';

 

USERNAME                       ACCOUNT_STATUS                   LOCK_DATE

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

LHRSYS                         OPEN

 

 

二、  LOCKED(TIMED)

输入 10 次错误密码后被动锁定 LOCKED(TIMED) 状态演示

尝试输入 10 次错误密码后再次查询用户状态。

SYS@lhrdb> SELECT * FROM Dba_Profiles d WHERE d.profile='DEFAULT' AND D.resource_name LIKE '%FAILED_LOGIN_ATTEMPTS%' ;

 

PROFILE                        RESOURCE_NAME                    RESOURCE LIMIT

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

DEFAULT                        FAILED_LOGIN_ATTEMPTS            PASSWORD 10

 

 

SYS@lhrdb> CONN  LHRSYS/XXXX@192.168.59.129/lhrdb

ERROR:

ORA-01017: invalid username/password; logon denied

 

 

Warning: You are no longer connected to ORACLE.

@> CONN  LHRSYS/XXXX@192.168.59.129/lhrdb

ERROR:

ORA-01017: invalid username/password; logon denied

 

 

@> CONN  LHRSYS/XXXX@192.168.59.129/lhrdb

ERROR:

ORA-01017: invalid username/password; logon denied

 

 

@> CONN  LHRSYS/XXXX@192.168.59.129/lhrdb

ERROR:

ORA-01017: invalid username/password; logon denied

 

 

@> CONN  LHRSYS/XXXX@192.168.59.129/lhrdb

ERROR:

ORA-01017: invalid username/password; logon denied

 

 

@> CONN  LHRSYS/XXXX@192.168.59.129/lhrdb

ERROR:

ORA-01017: invalid username/password; logon denied

 

 

@> CONN  LHRSYS/XXXX@192.168.59.129/lhrdb

ERROR:

ORA-01017: invalid username/password; logon denied

 

 

@> CONN  LHRSYS/XXXX@192.168.59.129/lhrdb

ERROR:

ORA-01017: invalid username/password; logon denied

 

 

@> CONN  LHRSYS/XXXX@192.168.59.129/lhrdb

ERROR:

ORA-01017: invalid username/password; logon denied

 

 

@> CONN  LHRSYS/XXXX@192.168.59.129/lhrdb

ERROR:

ORA-01017: invalid username/password; logon denied

 

@> CONN  LHRSYS/XXXX@192.168.59.129/lhrdb

ERROR:

ORA-28000: the account is locked <<<<<<<<<------ 超过10 次后用户被锁定

 

@> CONN / AS SYSDBA

Connected.

 

SYS@lhrdb> select username, account_status,d.lock_date from dba_users d where username = 'LHRSYS';

 

USERNAME                       ACCOUNT_STATUS                   LOCK_DATE

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

LHRSYS                        LOCKED(TIMED)                    2016-12-02 09:37:20

SYS@lhrdb>

SYS@lhrdb>

 

SYS@lhrdb> ALTER USER LHRSYS ACCOUNT UNLOCK;

 

User altered.

 

SYS@lhrdb> select username, account_status,d.lock_date from dba_users d where username = 'LHRSYS';

 

USERNAME                       ACCOUNT_STATUS                   LOCK_DATE

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

LHRSYS                         OPEN

 

 

1.3.2.2   过期状态

用户密码过期状态, EXPIRED EXPIRED(GRACE) 两种状态都属于密码过期状态

wpsDDC6.tmp 

一、  EXPIRED

密码是否过期是通过修改 PROFILE 中的 PASSWORD_LIFE_TIME 实现的,密码过期后还可以使用的天数是通过 PROFILE 中的 PASSWORD_GRACE_TIME 控制的。

关于密码过期我们也可以使用 SQL 显式的去完成,简单演示一下。

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

 

USERNAME                       ACCOUNT_STATUS                   EXPIRY_DATE

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

LHRSYS                         OPEN

 

SYS@lhrdb> alter user lhrsys password expire;

 

User altered.

 

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

 

USERNAME                       ACCOUNT_STATUS                   EXPIRY_DATE

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

LHRSYS                         EXPIRED                          2016-12-01 16:29:01

 

SYS@lhrdb> conn lhrsys/lhr

ERROR:

ORA-28001: the password has expired

 

 

Changing password for lhrsys

New password:

Retype new password:

Password changed

Connected.

 

LHRSYS@lhrdb> conn / as sysdba

Connected.

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

 

USERNAME                       ACCOUNT_STATUS                   EXPIRY_DATE

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

LHRSYS                         OPEN

 

 

 

下面通过修改系统的日期来演示:

SYS@lhrdb> SELECT D.USERNAME,

  2         D.ACCOUNT_STATUS,

  3         D.LOCK_DATE,

  4         D.EXPIRY_DATE,

  5         D.PROFILE,

  6         NVL(D.PASSWORD,

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

  8    FROM DBA_USERS D

  9   WHERE D.USERNAME = 'LHRSYS';

 

USERNAME                       ACCOUNT_STATUS                   LOCK_DATE           EXPIRY_DATE         PROFILE                        PASSWORD

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

LHRSYS                         OPEN                                                                     DEFAULT                        F809740420A44EFC

 

SYS@lhrdb> create profile TESTPROFILE LIMIT password_life_time 5 password_grace_time 0; <<<<<<<<<------ 这里将password_grace_time 设置为 0

 

Profile created.

 

SYS@lhrdb> alter user LHRSYS profile TESTPROFILE;

 

User altered.

 

 

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

 

USERNAME                       ACCOUNT_STATUS                   PROFILE                        EXPIRY_DATE

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

LHRSYS                         OPEN                             TESTPROFILE                    2016-12-07 14:50:36

 

-- 修改系统时间

[root@orcltest ~]# date '12071450'

Wed Dec  7 14:50:00 CST 2016

[root@orcltest ~]#

系统查询:

SYS@lhrdb>  select sysdate from dual;

 

SYSDATE

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

2016-12-07 14:50:19

 

SYS@lhrdb>  conn LHRSYS/lhr

Connected.

LHRSYS@lhrdb>  conn LHRSYS/lhr

ERROR:

ORA-28001: the password has expired

 

 

Changing password for LHRSYS

New password:

Password unchanged

Warning: You are no longer connected to ORACLE.

 

@> conn / as sysdba

Connected.

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

 

USERNAME                       ACCOUNT_STATUS                   PROFILE                        EXPIRY_DATE

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

LHRSYS                         EXPIRED                           TESTPROFILE                    2016-12-12 10:36:06

 

 

SYS@lhrdb> alter user LHRSYS identified by lhr;

 

User altered.

 

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

 

USERNAME                       ACCOUNT_STATUS                   PROFILE                        EXPIRY_DATE

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

LHRSYS                         OPEN                             TESTPROFILE                    2016-12-12 14:52:54

 

 

二、  EXPIRED(GRACE)

当设置了 PASSWORD_GRACE_TIME 以后,第一次成功登录后到口令到期后有多少天时间可改变口令,在这段时间内,帐户被提醒修改口令并可以正常登陆, account_status 显示为 EXPIRED(GRACE) expired(grace) locked(timed) 系统的 profile 来进行控制的。

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

 

USERNAME                       ACCOUNT_STATUS                   PROFILE                        EXPIRY_DATE

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

LHRSYS                         OPEN                             TESTPROFILE                    2016-12-07 14:09:09

 

SYS@lhrdb> select sysdate from dual;

 

SYSDATE

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

2016-12-02 14:09:32

 

 

SYS@lhrdb> ALTER PROFILE TESTPROFILE LIMIT password_grace_time 3;

 

Profile altered.

 

SYS@lhrdb>  SELECT *

  2     FROM DBA_PROFILES D

  3    WHERE D.PROFILE = 'TESTPROFILE'

  4      AND (D.RESOURCE_NAME LIKE '%PASSWORD%' OR

  5          D.RESOURCE_NAME = 'FAILED_LOGIN_ATTEMPTS');

 

PROFILE                        RESOURCE_NAME                    RESOURCE LIMIT

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

TESTPROFILE                    FAILED_LOGIN_ATTEMPTS            PASSWORD DEFAULT

TESTPROFILE                    PASSWORD_LIFE_TIME               PASSWORD 5

TESTPROFILE                    PASSWORD_REUSE_TIME              PASSWORD DEFAULT

TESTPROFILE                    PASSWORD_REUSE_MAX               PASSWORD DEFAULT

TESTPROFILE                    PASSWORD_VERIFY_FUNCTION         PASSWORD DEFAULT

TESTPROFILE                    PASSWORD_LOCK_TIME               PASSWORD DEFAULT

TESTPROFILE                    PASSWORD_GRACE_TIME              PASSWORD 3

 

7 rows selected.

 

SYS@lhrdb>

 

 

-- 修改系统时间

[root@orcltest ~]# date '12071408' <<<<<<<<<------ 14:09 过期,我们设置到 14:08

Wed Dec  7 14:08:00 CST 2016

[root@orcltest ~]#

 

系统查询:

LHRSYS@lhrdb> select sysdate from dual;

 

SYSDATE

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

2016-12-07 14:08:03

 

LHRSYS@lhrdb> conn lhrsys/lhr

Connected.

 

LHRSYS@lhrdb> select sysdate from dual;

 

SYSDATE

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

2016-12-07 14:09:06

 

LHRSYS@lhrdb> select sysdate from dual;

 

SYSDATE

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

2016-12-07 14:09:09

 

LHRSYS@lhrdb> select sysdate from dual;

 

SYSDATE

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

2016-12-07 14:09:11 <<<<<<<<<------ 已过了密码有效期

 

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

 

USERNAME                       ACCOUNT_STATUS                   PROFILE                        EXPIRY_DATE

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

LHRSYS                         OPEN                              TESTPROFILE                    2016-12-07 14:09:09 <<<<<<<<<------ 但该用户的状态未改变,下面尝试第一次登陆

 

LHRSYS@lhrdb> conn lhrsys/lhr

ERROR:

ORA-28002: the password will expire within 3 days <<<<<<<<<------ 第一次登陆后报错,但用户依然可以登陆,且EXPIRY_DATE 已经变化

 

 

Connected.

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

 

USERNAME                       ACCOUNT_STATUS                   PROFILE                        EXPIRY_DATE

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

LHRSYS                         EXPIRED(GRACE)                    TESTPROFILE                    2016-12-10 14:09:34

<<<<<<<<<------ 再次查询状态,变为了 EXPIRED(GRACE)

 

再次调整日期:

[root@orcltest ~]# date '12081430'

Thu Dec  8 14:30:00 CST 2016

 

LHRSYS@lhrdb>

LHRSYS@lhrdb> select sysdate from dual;

 

SYSDATE

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

2016-12-08 14:30:12

 

LHRSYS@lhrdb>  conn lhrsys/lhr

ERROR:

ORA-28002: the password will expire within 2 days <<<<<<<<<------ 变为了2

 

 

Connected.

LHRSYS@lhrdb>

继续更改日期:

[root@orcltest ~]# date '12101409'

Sat Dec 10 14:09:00 CST 2016

[root@orcltest ~]#

查询:

LHRSYS@lhrdb> select sysdate from dual;

 

SYSDATE

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

2016-12-10 14:09:07

 

 

LHRSYS@lhrdb> conn lhrsys/lhr

ERROR:

ORA-28002: the password will expire within 0 days <<<<<<<<<------ 变为了0

 

 

Connected.

 

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

 

USERNAME                       ACCOUNT_STATUS                   PROFILE                        EXPIRY_DATE

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

LHRSYS                         EXPIRED(GRACE)                   TESTPROFILE                    2016-12-10 14:09:34

 

LHRSYS@lhrdb> select sysdate from dual;

 

SYSDATE

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

2016-12-10 14:09:39 <<<<<<<<<------ GRACE 日期已过

 

LHRSYS@lhrdb>  conn lhrsys/lhr

ERROR:

ORA-28001: the password has expired

 

 

Changing password for lhrsys

New password:

Password unchanged

Warning: You are no longer connected to ORACLE.

 

@> conn / as sysdba

Connected.

SYS@lhrdb>

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

 

USERNAME                       ACCOUNT_STATUS                   PROFILE                        EXPIRY_DATE

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

LHRSYS                         EXPIRED                          TESTPROFILE                    2016-12-10 14:09:34

 

SYS@lhrdb>  alter user LHRSYS identified by lhr;

 

User altered.

 

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

 

USERNAME                       ACCOUNT_STATUS                   PROFILE                        EXPIRY_DATE

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

LHRSYS                         OPEN                             TESTPROFILE                    2016-12-15 14:13:08

 

SYS@lhrdb>

 

 

1.3.2.3   组合状态

关于四种组合状态的解释

因为锁定的两种状态( 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

 

一、  EXPIRED & LOCKED

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

SYS@lhrdb> select username,account_status,EXPIRY_DATE,lock_date from dba_users where username = 'LHRSYS';

 

USERNAME                       ACCOUNT_STATUS                   EXPIRY_DATE         LOCK_DATE

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

LHRSYS                         OPEN                             2016-12-07 15:02:56

SYS@lhrdb>

SYS@lhrdb> alter user lhrsys password expire;

 

User altered.

 

SYS@lhrdb> select username,account_status,EXPIRY_DATE,lock_date from dba_users where username = 'LHRSYS';

 

USERNAME                       ACCOUNT_STATUS                   EXPIRY_DATE         LOCK_DATE

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

LHRSYS                         EXPIRED                          2016-12-02 15:11:12

 

SYS@lhrdb> alter user lhrsys  account lock;

 

User altered.

 

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

 

USERNAME                       ACCOUNT_STATUS                   EXPIRY_DATE

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

LHRSYS                         EXPIRED & LOCKED                 2016-12-01 16:51:38

 

SYS@lhrdb> alter user lhrsys  account unlock;

 

User altered.

 

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

 

USERNAME                       ACCOUNT_STATUS                   EXPIRY_DATE

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

LHRSYS                         EXPIRED                          2016-12-01 16:51:38

 

SYS@lhrdb>  alter user lhrsys identified by lhr;

 

User altered.

 

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

 

USERNAME                       ACCOUNT_STATUS                   EXPIRY_DATE

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

LHRSYS                         OPEN

 

 

 

 

二、  EXPIRED & LOCKED(TIMED)

EXPIRED & LOCKED(TIMED) 状态表示用户 密码 过期后,错误密码尝试次数超过 PROFILE 中的 FAILED_LOGIN_ATTEMPTS 的限制

 

SYS@lhrdb> select username, account_status,EXPIRY_DATE,lock_date from dba_users where username = 'LHRSYS';

 

USERNAME                       ACCOUNT_STATUS                   EXPIRY_DATE         LOCK_DATE

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

LHRSYS                         OPEN

 

 

SYS@lhrdb> alter user lhrsys password expire;

 

User altered.

 

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

 

USERNAME                       ACCOUNT_STATUS                   EXPIRY_DATE

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

LHRSYS                         EXPIRED                          2016-12-02 10:07:27

 

SYS@lhrdb> CONN  LHRSYS/XXXX@192.168.59.129/lhrdb

ERROR:

ORA-01017: invalid username/password; logon denied

 

 

Warning: You are no longer connected to ORACLE.

@> CONN  LHRSYS/XXXX@192.168.59.129/lhrdb

ERROR:

ORA-01017: invalid username/password; logon denied

 

 

@> CONN  LHRSYS/XXXX@192.168.59.129/lhrdb

ERROR:

ORA-01017: invalid username/password; logon denied

 

 

@> CONN  LHRSYS/XXXX@192.168.59.129/lhrdb

ERROR:

ORA-01017: invalid username/password; logon denied

 

 

@> CONN  LHRSYS/XXXX@192.168.59.129/lhrdb

ERROR:

ORA-01017: invalid username/password; logon denied

 

 

@> CONN  LHRSYS/XXXX@192.168.59.129/lhrdb

ERROR:

ORA-01017: invalid username/password; logon denied

 

 

@> CONN  LHRSYS/XXXX@192.168.59.129/lhrdb

ERROR:

ORA-01017: invalid username/password; logon denied

 

 

@> CONN  LHRSYS/XXXX@192.168.59.129/lhrdb

ERROR:

ORA-01017: invalid username/password; logon denied

 

 

@> CONN  LHRSYS/XXXX@192.168.59.129/lhrdb

ERROR:

ORA-01017: invalid username/password; logon denied

 

 

@> CONN  LHRSYS/XXXX@192.168.59.129/lhrdb

ERROR:

ORA-01017: invalid username/password; logon denied

 

 

@> conn / as sysdba

Connected.

 

SYS@lhrdb> select username, account_status,EXPIRY_DATE,lock_date from dba_users where username = 'LHRSYS';

 

USERNAME                       ACCOUNT_STATUS                   EXPIRY_DATE         LOCK_DATE

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

LHRSYS                         EXPIRED & LOCKED(TIMED)          2016-12-02 10:07:27 2016-12-02 10:09:03

 

SYS@lhrdb>

SYS@lhrdb> alter user lhrsys  account unlock;

 

User altered.

 

SYS@lhrdb> select username, account_status,EXPIRY_DATE,lock_date from dba_users where username = 'LHRSYS';

 

USERNAME                       ACCOUNT_STATUS                   EXPIRY_DATE         LOCK_DATE

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

LHRSYS                         EXPIRED                          2016-12-02 10:07:27

 

SYS@lhrdb> alter user lhrsys identified by lhr;

 

User altered.

 

SYS@lhrdb> select username, account_status,EXPIRY_DATE,lock_date from dba_users where username = 'LHRSYS';

 

USERNAME                       ACCOUNT_STATUS                   EXPIRY_DATE         LOCK_DATE

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

LHRSYS                         OPEN

 

SYS@lhrdb>

 

 

 

三、  EXPIRED(GRACE) & LOCKED

EXPIRED(GRACE) & LOCKED 状态表示用户在密码过期后的有效期内被 DBA 手工锁定。

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

 

USERNAME                       ACCOUNT_STATUS                   PROFILE                        EXPIRY_DATE

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

LHRSYS                         OPEN                             TESTPROFILE                    2016-12-07 14:39:20

 

LHRSYS@lhrdb> select sysdate from dual;

 

SYSDATE

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

2016-12-07 14:39:17

 

LHRSYS@lhrdb> select sysdate from dual;

 

SYSDATE

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

2016-12-07 14:39:25

 

 

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

 

USERNAME                       ACCOUNT_STATUS                   PROFILE                        EXPIRY_DATE

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

LHRSYS                         OPEN                             TESTPROFILE                    2016-12-07 14:39:20

 

LHRSYS@lhrdb> conn lhrsys/lhr

ERROR:

ORA-28002: the password will expire within 3 days

 

 

Connected.

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

 

USERNAME                       ACCOUNT_STATUS                   PROFILE                        EXPIRY_DATE

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

LHRSYS                         EXPIRED(GRACE)                   TESTPROFILE                    2016-12-10 14:39:54

 

LHRSYS@lhrdb> alter user lhrsys account lock;

 

User altered.

 

SYS@lhrdb>  select username,account_status,EXPIRY_DATE,lock_date from dba_users where username = 'LHRSYS';

 

USERNAME                       ACCOUNT_STATUS                   EXPIRY_DATE         LOCK_DATE

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

LHRSYS                         EXPIRED(GRACE) & LOCKED           2016-12-10 14:39:54   2016-12-07 14: 40 :20

 

 

LHRSYS@lhrdb> alter user lhrsys account unlock;

 

User altered.

 

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

 

USERNAME                       ACCOUNT_STATUS                   PROFILE                        EXPIRY_DATE

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

LHRSYS                         EXPIRED(GRACE)                    TESTPROFILE                    2016-12-10 14:39:54

 

LHRSYS@lhrdb>  alter user LHRSYS identified by lhr;

 

User altered.

 

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

 

USERNAME                       ACCOUNT_STATUS                   PROFILE                        EXPIRY_DATE

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

LHRSYS                         OPEN                             TESTPROFILE                    2016-12-12 14:40:46

 

LHRSYS@lhrdb>

 

四、  EXPIRED(GRACE) & LOCKED(TIMED)

EXPIRED(GRACE) & LOCKED(TIMED) 状态表示用户在密码过期后的有效期内, 失败 登录次数超过 PROFILE 中的 FAILED_LOGIN_ATTEMPTS 的限制

SYS@lhrdb>  select username,account_status,EXPIRY_DATE,lock_date from dba_users where username = 'LHRSYS';

 

USERNAME                       ACCOUNT_STATUS                   EXPIRY_DATE         LOCK_DATE

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

LHRSYS                         OPEN                             2016-12-07 14:50:06

 

LHRSYS@lhrdb> select sysdate from dual;

 

SYSDATE

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

2016-12-02 14:50:13

 

修改系统日期:

[root@orcltest ~]# date '12071450'

Wed Dec  7 14:50:00 CST 2016

[root@orcltest ~]#

查询:

LHRSYS@lhrdb> select sysdate from dual;

 

SYSDATE

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

2016-12-07 14:50:03

 

LHRSYS@lhrdb> select sysdate from dual;

 

SYSDATE

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

2016-12-07 14:50:12

 

SYS@lhrdb>  select username,account_status,EXPIRY_DATE,lock_date from dba_users where username = 'LHRSYS';

 

USERNAME                       ACCOUNT_STATUS                   EXPIRY_DATE         LOCK_DATE

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

LHRSYS                         OPEN                             2016-12-07 14:50:06

 

LHRSYS@lhrdb> conn lhrsys/lhr

ERROR:

ORA-28002: the password will expire within 3 days

 

 

Connected.

SYS@lhrdb>  select username,account_status,EXPIRY_DATE,lock_date from dba_users where username = 'LHRSYS';

 

USERNAME                       ACCOUNT_STATUS                   EXPIRY_DATE         LOCK_DATE

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

LHRSYS                         EXPIRED(GRACE)                    2016-12-10 14:50:21

 

LHRSYS@lhrdb> CONN  LHRSYS/XXXX@192.168.59.129/lhrdb

ERROR:

ORA-01017: invalid username/password; logon denied

 

 

Warning: You are no longer connected to ORACLE.

@> CONN  LHRSYS/XXXX@192.168.59.129/lhrdb

ERROR:

ORA-01017: invalid username/password; logon denied

 

 

@> CONN  LHRSYS/XXXX@192.168.59.129/lhrdb

ERROR:

ORA-01017: invalid username/password; logon denied

 

 

@> CONN  LHRSYS/XXXX@192.168.59.129/lhrdb

ERROR:

ORA-01017: invalid username/password; logon denied

 

 

@> CONN  LHRSYS/XXXX@192.168.59.129/lhrdb

ERROR:

ORA-01017: invalid username/password; logon denied

 

 

@> CONN  LHRSYS/XXXX@192.168.59.129/lhrdb

ERROR:

ORA-01017: invalid username/password; logon denied

 

 

@> CONN  LHRSYS/XXXX@192.168.59.129/lhrdb

ERROR:

ORA-01017: invalid username/password; logon denied

 

 

@> CONN  LHRSYS/XXXX@192.168.59.129/lhrdb

ERROR:

ORA-01017: invalid username/password; logon denied

 

 

@> CONN  LHRSYS/XXXX@192.168.59.129/lhrdb

 

ERROR:

ORA-01017: invalid username/password; logon denied

 

 

@> @> CONN  LHRSYS/XXXX@192.168.59.129/lhrdb

ERROR:

ORA-01017: invalid username/password; logon denied

 

 

@> CONN  LHRSYS/XXXX@192.168.59.129/lhrdb

ERROR:

ORA-28000: the account is locked

 

 

@> conn / as sysdba

Connected.

SYS@lhrdb> select username,account_status,EXPIRY_DATE,lock_date from dba_users where username = 'LHRSYS';

 

USERNAME                       ACCOUNT_STATUS                   EXPIRY_DATE         LOCK_DATE

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

LHRSYS                         EXPIRED(GRACE) & LOCKED(TIMED)    2016-12-10 14:50:21   2016-12- 07 14:5 3 : 30

 

 

SYS@lhrdb> alter user lhrsys account unlock;

 

User altered.

 

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

 

USERNAME                       ACCOUNT_STATUS                   PROFILE                        EXPIRY_DATE

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

LHRSYS                         EXPIRED(GRACE)                   TESTPROFILE                    2016-12-10 14:50:21

 

SYS@lhrdb>  alter user LHRSYS identified by lhr;

 

User altered.

 

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

 

USERNAME                       ACCOUNT_STATUS                   PROFILE                        EXPIRY_DATE

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

LHRSYS                         OPEN                             TESTPROFILE                    2016-12-1 2 14:5 5 :04

 

 

 

1.3.3   在不知道用户密码的情况下如何更改密码

O racle 若用户的密码变为锁定状态( LOCKED LOCKED(TIMED) )则 DBA 直接执行 ALTER USER 用户名 ACCOUNT UNLOCK 就可以 解锁了。 但是 如果 用户的状态 变成 过期 状态 EXPIRED EXPIRED(GRACE) ), DBA 必须要更改 用户的 密码账户才能重新使用 但有些时候 因为各种原因并不知道原密码的明文是什么 这时候 可以有如下 2 种办法来更新密码。

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

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

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

wpsDDD6.tmp 

另外,可以通过 DBMS_METADATA.GET_DDL 包或者 expdp exp 命令来获取创建用户的语句从而获取密码的密文形式:

SYS@lhrdb> set long 9999

SYS@lhrdb> SELECT DBMS_METADATA.GET_DDL('USER', 'LHRSYS') DDL_SQL FROM DUAL;

 

DDL_SQL

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

 

   CREATE USER "LHRSYS" IDENTIFIED BY VALUES 'S:853EA80BAE11F79D6946453F38059E30313FE84C96AE2EE4F3AA35A648BD; F809740420A44EFC '

      DEFAULT TABLESPACE "USERS"

      TEMPORARY TABLESPACE "TEMP"

 

 

SYS@lhrdb>

SYS@lhrdb>

 

 

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

SYS@lhrdb>

SYS@lhrdb> alter user LHRSYS identified by values 'F809740420A44EFC';

 

User altered.

 

SYS@lhrdb> CONN  LHRSYS/lhr@192.168.59.129/lhrdb

Connected.

LHRSYS@192.168.59.129/lhrdb> conn / as sysdba

Connected.

SYS@lhrdb> alter user LHRSYS identified by values 'S:853EA80BAE11F79D6946453F38059E30313FE84C96AE2EE4F3AA35A648BD;F809740420A44EFC';

 

User altered.

 

SYS@lhrdb> CONN  LHRSYS/lhr@192.168.59.129/lhrdb

Connected.

LHRSYS@192.168.59.129/lhrdb>

 

 

这种情况下 虽然我们不知道原密码是什么 但可以用它的密文来更改密码 这样 在不知道原密码的情况下 既保持了密码不改变 又可以把 expired 的状态更改掉

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

SELECT SQLTEXT

  FROM   ( SELECT   NAME ,

               'alter user '   ||   NAME   ||   ' identified by values '''   ||

               PASSWORD   ||   ''';' SQLTEXT

          FROM USER$

         WHERE SPARE4 IS   NULL

           AND   PASSWORD   IS   NOT   NULL

        UNION

        SELECT   NAME ,

               'alter user '   ||   NAME   ||   ' identified by values '''   || SPARE4 ||   ';'   ||

               PASSWORD   ||   ''';' SQLTEXT

          FROM USER$

         WHERE SPARE4 IS   NOT   NULL

           AND   PASSWORD   IS   NOT   NULL )

  WHERE   NAME   =   'LHRSYS' ;

SYS@lhrdb> SELECT SQLTEXT

  2    FROM (SELECT NAME,

  3                 'alter user ' || NAME || ' identified by values ''' ||

  4                 PASSWORD || ''';' SQLTEXT

  5            FROM USER$

  6           WHERE SPARE4 IS NULL

  7             AND PASSWORD IS NOT NULL

  8          UNION

  9          SELECT NAME,

10                 'alter user ' || NAME || ' identified by values ''' || SPARE4 || ';' ||

11                 PASSWORD || ''';' SQLTEXT

12            FROM USER$

13           WHERE SPARE4 IS NOT NULL

14             AND PASSWORD IS NOT NULL)

15   WHERE NAME = 'LHRSYS';

 

SQLTEXT

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

alter user LHRSYS identified by values 'S:853EA80BAE11F79D6946453F38059E30313FE84C96AE2EE4F3AA35A648BD;F809740420A44EFC';

 

 

1.3.3.2   直接更新 USER$ 基表

不管用户的状态是什么,通过更新 USER$ 表可以让用户处于 OPEN 状态:

SYS@lhrdb> select username, account_status,EXPIRY_DATE,lock_date from dba_users where username = 'LHRSYS';

 

USERNAME                       ACCOUNT_STATUS                   EXPIRY_DATE         LOCK_DATE

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

LHRSYS                         EXPIRED                          2016-12-02 10:40:09

 

SYS@lhrdb> UPDATE USER$ SET ASTATUS=0 WHERE NAME='LHRSYS';

 

1 row updated.

 

SYS@lhrdb> commit; <<<<<<<<<------ 及时提交

 

Commit complete.

 

SYS@lhrdb> select username, account_status,EXPIRY_DATE,lock_date from dba_users where username = 'LHRSYS';

 

USERNAME                       ACCOUNT_STATUS                   EXPIRY_DATE         LOCK_DATE

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

LHRSYS                         OPEN

 

SYS@lhrdb>

 

 

1.3.4   user$.lCOUNT 列记录了失败的登陆次数

登录失败, lcount 1 ;只要成功登录后, lcount 栏位就会置 0

SYS@lhrdb> select NAME,LCOUNT  from user$ a WHERE a.NAME='LHRSYS';

 

NAME                               LCOUNT

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

LHRSYS                                  0

 

SYS@lhrdb> CONN  LHRSYS/XXXX@192.168.59.129/lhrdb

ERROR:

ORA-01017: invalid username/password; logon denied

 

 

Warning: You are no longer connected to ORACLE.

@> CONN  LHRSYS/XXXX@192.168.59.129/lhrdb

ERROR:

ORA-01017: invalid username/password; logon denied

 

 

@> conn / as sysdba

Connected.

SYS@lhrdb> select NAME,LCOUNT  from user$ a WHERE a.NAME='LHRSYS';

 

NAME                               LCOUNT

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

LHRSYS                                  2

 

SYS@lhrdb>

SYS@lhrdb> CONN  LHRSYS/lhr

Connected.

LHRSYS@lhrdb> conn / as sysdba

Connected.

SYS@lhrdb> select NAME,LCOUNT  from user$ a WHERE a.NAME='LHRSYS';

 

NAME                               LCOUNT

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

LHRSYS                                  0

 

SYS@lhrdb>

 

 

另外,审计表也记录了登陆失败的信息:

SELECT d.username , d.timestamp , d.action_name , d.os_username , d.terminal

  FROM DBA_AUDIT_TRAIL D

  WHERE D.RETURNCODE =   1017

   AND D.USERNAME =   'LHRSYS'

  ORDER   BY d.timestamp DESC   ;

wpsDDD7.tmp 

 

1.3.5   11g 密码区分大小写 --sec_case_sensitive_logon

Property

Description

Parameter type

Boolean

Default value

true

Modifiable

ALTER SYSTEM

Range of values

true | false

Basic

No

Oracle 11g 开始,密码区分大小写,采用参数 sec_case_sensitive_logon 控制,该参数默认为 TRUE

 

SEC_CASE_SENSITIVE_LOGON enables or disables password case sensitivity in the database.

Values:

true Database logon passwords are case sensitive.

false Database logon passwords are not case sensitive.

 

1.3.6   密码延迟验证

11g 开始,如果一个用户使用不正确的密码尝试登录数据库,那么随着登录失败次数的增加,每次登录验证前延迟等待的时间也会增加。

 

通过设置 EVENTS 28401 可以屏蔽密码延迟验证:

SQL> ALTER SYSTEM SET EVENT = '28401 TRACE NAME CONTEXT FOREVER, LEVEL 1' SCOPE = SPFILE

 

设置该事件后重启数据库即可。

[oracle@orcltest ~]$ oerr ora 28401

28401, 00000, "Event to disable delay after three failed login attempts"

// *Document: NO

// *Cause: N/A

// *Action: Set this event in your environment to disable the login delay

//          which will otherwise take place after three failed login attempts.

// *Note: THIS IS NOT A USER ERROR NUMBER/MESSAGE. THIS DOES NOT NEED TO BE

//        TRANSLATED OR DOCUMENTED.

[oracle@orcltest ~]$

 

 

1.3.7   哪些用户密码没有被修改过

Oracle 11g 中对于安全方面进行了很大的改进,比如增加了密码大小写验证,增加了密码复杂度的验证等等。在 Oracle 11g 中还提供了一个视图 DBA_USERS_WITH_DEFPWD 用来指出那些用户的密码没有被修改过,仍然是数据库默认密码。 Oracle 并不是简单的监测是否密码被修改,而是检查密码是否修改为别的值,如果新密码和旧密码保持一致,那么即使密码被修改,这个用户仍然在 DBA_USERS_WITH_DEFPWD 视图中。

SELECT   *   FROM DBA_USERS_WITH_DEFPWD ;

wpsDDD8.tmp 

 

1.3.8   密码复杂性校验

脚本位置: $ORACLE_HOME/rdbms/admin/utlpwdmg.sql

wpsDDD9.tmp

[oracle@orcltest ~]$ ll $ORACLE_HOME/rdbms/admin/utlpwdmg.sql

-rw-r--r-- 1 oracle oinstall 11555 Aug 13  2006 /u02/app/oracle/product/11.2.0/dbhome_1/rdbms/admin/utlpwdmg.sql

[oracle@orcltest ~]$

 

SYS@lhrdb> @?/rdbms/admin/utlpwdmg.sql

 

Function created.

 

 

Profile altered.

 

 

Function created.

 

SYS@lhrdb>

 

 

该脚本中有如下的一段:

ALTER PROFILE DEFAULT LIMIT

PASSWORD_LIFE_TIME 180

PASSWORD_GRACE_TIME 7

PASSWORD_REUSE_TIME UNLIMITED

PASSWORD_REUSE_MAX UNLIMITED

FAILED_LOGIN_ATTEMPTS 10

PASSWORD_LOCK_TIME 1

PASSWORD_VERIFY_FUNCTION verify_function_11G;

 

更改之后查看:

SYS@lhrdb> SELECT * FROM Dba_Profiles d WHERE d.profile='DEFAULT';

 

PROFILE                        RESOURCE_NAME                    RESOURCE LIMIT

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

DEFAULT                        COMPOSITE_LIMIT                  KERNEL   UNLIMITED

DEFAULT                        SESSIONS_PER_USER                KERNEL   UNLIMITED

DEFAULT                        CPU_PER_SESSION                  KERNEL   UNLIMITED

DEFAULT                        CPU_PER_CALL                     KERNEL   UNLIMITED

DEFAULT                        LOGICAL_READS_PER_SESSION        KERNEL   UNLIMITED

DEFAULT                        LOGICAL_READS_PER_CALL           KERNEL   UNLIMITED

DEFAULT                        IDLE_TIME                        KERNEL   UNLIMITED

DEFAULT                        CONNECT_TIME                     KERNEL   UNLIMITED

DEFAULT                        PRIVATE_SGA                      KERNEL   UNLIMITED

DEFAULT                        FAILED_LOGIN_ATTEMPTS            PASSWORD 10

DEFAULT                        PASSWORD_LIFE_TIME               PASSWORD 180

DEFAULT                        PASSWORD_REUSE_TIME              PASSWORD UNLIMITED

DEFAULT                        PASSWORD_REUSE_MAX               PASSWORD UNLIMITED

DEFAULT                        PASSWORD_VERIFY_FUNCTION         PASSWORD VERIFY_FUNCTION_11G

DEFAULT                        PASSWORD_LOCK_TIME               PASSWORD 1

DEFAULT                        PASSWORD_GRACE_TIME              PASSWORD 7

 

16 rows selected.

 

SYS@lhrdb> create user lhrpwd identified by lhr;

create user lhrpwd identified by lhr

*

ERROR at line 1:

ORA-28003: password verification for the specified password failed

ORA-20001: Password length less than 8

 

 

SYS@lhrdb>

SYS@lhrdb> alter profile default limit PASSWORD_VERIFY_FUNCTION null; <<<<<<<<<------ 取消复杂性验证

 

Profile altered.

 

SYS@lhrdb> create user lhrpwd identified by lhr;

 

User created.

 

SYS@lhrdb> alter profile default limit PASSWORD_VERIFY_FUNCTION VERIFY_FUNCTION_11G; <<<<<<<------ 启用密码复杂性验证

 

Profile altered.

 

SYS@lhrdb>

 

 

 

1.3.9   resource_limit

官方文档资料:

To create a profile, you must have the CREATE PROFILE system privilege.

To specify resource limits for a user, you must:

?Enable resource limits dynamically with the ALTER SYSTEM statement or with the initialization parameter RESOURCE_LIMIT. This parameter does not apply to password resources. Password resources are always enabled.

?Create a profile that defines the limits using the CREATE PROFILE statement

?Assign the profile to the user using the CREATE USER or ALTER USER statement

 

1) 用户所有拥有的 PROFILE 中有关密码的限制永远生效,不受限制。
2 )用户所有拥有的 PROFILE 中有关资源的限制与 resource_limit 参数的设置有关,当为 TRUE 时生效,当为 FALSE 时(默认值是 FALSE )无效。







About Me

...............................................................................................................................

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

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

● 本文itpub地址:http://blog.itpub.net/26736162/viewspace-2129595/

● 本文博客园地址:http://www.cnblogs.com/lhrbest/p/6127710.html

● 本文pdf版及小麦苗云盘地址:http://blog.itpub.net/26736162/viewspace-1624453/

● 数据库笔试面试题库及解答:http://blog.itpub.net/26736162/viewspace-2134706/

● QQ群:230161599     微信群:私聊

● 联系我请加QQ好友(646634621),注明添加缘由

● 于 2016-12-01 15:00 ~ 2016-12-02 23:00 在魔都完成

● 文章内容来源于小麦苗的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

...............................................................................................................................

拿起手机使用微信客户端扫描下边的左边图片来关注小麦苗的微信公众号:xiaomaimiaolhr,扫描右边的二维码加入小麦苗的QQ群,学习最实用的数据库技术。

img_e3029f287d989cd04bd75432ecc1c172.png
DBA笔试面试讲解
欢迎与我联系

目录
相关文章
|
8天前
|
运维 Oracle 安全
Oracle的三重奏:密码文件、警告文件与跟踪文件
【4月更文挑战第19天】Oracle数据库的三大守护者:密码文件保护系统免受未经授权访问,如同宝藏的“密码锁”;警告文件似“哨兵”,记录错误信息,助于及时解决问题;跟踪文件扮演“侦探”角色,详尽记录操作,便于性能优化和故障排查。这三份文件共同确保数据王国的安全与稳定。作为管理员,重视并善用它们是关键。
|
3月前
|
Oracle 关系型数据库 数据库
【Oracle学习】—Oracle11g修改用户名与密码(一)
【Oracle学习】—Oracle11g修改用户名与密码(一)
|
9月前
|
SQL 存储 Oracle
oracle的用户名和密码怎么查
oracle的用户名和密码怎么查
|
10月前
|
运维 Oracle 关系型数据库
登录Oracle数据库遇到ORA-01017密码错误的解决办法
我们在登录Oracle数据库时可能会遇到ORA-01017错误,这里分析原因并提供解决办法。 点击试看博主的专著《MySQL 8.0运维与优化》(清华大学出版社)
565 0
|
11月前
|
存储 Oracle 关系型数据库
|
11月前
|
数据库 数据安全/隐私保护 数据库管理
Oracle-修改用户密码为UNLIMITED
Oracle-修改用户密码为UNLIMITED
52 0
|
SQL Oracle 安全
Oracle 修改SYS、system用户密码
Oracle 修改SYS、system用户密码
1801 0
|
SQL Oracle 关系型数据库
Oracle OS认证与密码文件认证(操作系统认证、口令文件认证、创建密码文件)
Oracle OS认证与密码文件认证(操作系统认证、口令文件认证、创建密码文件)
471 0
|
SQL Oracle 关系型数据库
oracle学习39-oracle11g密码过期后的解决方法
oracle学习39-oracle11g密码过期后的解决方法
82 0