PASSWORD_VERIFY_FUNCTION必须显式启用且非NULL,否则等保测评不通过;需执行utlpwdmg.sql创建函数、ALTER PROFILE绑定、同步调整FAILED_LOGIN_ATTEMPTS等5项参数,并覆盖所有相关profile。

PASSWORD_VERIFY_FUNCTION 必须显式启用且不能为 NULL,否则等保测评直接不通过。这是最常被忽略、也最容易扣分的硬性门槛。
查清当前密码验证函数是否生效
先确认现状,避免盲目操作:
执行 SELECT profile, resource_name, limit FROM dba_profiles WHERE resource_name = 'PASSWORD_VERIFY_FUNCTION';
常见错误现象:
- 返回
NULL或空值 → 未启用任何校验逻辑,所有弱密码(如123456、oracle)均可通过 - 显示函数名(如
verify_function),但该函数在dba_objects中状态不是VALID→ 编译失败或已被删 - Oracle 11g 未运行
@?/rdbms/admin/utlpwdmg.sql,而 12c+ 未启用ora12c_verify_function
用 utlpwdmg.sql 创建并绑定基础验证函数
这是最快、最稳妥的合规起点,官方脚本已覆盖等保对长度、字符类型、用户名相似性等基本要求:
以 SYS 用户执行:@?/rdbms/admin/utlpwdmg.sql
执行后效果:
- Oracle 11g:创建
verify_function - Oracle 12c/19c/21c:创建
ora12c_verify_function(更严格,推荐) - 仅影响
DEFAULTprofile,**不会自动写入 profile 限制项**
务必补全这步:ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION ora12c_verify_function;
若业务用户使用了自定义 profile(如 SECURE_PROFILE),需单独执行 ALTER PROFILE SECURE_PROFILE LIMIT PASSWORD_VERIFY_FUNCTION ...
配套策略参数必须同步调整
单有验证函数不够,等保要求是组合策略。以下参数缺一不可,且值需满足三级要求:
-
FAILED_LOGIN_ATTEMPTS≤ 5(默认 10,不合规) -
PASSWORD_LIFE_TIME≤ 90 天(默认 180,必须改) -
PASSWORD_REUSE_TIME≥ 90 天(默认UNLIMITED,高风险) -
PASSWORD_REUSE_MAX≥ 5(防循环重用) -
PASSWORD_LOCK_TIME≥ 1/24(即 1 小时,建议设为 1)
示例命令:ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS 5 PASSWORD_LIFE_TIME 90 PASSWORD_REUSE_TIME 90 PASSWORD_REUSE_MAX 5 PASSWORD_LOCK_TIME 1/24;
特别注意:自定义 profile 和 PDB 环境易漏配
很多 DBA 只改了 DEFAULT,却忘了:
- 应用系统账号往往关联的是自定义 profile,这些 profile 的
PASSWORD_VERIFY_FUNCTION仍是NULL - Oracle 12c+ 的多租户环境(CDB/PDB)中,profile 是 CDB 级对象,但用户存在于 PDB,需确认 PDB 内用户实际继承的是哪个 profile
- 修改后不重启实例,但对新用户建账立即生效;已有用户下次改密时才触发校验
真正容易被忽略的点是:profile 修改后,必须验证函数存在且有效、配套参数全部到位、所有相关 profile(不止 DEFAULT)都完成绑定——三者缺一,等保现场测评就会卡在身份鉴别项。


















