【问题标题】:Oracle not prompting to change the password when password is expired密码过期Oracle不提示修改密码
【发布时间】:2016-08-30 10:02:18
【问题描述】:

account_status 过期后一般会提示修改下次登录的密码,但是这里通过PL/SQL和sqlplus工具连接时会抛出下面的错误并关闭。

ORA-00604: 递归 SQL 级别 1 发生错误 ORA-06502: PL/SQL: 数字或值错误: 字符串缓冲区太小。 ORA-06512: 在第 8 行 ORA-28001: 密码已过期

当我尝试从服务器连接时。它正在提示更改密码。可能是什么错误。 FYI-Account_status 未锁定。

当account_status处于过期状态时,如何在pl/sql developer或toad或sqlplus工具中提示修改密码?

【问题讨论】:

  • 是否有某种登录触发器被调用?因为它表明它是一个 pl/sql 错误?也可能有一个触发器来记录可能导致同样问题的错误......

标签: oracle plsql oracle11g plsqldeveloper database-administration


【解决方案1】:

密码验证功能可能有错误。几周前我犯了同样的错误,并有效地将人们锁定在他们的帐户之外。

使用此查询查找您的密码验证功能:

select * from dba_profiles where resource_name = 'PASSWORD_VERIFY_FUNCTION';

用这个查询查看这个来源:

select * from dba_source where name = '<name from above query>';

大多数密码验证函数在顶部都有数组来保存字符集。可能有一个像这样的变量声明 第 8 行:

special_character_array varchar2(10) := '!@#$%^&*()';

出于某种原因,大多数人只选择了一些最常见的特殊字符。然后,当人们使用不太常见的字符时,他们就无法更改密码。

要解决此问题,DBA 可能会在列表中添加更多字符。以下是典型美式英语键盘上所有特殊字符的更完整列表:

special_character_array varchar2(10) := '`~!@#$%^&*()-_=+[{]}\|;:''",<.>/?';

错误在于添加更多字符但没有将varchar2(10) 的大小增加到varchar2(31)。 (或者做最坏的打算让它varchar2(4000)。)这将导致错误“ORA-06502: PL/SQL: numeric or value error: string buffer too small.”

如果这是问题,您需要以 SYSDBA 身份登录以重新编译密码验证功能。

【讨论】:

    【解决方案2】:

    感谢 Jon Heller 的精彩解释。

    我发现错误是由我们创建的一些日志触发器引起的。正如您所提到的,为特定变量增加 varchar2(100) 的大小解决了这个问题。现在,当用户的帐户状态过期时,它会提示更改密码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-25
      • 2010-11-08
      • 2012-06-03
      • 1970-01-01
      • 1970-01-01
      • 2014-07-07
      • 2023-04-03
      相关资源
      最近更新 更多