同样的错误又出现了。
到此,我们得出一个结论,在开启autotrace功能的时候,数据库会再创建一个会话,用新创建的会话来跟踪当前会话。所以,当用户密码即将过期时,开启autotrace功能时,创建新的会话时会因为返回ORA-2802而产生异常。
二、11g新特性,密码延迟认证
11g中,加入了用户密码延迟认证的特性,即用户如果在登录是输入了错误的密码,那么这个用户的登录验证会随着输入错误密码的次数的增加而增加,直到正确登录后重新计数。如下:
SQL> set time on
13:32:45 SQL>
conn darren/xxxxxx
conn darren/xxxxxx
conn darren/xxxxxx
conn darren/xxxxxx
conn darren/xxxxxx
conn darren/xxxxxx
conn darren/xxxxxx
ERROR:
ORA-01017: invalid username/password; logon denied
Warning: You are no longer connected to ORACLE.
13:32:59 SQL> ERROR:
ORA-01017: invalid username/password; logon denied
13:32:59 SQL> ERROR:
ORA-01017: invalid username/password; logon denied
13:32:599 SQL> ERROR:
ORA-01017: invalid username/password; logon denied
13:33:00 SQL> conn gyl/xxxxxx
ERROR:
ORA-01017: invalid username/password; logon denied
13:33:02 SQL>
ERROR:
ORA-01017: invalid username/password; logon denied
13:33:05 SQL>
ERROR:
ORA-01017: invalid username/password; logon denied
13:33:10 SQL>
ERROR:
ORA-01017: invalid username/password; logon denied
可以看到,验证的时间越来越长,如果继续增加错误的登录次数,验证的时间还会继续加长。如果是多个会话同时不断的用错误的密码来连接数据库,那么将会导致该用户的登录HANG住。如果想关闭这个特性,可以设置如下事件:
SQL> ALTER SYSTEM SET EVENT = ‘28401 TRACE NAME CONTEXT FOREVER, LEVEL 1’ SCOPE = SPFILE;
三、sys用户是不受PASSWORD_LIFE_TIME参数限制的
四、在用户密码过期后,用户的状态(dba_user.account_status)不会立即更新为expired,只有当用户尝试连接到数据库的时候,才会对用户状态进行更新
五、用户密码相关的一些参数
SQL> select * from dba_profiles where resource_name like '%PASSWORD%';
PROFILE RESOURCE_NAME RESOURCE LIMIT
---------- -------------------------------- -------- ----------
DEFAULT PASSWORD_LIFE_TIME PASSWORD UNLIMITED
DEFAULT PASSWORD_REUSE_TIME PASSWORD UNLIMITED
DEFAULT PASSWORD_REUSE_MAX PASSWORD UNLIMITED
DEFAULT PASSWORD_VERIFY_FUNCTION PASSWORD NULL
DEFAULT PASSWORD_LOCK_TIME PASSWORD 1
DEFAULT PASSWORD_GRACE_TIME PASSWORD 7