一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

如何调整Oracle用户密码复杂度策略

时间:2026-08-25 09:33:49 编辑:袖梨 来源:一聚教程网

必须重新执行utlpwdmg.sql并显式绑定到profile才生效;直接修改脚本内容无效,因Oracle只调用profile中PASSWORD_VERIFY_FUNCTION字段指定的函数,需先查用户profile及绑定函数,再以SYS AS SYSDBA执行脚本并ALTER PROFILE绑定。

直接改 utlpwdmg.sql 文件内容没用,必须重新执行脚本并绑定到 profile 才生效。

确认当前生效的密码验证函数

很多问题出在“以为改了就生效”,其实 profile 没更新。先查清楚谁在管密码校验:

  1. 查用户用哪个 profile:SELECT profile FROM dba_users WHERE username = 'YOUR_USER';
  2. 查该 profile 绑定的函数:SELECT limit FROM dba_profiles WHERE profile = 'DEFAULT' AND resource_name = 'PASSWORD_VERIFY_FUNCTION';
  3. 如果返回 NULL,说明没启用复杂度;如果是 verify_function_11Gora12c_strong_verify_function,说明已启用但可能版本不匹配

执行 utlpwdmg.sql 前必须满足的三个条件

跳过任一检查,脚本会编译成功但函数不触发校验,或者直接报错。

  1. 必须以 SYS AS SYSDBA 连接,SYSTEM 或普通 DBA 权限不够
  2. RESOURCE_LIMIT 必须为 TRUE:运行 SHOW PARAMETER resource_limit,若为 FALSE,先执行 ALTER SYSTEM SET resource_limit = TRUE;
  3. 路径要对——Oracle 12c+ 自带的脚本在 $ORACLE_HOME/rdbms/admin/utlpwdmg.sql,别用网上下载的同名文件覆盖原版

修改密码规则时能动和不能动的地方

常见需求是调低长度、去掉特殊字符要求,但改法不对等于关掉校验。

  1. 可安全调整:min_length(11g)、length(12c+)、min_uppercase/uppermin_lowercase/lowermin_digits/digitmin_special/special
  2. 禁止删或注释掉 raise_application_error 分支前的任意校验逻辑,否则函数可能提前返回 TRUE
  3. 别在函数里加 DBMS_OUTPUT.PUT_LINE —— 登录鉴权阶段没有输出上下文,还可能因权限报 ORA-06502

改完之后必须做的两步操作

只改脚本或只改函数定义,都不算完成。

  1. 重新执行脚本:@?/rdbms/admin/utlpwdmg.sql(注意是 @,不是 START
  2. 显式绑定到 profile:ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION ora12c_strong_verify_function;(12c+ 推荐)或 verify_function_11G(11g 兼容)
  3. 验证是否生效:用测试用户执行 ALTER USER test_user IDENTIFIED BY simple123;,看是否报 ORA-28003 及具体错误码

最常被忽略的是 profile 绑定这一步——函数编译成功 ≠ 生效;还有人把 utlpwdmg.sql 改完后忘了重新执行,只改了源文件,数据库里还是旧函数。

热门栏目