当前位置:首页 > 问答 > 正文

Oracle报错|远程修复 ORA-12687 Credentials expired 故障处理及解决方法

Oracle报错急救:远程搞定ORA-12687凭证过期故障全攻略

场景还原
凌晨2点,你正睡得香甜,突然手机疯狂震动——监控系统报警,生产库连不上了!打开电脑一看,应用日志里赫然躺着"ORA-12687: The credential has expired"的红色报错,别慌,这份2025年最新实战指南能让你10分钟内远程解决问题。

故障本质解析

这个报错直白得很——Oracle数据库的某个安全凭证过期了,就像你的银行卡密码失效一样,常见于以下场景:

  1. 使用了Oracle Wallet存储密码(特别是RAC环境)
  2. 配置了Kerberos/Radius认证
  3. 密码策略强制定期更新但未及时同步

远程诊断三板斧

▶ 第一步:确认故障范围

通过SQL*Plus连上数据库(哪怕本地能连也行),执行:

SELECT username, account_status, expiry_date 
FROM dba_users 
WHERE expiry_date < SYSDATE AND account_status = 'OPEN';

如果看到关键用户(如APEX_PUBLIC_USER等)显示"EXPIRED",就是密码过期惹的祸。

Oracle报错|远程修复 ORA-12687 Credentials expired 故障处理及解决方法

▶ 第二步:检查钱包状态(如果有)

ADMINISTER KEY MANAGEMENT SET KEYSTORE CLOSE;  -- 先关闭
ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY "钱包密码"; 
SELECT * FROM v$encryption_wallet;  -- 查看状态

若看到STATUS=CLOSED却无法打开,说明钱包密码可能被修改过。

▶ 第三步:网络层排查

tnsping 服务名  # 测试网络连通性
lsnrctl status  # 查看监听日志有无认证错误

五大解决方案

方案1:直接修改用户密码(最简单)

ALTER USER 用户名 IDENTIFIED BY "新密码" REPLACE "旧密码";
-- 示例(修改SYS密码需特殊处理):
ALTER USER SYSTEM IDENTIFIED BY "NewPass123#" ACCOUNT UNLOCK;

⚠️ 注意:如果启了密码复杂度校验,可能需要包含大小写+数字+特殊字符

方案2:重置钱包密码(适用于Wallet报错)

-- 以sysdba身份执行:
ADMINISTER KEY MANAGEMENT ALTER KEYSTORE PASSWORD IDENTIFIED BY "旧密码" SET "新密码";

方案3:延长密码有效期(临时救急)

-- 修改密码策略(需DBA权限)
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;  
-- 然后重置相应用户密码

方案4:Kerberos认证修复

# 在数据库服务器执行
oklist -k -t /etc/krb5.keytab  # 查看票据有效期
kinit -k -t /etc/krb5.keytab oracle/数据库主机名@域名  # 重新获取票据

方案5:终极暴力解法(谨慎使用)

-- 关闭密码验证(仅测试环境可用!)
ALTER SYSTEM SET remote_os_authent=TRUE SCOPE=SPFILE;
SHUTDOWN IMMEDIATE;
STARTUP;

防复发关键设置

  1. 定期检查脚本:每月跑一次密码过期预警

    SELECT username, expiry_date FROM dba_users 
    WHERE expiry_date BETWEEN SYSDATE AND SYSDATE+7;  -- 提前7天预警
  2. 修改默认策略

    Oracle报错|远程修复 ORA-12687 Credentials expired 故障处理及解决方法

    -- 修改默认profile(建议设置90天有效期)
    ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME 90;
  3. 钱包维护日历:为Oracle Wallet设置手机提醒,建议每3个月更新一次密码

避坑指南

  • 远程操作必验证:改密码后立即用新密码创建测试连接
  • RAC环境注意:所有节点都需要同步密码变更
  • 审计留痕:所有密码修改操作记录到审计表
    INSERT INTO audit_passwd_changes 
    VALUES (USER, SYSDATE, '修改SYSTEM密码'); 

遇到ORA-12687就像遇到突然停电——虽然吓人但解决不难,按照这个流程操作,你完全可以在业务部门察觉前悄悄修复,记得收藏本文,下次报错时就能淡定应对了!

(本文方法经Oracle 19c/21c实测有效,最后更新:2025年8月)

发表评论