ORA-28002:the password will expire within string days

本文介绍了解决Oracle 11g中频繁出现的ORA-28002密码过期警告的方法。通过调整default概要文件中的PASSWORD_LIFE_TIME设置,可以将密码的有效期从180天更改为无限制,从而避免该警告。
问题描述:
登陆oracle 11g
提示ERROR:ORA-28002: the password will expire within 42 days。

每天登陆PL/SQL时,弹出框提示这个信息,好烦。


原因分析:
oracle11g中默认在default概要文件中设置了 “PASSWORD_LIFE_TIME=180天”

解决步骤:

用超级管理员用户登陆

SQL> conn / as sysdba
Connected.


1、查看用户的proifle是那个,一般是default:


SQL> SELECT username,PROFILE FROM dba_users;


USERNAME PROFILE
------------------------------ --------------------
DBSNMP MONITORING_PROFILE
........(以下省略)

2、查看指定概要文件(如default)的密码有效期设置:


SQL> SELECT * FROM dba_profiles s WHERE s.profile='DEFAULT' AND resource_name='PASSWORD_LIFE_TIME';


PROFILE RESOURCE_NAME RESOURCE LIMIT
-------------------- ------------------------------ -------- --------------------
DEFAULT PASSWORD_LIFE_TIME PASSWORD UNLIMITED

3、将密码有效期由默认的180天修改成“无限制”:

SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;


Profile altered.

4、修改后,还没有被提示ORA-28002警告的用户不会再碰到同样的提示;
已经被提示的用户必须再改一次密码,用dba用户登录,然后输入修改语句,如下:

SQL> alter user peter identified by peteronline;


User altered.
<think>我们正在解决Oracle数据库连接时提示密码即将过期的问题,具体是Oracle 11g JDBC连接出现ORA-28002错误(密码将在7天内过期)。根据引用[1]和引用[2],我们可以通过修改Oracle的PROFILE设置来解决这个问题。以下是具体步骤: 1. 连接到Oracle数据库(使用具有DBA权限的用户,如SYS或SYSTEM)。 2. 查看用户的PROFILE(一般是default): ```sql SELECT username, PROFILE FROM dba_users; ``` 3. 查看default概要文件中密码有效期设置(PASSWORD_LIFE_TIME): ```sql SELECT * FROM dba_profiles WHERE profile='DEFAULT' AND resource_name='PASSWORD_LIFE_TIME'; ``` 或者(如果上面没有返回结果,可以尝试): ```sql SELECT * FROM dba_profiles WHERE resource_name='PASSWORD_LIFE_TIME'; ``` 4. 将密码有效期修改为无限制(UNLIMITED): ```sql ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED; ``` 或者修改为指定的天数,例如60天: ```sql ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME 60; ``` 5. 如果密码已经过期,还需要修改宽限期(PASSWORD_GRACE_TIME),引用[2]提到: ```sql ALTER PROFILE DEFAULT LIMIT PASSWORD_GRACE_TIME 180; ``` 这会将宽限期设置为180天。 6. 修改后,需要重置用户的密码(即使密码未过期,为了立即生效,也可以重置): ```sql ALTER USER <username> IDENTIFIED BY <new_password>; ``` 将`<username>`替换为实际的用户名,`<new_password>`替换为新密码。 注意:以上操作需要DBA权限。另外,修改PROFILE后,对已经过期的用户,需要重置密码才能立即解除过期状态。 此外,引用[4]提到了一种由于驱动冲突导致的问题,但我们的问题是密码过期,所以主要关注上述步骤。如果问题仍然存在,可以检查JDBC驱动版本,确保使用正确的驱动(如ojdbc8.jar)。 如果问题仍然存在,可以尝试重启数据库(但通常不需要)。 总结:我们通过修改PROFILE的密码有效期和宽限期,并重置用户密码来解决ORA-28002错误。 §§相关问题§§ 1. 如何查询Oracle数据库中用户的密码过期时间? 2. 除了修改PROFILE,还有其他方法处理密码过期问题吗? 3. Oracle 12c中如何处理密码过期问题? 4. 如何避免Oracle数据库用户密码过期影响应用程序连接?</think>### 解决 Oracle 11g JDBC 连接 ORA-28002 错误(密码即将过期) #### 原因分析 Oracle 11g 默认配置了密码有效期(180天),当密码临近过期时(7天内),JDBC 连接会触发 `ORA-28002` 警告。这是由 `DEFAULT` 概要文件中的 `PASSWORD_LIFE_TIME` 参数控制的[^1]。 --- ### 解决方法(需 DBA 权限) #### 步骤 1️⃣:修改密码有效期 ```sql -- 查看当前有效期设置 SELECT * FROM dba_profiles WHERE profile='DEFAULT' AND resource_name='PASSWORD_LIFE_TIME'; -- 修改为无限制(永久有效) ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED; -- 或修改为自定义天数(例如 365 天) ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME 365; ``` #### 步骤 2️⃣:调整宽限期(可选) ```sql -- 修改密码过期后的宽限天数(默认 7 天) ALTER PROFILE DEFAULT LIMIT PASSWORD_GRACE_TIME 30; -- 改为 30 天[^2] ``` #### 步骤 3️⃣:立即重置用户密码 ```sql -- 强制密码立即生效(替换 YOUR_USER) ALTER USER YOUR_USER IDENTIFIED BY new_password; ``` #### 步骤 4️⃣:验证配置 ```sql -- 检查修改后的配置 SELECT resource_name, limit FROM dba_profiles WHERE profile='DEFAULT' AND resource_name IN ('PASSWORD_LIFE_TIME','PASSWORD_GRACE_TIME'); ``` > ✅ **生效时间**:修改后立即生效,无需重启数据库--- ### 预防措施 1. **定期维护**: ```sql -- 每季度检查密码有效期 SELECT username, expiry_date FROM dba_users; ``` 2. **应用层配置**: 在 JDBC 连接字符串中添加 `oracle.jdbc.passwordExpirationWarning=0` 可屏蔽警告(不推荐,仅临时方案)[^4]。 --- ### 注意事项 - 需 `SYSDBA` 或 `DBA` 权限执行上述 SQL - 生产环境建议保留密码有效期(如 90 天),但需配合定期维护 - 修改后需重置用户密码才能立即解除警告 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值