密码过期时,Oracle不会提示更改密码

时间:2016-05-04 19:43:32

标签: oracle plsql oracle11g plsqldeveloper database-administration

当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开发人员或toad或sqlplus工具中提示更改密码?

2 个答案:

答案 0 :(得分:0)

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

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

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)。)这会导致错误&#34; ORA-06502:PL / SQL:数字或值错误:字符串缓冲区太小。&#34;

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

答案 1 :(得分:0)

感谢Jon Heller提供了很好的解释。

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

相关问题