惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

美团技术团队
Blog — PlanetScale
Blog — PlanetScale
阮一峰的网络日志
阮一峰的网络日志
M
MIT News - Artificial intelligence
月光博客
月光博客
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
U
Unit 42
博客园_首页
WordPress大学
WordPress大学
H
Hackread – Cybersecurity News, Data Breaches, AI and More
J
Java Code Geeks
F
Fortinet All Blogs
腾讯CDC
罗磊的独立博客
IT之家
IT之家
I
InfoQ
V
V2EX
博客园 - 叶小钗
A
About on SuperTechFans
Y
Y Combinator Blog
C
Check Point Blog
量子位
Martin Fowler
Martin Fowler
Vercel News
Vercel News

博客园 - dirgo

springboot里的application.yml文件的logging:下的配置 Flutter的SDK国内下载方法及AndroidStudio配置打包方法 minio数据迁移方法 [转]flutter入门 Elasticsearch介绍以及在spring项目里的使用方法 moxa NPort 5100 Linux real tty驱动安装 VirtualBox 的网络模式 Oracle关联表删除数据和更新数据 logback-spring.xml引入了base.xml日志文件默认生成在哪里? application.yml中Logback相关配置 org/springframework/boot/logging/logback/defaults.xml的内容和作用 logback-spring.xml 中<include resource="org/springframework/boot/logging/logback/base.xml"/>作用 Spring Boot 项目 Logback 日志框架配置文件logback-spring.xml详解 梅特勒托-托利多衡器串口连续输出数据格式的说明 utf-8编码详解 mybaits updateWrapper更新报错:无效的列类型: 1111 @RequestPart和@RequestParam有什么区别 如何避免Mass Assignment漏洞? 关于vxe-table v4 导出大数据量excel浏览器卡死问题的解决 开源的Linux换源和安装docker脚本 wsl常用命令 使用网页静默打印 在Oracle中,授予用户角色和权限 Linux下查看当前哪些端口在监听状态,哪些端口在连接状态 mobaxterm常用配置 Windows下udp工具 Oracle表空间用户授权创建dblink等操作 用nmap扫描找出某个网段下空闲的ip脚本 Oracle 19c 常用运维 SQL Linux下设置CDB/PDB 环境的Oracle19c开机启动
Oracle DataBaseLink 提示密码过期
dirgo · 2026-07-22 · via 博客园 - dirgo

当通过 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 密码过期的问题即可解决。