Oracle 19c多租户架构下设置用户密码永不过期及登录锁定策略说明_20260430

在 Oracle 19c 多租户架构中,业务用户通常创建在具体的 PDB 里,而不是 CDB$ROOT 中。因此,查看用户状态、修改密码策略前,必须先进入对应 PDB。否则可能出现"查不到用户"或"改了但没生效"的情况。

一、进入数据库并切换到对应 PDB

先切换到 Oracle 用户,并确认当前实例:

复制代码
su - oracle
echo $ORACLE_SID

如果需要切换实例,例如本次环境使用 UTF8CDB1

复制代码
export ORACLE_SID=UTF8CDB1
sqlplus / as sysdba

进入 SQL*Plus 后,查看当前 CDB 下有哪些 PDB:

复制代码
show pdbs;

示例结果:

复制代码
CON_ID  CON_NAME   OPEN MODE
------  ---------  ----------
3       IETQMS     READ WRITE
5       QMS        READ WRITE

切换到对应 PDB,例如进入 QMS

复制代码
alter session set container=QMS;

确认当前所在容器:

复制代码
show con_name;

如果显示:

复制代码
CON_NAME
------------------------------
QMS

说明已经进入 QMS PDB。后续查询用户、修改 Profile,都只针对当前 PDB 生效。

二、查看用户是否锁定或密码是否过期

复制代码
set lines 200 pages 200
col username for a30
col account_status for a30
col profile for a20
col expiry_date for a20

select
    username,
    account_status,
    profile,
    to_char(expiry_date,'yyyy-mm-dd hh24:mi:ss') expiry_date
from dba_users
where oracle_maintained = 'N'
order by username;

重点看两列:

字段 含义
ACCOUNT_STATUS 用户状态,OPEN 表示正常
EXPIRY_DATE 密码过期时间,空值表示当前不会过期

如果用户状态是 OPEN,并且 EXPIRY_DATE 为空,说明用户当前正常,密码不会因生命周期到期而过期。实际检查中,QMSADMINQMS_ADMIN 等用户状态为 OPEN,且 EXPIRY_DATE 为空,说明密码永不过期已生效。

三、查看 Profile 密码策略

Oracle 用户密码过期和锁定策略由 Profile 控制。常见业务用户一般使用 DEFAULT Profile。

复制代码
set lines 200
col profile for a20
col resource_name for a35
col limit for a30

select profile, resource_name, limit
from dba_profiles
where profile = 'DEFAULT'
  and resource_name in (
    'FAILED_LOGIN_ATTEMPTS',
    'PASSWORD_LOCK_TIME',
    'PASSWORD_LIFE_TIME',
    'PASSWORD_GRACE_TIME'
  )
order by resource_name;

常见推荐结果:

复制代码
FAILED_LOGIN_ATTEMPTS   10
PASSWORD_GRACE_TIME     7
PASSWORD_LIFE_TIME      UNLIMITED
PASSWORD_LOCK_TIME      1

含义如下:

参数 含义
FAILED_LOGIN_ATTEMPTS = 10 连续输错密码 10 次后锁定
PASSWORD_LOCK_TIME = 1 锁定 1 天后自动解锁
PASSWORD_LIFE_TIME = UNLIMITED 密码永不过期
PASSWORD_GRACE_TIME = 7 密码过期宽限期,密码永不过期时基本不触发

四、设置密码永不过期

进入对应 PDB 后执行:

复制代码
alter profile DEFAULT limit PASSWORD_LIFE_TIME unlimited;

如果想一次性整理成推荐策略,可以执行:

复制代码
alter profile DEFAULT limit
    FAILED_LOGIN_ATTEMPTS 10
    PASSWORD_LOCK_TIME 1
    PASSWORD_LIFE_TIME UNLIMITED
    PASSWORD_GRACE_TIME 7;

这套配置的效果是:

复制代码
密码永不过期;
连续输错 10 次会锁定;
锁定 1 天后自动解锁。

五、验证是否生效

查看 Profile:

复制代码
select profile, resource_name, limit
from dba_profiles
where profile = 'DEFAULT'
  and resource_name in (
    'FAILED_LOGIN_ATTEMPTS',
    'PASSWORD_LOCK_TIME',
    'PASSWORD_LIFE_TIME',
    'PASSWORD_GRACE_TIME'
  )
order by resource_name;

确认看到:

复制代码
PASSWORD_LIFE_TIME    UNLIMITED

再查看用户:

复制代码
select
    username,
    account_status,
    profile,
    to_char(expiry_date,'yyyy-mm-dd hh24:mi:ss') expiry_date
from dba_users
where oracle_maintained = 'N'
order by username;

如果业务用户 ACCOUNT_STATUS = OPEN,且 EXPIRY_DATE 为空,就说明密码永不过期已经生效。

六、注意事项

alter profile DEFAULT 只影响当前所在 PDB。比如在 QMS 执行,只影响 QMS;在 IETQMS 执行,只影响 IETQMS。如果有多个 PDB,需要分别切换进去执行:

复制代码
alter session set container=QMS;
alter profile DEFAULT limit PASSWORD_LIFE_TIME unlimited;

alter session set container=IETQMS;
alter profile DEFAULT limit PASSWORD_LIFE_TIME unlimited;

alter session set container=YJXT;
alter profile DEFAULT limit PASSWORD_LIFE_TIME unlimited;

已经处于 EXPIRED & LOCKED 的用户,不会因为修改 Profile 自动变成 OPEN。这类用户大多是 Oracle 组件用户、示例用户或历史遗留用户,生产环境不建议随便解锁。

七、总结

Oracle 用户密码是否过期,不是直接修改 DBA_USERS.EXPIRY_DATE,而是通过 Profile 里的 PASSWORD_LIFE_TIME 控制。

生产环境推荐配置:

复制代码
PASSWORD_LIFE_TIME      UNLIMITED
FAILED_LOGIN_ATTEMPTS   10
PASSWORD_LOCK_TIME      1
PASSWORD_GRACE_TIME     7

应用账号可以设置密码永不过期,但失败登录锁定策略不要关闭。业务要稳,安全的门栓也要留着。

相关推荐
未济1 天前
linux 配置环境变量
linux
傲世仙尊1 天前
目录即文件-Ext文件系统收尾篇
linux·c语言
虎头金猫1 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
这个DBA有点耶1 天前
MVCC深入:Read View、版本链与快照读——InnoDB并发控制的内核
数据库·mysql·架构
DBA_G1 天前
从地面到云霄:GBase数据库在民航三大场景的落地实践
数据库
自由能燃气设备1 天前
商用全预混低氮冷凝锅炉免费方案vs付费方案对比+选型避坑指南
大数据·数据库·人工智能
科创致远1 天前
科创致远 ESOP 系统核心效能与实战价值展示
大数据·数据库·人工智能·精益工程
_艾伦 耶格尔.1 天前
进程间通信
linux
AI职业加油站2 天前
AI智能体应用工程师证书:政策红利下的职业新风口
大数据·运维·人工智能·学习·职场发展
Liuqy-052 天前
Linux IO编程——静态库、动态库
linux