Oracle用户密码过期问题解决

摘要:
但是,如果您收到密码即将过期的提示,您将无法启动自动跟踪。SQL˃conndarren/darren错误:ORA-28002:密码将在7天内过期已连接。SQL˃设置自动跟踪;错误:ORA-28002:密码将在7天内过期SP2-0619:连接SP2-0611时出错:启用STATISTICS报告时出错_ LIFE_ TIME参数不能设置为无限。您可以查看dba_验证配置文件:SQL˃selectprofile,resource_name,limitfromdba_ profiles其中resource_name='PASSWORD_LIFE_TIME';PROFILERESOURCE_NAMELIMIT----------------------------------------------------DEFAULTPASSWORD_LIFE_TIME1如果在生产环境中对密码过期没有特殊限制,可以将此参数更改为无限制:ALTERPROFILEDEFAULTLIMITPASSWORD_LIFE_ TIMEUNLIMITED此时,尝试打开自动跟踪:SQL˃selectprofile,resource_name,limitfromdba_ profileswereresource_ name='密码_生活_时间';PROFILERESOURCE_NAMELIMIT-----------------------------------------------------默认密码_生命_时间限制DSQL˃conndarren/darrenERROR:ORA-28002:密码将在连接的7天内过期。SQL˃设置自动跟踪;错误:ORA-28002:密码将在7天内过期SP2-0619:ErrorwhileconnectingSP2-0611:ErrorenablingSTATISTICSreport是相同的错误。这意味着当用户的密码即将过期时,修改配置文件将不会对密码即将过期的用户生效。因此,当用户密码即将过期且启用自动跟踪功能时,将生成异常,因为创建新会话时返回ORA-2802。

一、用户密码即将过期,导致autotrace无法打开

如果用户密码即将过期,在登录数据库时会收到如下提示:
ERROR:
ORA-28002: the password will expire within 7 days
当然,此时密码还未真正过期,用户在收到错误提示后依然可以登录数据库。但是,如果当收到密码即将过期的提示,想要开启autotrace就会有问题。

  1. SQL>conn darren/darren
  2. ERROR:
  3. ORA-28002:the password will expire within 7 days
  4. Connected.
  5. SQL>set autotrace on;
  6. ERROR:
  7. ORA-28002:the password will expire within 7 days
SP2-0619: Error while connecting
SP2-0611: Error enabling STATISTICS report

既然出现了密码即将过期的提示,说明profile中的PASSWORD_LIFE_TIME参数肯定没有设置成unlimited,可以查看dba_profiles进行验证:

  1. SQL>selectprofile,resource_name,limitfromdba_profileswhereresource_name='PASSWORD_LIFE_TIME';
  2. PROFILE RESOURCE_NAME LIMIT
  3. ---------- -------------------------------- ----------
  4. DEFAULTPASSWORD_LIFE_TIME 1

如果生产环境没有对密码过期的特殊限制,可以把该参数修改为unlimitd:

  1. ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED

此时再尝试打开autotrace:

  1. SQL>selectprofile,resource_name,limitfromdba_profileswhereresource_name='PASSWORD_LIFE_TIME';
  2. PROFILE RESOURCE_NAME LIMIT
  3. ---------- -------------------------------- ----------
  4. DEFAULTPASSWORD_LIFE_TIME UNLIMITED
  5. SQL>conn darren/darren
  6. ERROR:
  7. ORA-28002:thepasswordwill expire within 7 days
  8. Connected.
  9. SQL>setautotraceon;
  10. ERROR:
  11. ORA-28002:thepasswordwill expire within 7 days
  12. SP2-0619:Error while connecting
  13. SP2-0611:Error enabling STATISTICS report

还是同样的错误,说明在用户密码即将过期时,再修改profile是不会对密码即将过期的用户生效的。应该采用重设用户密码(密码可以与之前的密码一样)的方法。

  1. SQL>alteruserdarrenidentifiedbydarren;
  2. Useraltered.
  3. SQL>conn darren/darren
  4. Connected.
  5. SQL>setautotraceon;

此时成功开启autotrace功能。
再尝试另外一种情景,在用户登录后修改用户密码,但不重新登录,尝试开启autotrace。

  1. SQL>alteruserdarrenidentifiedbydarren
  2. 2;
  3. Useraltered.
  4. SQL>setautotraceon;
  5. ERROR:
  6. ORA-01017:invalid username/password;logon denied
  7. SP2-0619:Error while connecting
  8. SP2-0611:Error enabling STATISTICS report

同样的错误又出现了。
到此,我们得出一个结论,在开启autotrace功能的时候,数据库会再创建一个会话,用新创建的会话来跟踪当前会话。所以,当用户密码即将过期时,开启autotrace功能时,创建新的会话时会因为返回ORA-2802而产生异常。
二、11g新特性,密码延迟认证
11g中,加入了用户密码延迟认证的特性,即用户如果在登录是输入了错误的密码,那么这个用户的登录验证会随着输入错误密码的次数的增加而增加,直到正确登录后重新计数。如下:

  1. SQL> set time on
  2. 13:32:45 SQL>
  3. conn darren/xxxxxx
  4. conn darren/xxxxxx
  5. conn darren/xxxxxx
  6. conndarren/xxxxxx
  7. conndarren/xxxxxx
  8. conndarren/xxxxxx
  9. conndarren/xxxxxx
  10. ERROR:
  11. ORA-01017:invalid username/password;logon denied
  12. Warning:You are no longer connectedtoORACLE.
  13. 13:32:59SQL>ERROR:
  14. ORA-01017:invalid username/password;logon denied
  15. 13:32:59SQL>ERROR:
  16. ORA-01017:invalid username/password;logon denied
  17. 13:32:599SQL>ERROR:
  18. ORA-01017:invalid username/password;logon denied
  19. 13:33:00SQL>conn gyl/xxxxxx
  20. ERROR:
  21. ORA-01017:invalid username/password;logon denied
  22. 13:33:02SQL>
  23. ERROR:
  24. ORA-01017:invalid username/password;logon denied
  25. 13:33:05SQL>
  26. ERROR:
  27. ORA-01017:invalid username/password;logon denied
  28. 13:33:10SQL>
  29. ERROR:
  30. ORA-01017:invalid username/password;logon denied

可以看到,验证的时间越来越长,如果继续增加错误的登录次数,验证的时间还会继续加长。如果是多个会话同时不断的用错误的密码来连接数据库,那么将会导致该用户的登录HANG住。如果想关闭这个特性,可以设置如下事件:

  1. SQL>ALTERSYSTEMSETEVENT=‘28401 TRACE NAME CONTEXT FOREVER,LEVEL1’SCOPE=SPFILE;

三、sys用户是不受PASSWORD_LIFE_TIME参数限制的
四、在用户密码过期后,用户的状态(dba_user.account_status)不会立即更新为expired,只有当用户尝试连接到数据库的时候,才会对用户状态进行更新
五、用户密码相关的一些参数

  1. SQL>select*fromdba_profileswhereresource_namelike'%PASSWORD%';
  2. PROFILE RESOURCE_NAME RESOURCE LIMIT
  3. ---------- -------------------------------- -------- ----------
  4. DEFAULTPASSWORD_LIFE_TIMEPASSWORD UNLIMITED
  5. DEFAULTPASSWORD_REUSE_TIMEPASSWORD UNLIMITED
  6. DEFAULTPASSWORD_REUSE_MAX PASSWORD UNLIMITED
  7. DEFAULTPASSWORD_VERIFY_FUNCTIONPASSWORDNULL
  8. DEFAULTPASSWORD_LOCK_TIME PASSWORD 1
  9. DEFAULTPASSWORD_GRACE_TIMEPASSWORD 7

PASSWORD_LIFE_TIME:
设定口令的有效时间(天数),一旦超过这一时间,必须重新设口令。缺省为180天(11g,10gUNLIMITED).
PASSWORD_REUSE_TIME:
许多系统不许用户重新启用过去用过的口令。该资源项设定了一个失效口令要经过多少天,用户才可以重新使用该口令。缺省为UNLIMITED.
PASSWORD_REUSE_MAX:
重新启用一个先前用过的口令前必须对该口令进行重新设置的次数(重复用的次数)。
PASSWORD_LOCK_TIME:
设定帐户被锁定的天数(当登录失败达到FAILED_LOGIN_ATTEMPTS时)。
PASSWORD_GRACE_TIME:
设定在口令失效前,给予的重新设该口令的宽限天。当口令失效之后回,在登录时会出现警告信息显示该天数。如果没有在宽限天内修改口令,口令将失效。
PASSWORD_VERITY_FUNCTION:
该资源项允许调用一个PL/SQL 来验证口令。Oracle公司已提供该应用 的脚本,但是只要愿意的话,用户可以制定自己的验证脚本。该参数的设定就是PL/SQL函数的名称。缺省为NULL.
FAILED_LOGIN_ATTEMPTS:
设定登录到Oracle 数据库时可以失败的次数。一旦某用户尝试登录数据库的达到该值时,该用户的帐户就被锁定,只能由DBA能解锁。

免责声明:文章转载自《Oracle用户密码过期问题解决》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇[Oracle Data Cartridge Interface] UserDefined Aggregation Functions进程保护--CrossThreadFlags标志位下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

MSSQL为单独数据库创建登录账户

如果要为一个数据库创建一个独立的账号需要这个数据库为包含数据库 当前(非包含)的数据库所面临的问题在描述什么是包含数据库之前,先了解一下为什么会出现包含数据库。当前的数据库有一些问题,如下:1、在数据库迁移或部署的过程中一些信息会丢失     当我们将数据库从一个SQL Server实例迁移到另一个实例是,诸如登陆、工作代理等信息将不能一起被迁移。因为这...

OraCle 记录 实现 sql中的 for xml path ('')

select  * from qx_role where N_role_id in ( 1,2,3) 运行结果: select to_char(wm_concat(c_role_name)) from qx_role where N_role_id in ( SELECT REGEXP_SUBSTR ( '1,2,3', '[^,]+', 1,rown...

DB2存储过程——参数详解

语法说明1、procedure-name: 存储过程的名字,在同一个数据库的同一模式下,不能存在存储过程名相同参数数目相同的存储过程,即使参数的类型不同也不行。2、(IN | OUT | INOUT parameter-name data-type,...) :传入参数     IN:输入参数OUT:输出参数INOUT:作为输入输出参数parameter...

Entity Framework 6 自定义连接字符串ConnectionString连接MySQL

  在开始介绍之前,首先来看看官方对Entity Framework的解释:Entity Framework (EF) is an object-relational mapper that enables .NET developers to work with relational data using domain-specific objects....

Oracle面试题(基础篇)

1. Oracle跟SQL Server 2005的区别? 宏观上: 1). 最大的区别在于平台,oracle可以运行在不同的平台上,sql server只能运行在windows平台上,由于windows平台的稳定性和安全性影响了sql server的稳定性和安全性 2). oracle使用的脚本语言为PL-SQL,而sql server使用的脚本为T-...

PgSql备份pg_dump与还原手记pg_restore(转)

真没有想到,以前一直是PostgreSQL使用者,突然需要库移植又成了头一招了!原来它与mysql命令行操作区别还挺大。不用怕,但绝对要细心,因为数据库操作是网站的核心,一旦出现损坏或丢失,后果就非常严重了。我先写了步骤,然后按计划进行,虽然也出现了错误,但最终还是安全移植了。这里记录在案,以备后用。备份还原方法:pg_dump和pg_restore,先仔...