Oracle DataBaseLink 提示密码过期

当通过 Database Link 查询时,如果遇到 ORA-28001: the password has expired 错误,说明远程数据库上该链接使用的用户密码已经过期。处理思路分三步:远程库重置密码 → 本地库更新链接密码 → 调整策略防止再过期


1. 在远程数据库重置用户密码

以 DBA 或有 ALTER USER 权限的身份登录远程数据库,确认状态并修改密码:

-- 检查用户状态和密码过期时间
SELECT USERNAME, ACCOUNT_STATUS, EXPIRY_DATE, PROFILE
FROM DBA_USERS
WHERE USERNAME = '远程用户名';   -- 改成实际的 DBLink 用户

-- 修改密码(同时会重置过期时间)
ALTER USER 远程用户名 IDENTIFIED BY "新密码";

-- 如果账户被锁定,一并解锁
ALTER USER 远程用户名 ACCOUNT UNLOCK;

如果因为密码已过期连 SQL*Plus 都登不上,先用 / as sysdba 登录再操作。


必须同步本地 DBLink 的密码,否则即使远程密码已更新,本地仍会因凭证错误而失败。

-- 私有 DBLink
ALTER DATABASE LINK 链接名
CONNECT TO 远程用户名 IDENTIFIED BY "新密码";

-- 公有 DBLink
ALTER PUBLIC DATABASE LINK 链接名
CONNECT TO 远程用户名 IDENTIFIED BY "新密码";

如果记得链接的具体定义,也可以删除重建:

DROP DATABASE LINK 链接名;
CREATE DATABASE LINK 链接名
CONNECT TO 远程用户名 IDENTIFIED BY "新密码"
USING '远程TNS名';

验证是否修复:

SELECT * FROM dual@链接名;

3. 防止再次过期(推荐)

密码过期通常是因为用户的 PROFILE 中设置了 PASSWORD_LIFE_TIME。可以把该用户的密码设为永不过期(或延长至一个很长的周期)。

方法一:修改现有 PROFILE 限制(影响使用同一 profile 的所有用户)

ALTER PROFILE 用户当前的PROFILE名 LIMIT PASSWORD_LIFE_TIME UNLIMITED;
CREATE PROFILE dblink_profile LIMIT PASSWORD_LIFE_TIME UNLIMITED;
ALTER USER 远程用户名 PROFILE dblink_profile;

修改 PROFILE 后,已经过期的用户不会自动恢复,需要重新改一次密码(即重复第 1 步)才会应用新的生命周期。


补充说明

  • 权限要求:本地修改 DBLink 密码需要拥有该链接或具有 ALTER DATABASE LINK 权限;远程改密码需要 ALTER USER 权限。
  • 无法访问远程库? 请联系远程 DBA 执行第 1 步,然后你在本地执行第 2 步。
  • 安全与合规:如果公司政策不允许密码永不过期,可以设置较长的生命周期(如 365 天),并建立定期更换 + 同步 DBLink 密码的自动化流程。
  • 更安全的方案:如果环境支持,可考虑用 Oracle Wallet 管理凭据,避免在 DBLink 中硬编码密码。

按上述步骤操作后,DBLink 密码过期的问题即可解决。

posted @ 2026-07-22 10:47  dirgo  阅读(1)  评论(0)    收藏  举报