【密码】Oracle用户密码系列

密码 Oracle 用户密码系列

1.1   BLOG 文档结构图

 

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

 

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

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+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 视图查询),用户将被锁定。

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

 


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) 两种状态都属于密码过期状态

 

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

 

另外,可以通过 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   ;

 

 

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 ;

 

 

1.3.8   密码复杂性校验

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


[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群,学习最实用的数据库技术。

时间: 2024-10-27 10:58:20

【密码】Oracle用户密码系列的相关文章

【方法】Oracle用户密码含特殊字符时的登陆问题

[方法]Oracle用户密码含特殊字符时的登陆问题   1.1  BLOG文档结构图   1.2  前言部分 1.2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① 用户密码含有特殊字符,如@.%.&.¥.#等字符,如何修改密码及登录数据库(重点) ② exp或expdp的时候使用sys用户导出   Tips: ① 本文在itpub(http://blog.itpub.net/26736162).博客园(htt

一个修改Oracle用户密码的小诀窍

oracle 一个修改Oracle用户密码的小诀窍 数据库版本:9.2.0.5   有时候我们可能不知道一个用户的密码,但是又需要以这个用户做一些操作,又不能去修改掉这个用户的密码,这个时候,就可以利用一些小窍门,来完成操作. 具体操作过程如下: SQL*Plus: Release 9.2.0.5.0 - Production on 星期日 11月 21 13:32:34 2004 Copyright (c) 1982, 2002, Oracle Corporation.  All rights

Oracle 用户密码有效期的sql语句_oracle

废话不多说了,直接给大家写sql语句了,当然写法还有很多种,我也只是给大家分享其中的一种解决办法,有不同见解的可以留言哦. oracle的密码是存在有效期的,有时候会遇到密码到期需要重设的情况,查看当前密码有效期的语句: SELECT * FROM dba_profiles s WHERE s.profile='DEFAULT' AND resource_name='PASSWORD_LIFE_TIME'; 将密码的时间限制改为无限制: ALTER PROFILE DEFAULT LIMIT P

oracle用户密码设置的特殊字符问题

当oracle用户的密码里带有如@.$.!等特殊字符时,会出现一些问题. 以hr用户为例: 当oracle用户的密码里带有@时: SYS@ORCL> alter user hr identified by qwet@2017; alter user hr identified by qwet@2017 * ERROR at line 1: ORA-00922: missing or invalid option SYS@ORCL> alter user hr identified by 'qw

Oracle用户密码含有特殊字符导致无法登陆解决方法_oracle

今天碰到一个比较奇怪的问题: 在客户端上使用sqlplus用普通用户可以登录,但是system以及sys用户均无法登录,提示ORA-12154: TNS: 无法解析指定的连接标识符 SQL> conn system@webdata 输入口令: ERROR: ORA-12154: TNS: 无法解析指定的连接标识符 SQL> conn xgplat@webdata 输入口令: 已连接. 本来以为客户端是32位的缘故,就在oracle服务器上用sqlplus登录,也还是一样 SQL> con

Oracle用户密码含特殊字符时登陆失败问题_oracle

当Oracle数据库用户的密码含特殊字符如 @ 时,直接使用正常的密码输入,由于oracle将@后的字符解析为网络服务名而导致登陆失败 如下演示 用户名为:wang密码为:oracle@1网络服务名为:sun 的情况: Linux平台:'wang/"oracle@1"'@sun --1个双引号扩密码,1个单引号扩 用户名+密码,即: '用户名/"密码"'@服务名 [11:41:14oracle@dvd adump]$sqlplus wang/oracle@1@sun

详解MySQL的用户密码过期功能_Mysql

Payment Card Industry,即支付卡行业,PCI行业表示借记卡.信用卡.预付卡.电子钱包.ATM和POS卡及相关的业务. PCI DSS,即PCI数据安全标准(Payment Card Industry Data Security Standard)是由PCI安全标准委员会制定,旨在使国际上采用一致的数据安全措施. PCI DSS标准要求用户每隔90天必须更改他们的密码.那么MySQL数据库该怎样适应这个情况?幸运的是,在MySQL版本5.6.6版本起,添加了password_e

简单的用户密码管理系统

一.功能 提供软件的一般用户管理系统 二.设计思路及程序实现 1.建立的表:以下表在建立时应该先加密码,程序打开时才由程序传递密码.以避免直接用工具可打开DB文件. ① 用户资料表 用户ID:用户登录时输入的用户名. 用户姓名:用户的真实姓名. 密码:用户密码(在存入前应该进行必要的加密) 权限:用户级别. 有效期开始:该帐号从何时开始有效(下面程序没利用该功能) 有效期截止:何时该帐号不能用. 是否有效:可以让该用户暂时为不可用. 出错次数:用户连续输错密码次数(当有正确输入时复位) 出错限度

puppet添加带密码的用户

前一篇文章,我们介绍了有关puppet3.7的安装与配置,这篇文章我们再来介绍下如何利用puppet添加带密码的用户. 要通过puppet添加带密码的用户,我们需要分以下几个步骤: 1.查看user资源帮助 2.user选项说明 3.添加系统用户 4.生成用户密码 5.添加带密码的用户 一.查看user资源帮助 要通过puppet为系统添加用户,我们需要首先查看puppet如何添加用户,这个我们可以查看puppet的user资源帮助信息.如下: puppet describe user pupp