运维管理5 分钟阅读
Oracle 密码过期 ORA-28001 处理方法 — 解除密码策略限制
应用突然连不上数据库报 ORA-28001 密码过期?本文讲解 Oracle 密码策略机制、紧急恢复步骤、密码永不过期设置、以及安全合规下的最佳实践。
2026年4月26日阅读—点赞—收藏—
oracle密码策略ora-28001安全profile
在知识库中专注阅读,并随时返回相关工具与课程
应用突然连不上数据库报 ORA-28001 密码过期?本文讲解 Oracle 密码策略机制、紧急恢复步骤、密码永不过期设置、以及安全合规下的最佳实践。
周一早上到公司,应用全部报错 ORA-28001: the password has expired——这是 DBA 最不想在早高峰遇到的问题之一。
先恢复业务,再排查原因。
1-- 用 sysdba 连接2sqlplus / as sysdba34-- 直接修改密码(设回原密码也行)5ALTER USER app_user IDENTIFIED BY "原密码";67-- 如果账户已锁定8ALTER USER app_user ACCOUNT UNLOCK;立即生效,应用重连即可恢复。
Oracle 默认的 DEFAULT Profile 从 11g 开始设置了 PASSWORD_LIFE_TIME = 180(天),也就是密码 180 天后过期。
1-- 查看当前密码策略2SELECT resource_name, limit3FROM dba_profiles4WHERE profile = 'DEFAULT'5 AND resource_type = 'PASSWORD';典型输出:
PASSWORD_GRACE_TIME = 7 表示密码过期后有 7 天宽限期,宽限期内用户可以登录但会收到警告,宽限期后就直接报 ORA-28001。
1-- 查看所有用户的密码过期状态2SELECT username, account_status, expiry_date, profile3FROM dba_users4WHERE account_status LIKE '%EXPIRED%'5ORDER BY expiry_date;67-- 查看特定用户8SELECT username, account_status, expiry_date, lock_date, profile9FROM dba_users10WHERE username = 'APP_USER';account_status 的含义:
1ALTER PROFILE DEFAULT LIMIT2 PASSWORD_LIFE_TIME UNLIMITED3 PASSWORD_GRACE_TIME UNLIMITED;1-- 创建应用专用 Profile2CREATE PROFILE app_profile LIMIT3 PASSWORD_LIFE_TIME UNLIMITED4 PASSWORD_GRACE_TIME UNLIMITED5 FAILED_LOGIN_ATTEMPTS UNLIMITED6 PASSWORD_LOCK_TIME UNLIMITED;78-- 将应用用户指定到这个 Profile9ALTER USER app_user PROFILE app_profile;如果安全规范要求密码必须过期,可以用 cron 定期修改密码:
1# cron 脚本:每 170 天自动改密码23> **本章目标**:掌握本章核心知识点4> **前置要求**:完成前序章节学习5> **预计时长**:60 分钟67#!/bin/bash8NEW_PWD=$(openssl rand -base64 16 | tr -dc 'a-zA-Z0-9' | head -c 16)9sqlplus -s / as sysdba <<EOF10ALTER USER app_user IDENTIFIED BY "${NEW_PWD}";11EOF12# 更新应用配置中的密码13echo "NEW_PASSWORD=${NEW_PWD}" > /secure/app_db_password1ORA-28003: password verification for the specified password failed1-- 检查是否设置了密码验证函数2SELECT resource_name, limit FROM dba_profiles3WHERE profile = 'DEFAULT' AND resource_name = 'PASSWORD_VERIFY_FUNCTION';45-- 临时禁用验证函数6ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION NULL;78-- 修改密码后重新启用9ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION ora12c_verify_function;Oracle 11g+ 默认密码区分大小写:
1-- 检查大小写敏感设置2SHOW PARAMETER sec_case_sensitive_logon;34-- 如需关闭(不推荐,降低安全性)5ALTER SYSTEM SET sec_case_sensitive_logon = FALSE;1-- 查找所有过期的非系统用户2SELECT 'ALTER USER ' || username || ' IDENTIFIED BY VALUES ''' || password || ''';'3FROM sys.user$4WHERE name IN (5 SELECT username FROM dba_users6 WHERE account_status LIKE '%EXPIRED%'7 AND username NOT IN ('SYS','SYSTEM','DBSNMP','OUTLN')8);注意
注意:这种方法保持原密码不变(使用
IDENTIFIED BY VALUES),适合不知道用户原始密码的情况。
ORA-28001 的处理流程:
紧急恢复 → ALTER USER ... IDENTIFIED BY ↓ 排查原因 → 查看 dba_profiles 中的 PASSWORD_LIFE_TIME ↓ 长期方案 → 创建 app_profile + PASSWORD_LIFE_TIME UNLIMITED
密码策略、安全加固、权限管理都是 DBA 日常运维的核心工作。DBA 学习之路覆盖了 Oracle 运维管理的完整知识体系,从安装部署到安全加固,100 篇实战教程,每篇配有操作截图。免费试读 →