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

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

相关推荐
java_logo10 分钟前
Apache Doris Docker 部署指南:实时分析数据库实战
数据库·docker·apache·doris·apache doris·轩辕镜像·docker部署doris
码农学院27 分钟前
基于运维监控体系的网络品牌推广方案:从架构设计到技术实现
运维·网络
爱写代码的森7 小时前
鸿蒙三方库 | harmony-utils之ImageUtil图片保存到本地详解
服务器·华为·harmonyos·鸿蒙·huawei
广州灵眸科技有限公司8 小时前
xfce桌面触摸校准:基于灵眸科技EASY-EAl-Orin-Nano
数据库·windows·科技
大耳朵-小飞象9 小时前
电力安全运维的智能密码:BACS如何破解设备全生命周期管理难题,让电网安全“看得见、管得住”?
运维·安全·智慧城市·能耗系统·楼宇智控·未来生活
极客侃科技10 小时前
制造企业 MES/APS 选型:SAP PP/DS 集成、ERP-MES 边界划分与一体化架构要点
运维·架构·制造
Cloud云卷云舒10 小时前
云卷云舒:从Oracle/MySQL迁移到HaishanDB:迁移评估工具核心技术拆解
mysql·oracle·ai-native·haishandb·信创数据库替换
憧憬成为web高手10 小时前
皮卡丘靶场速通--sql 2
数据库·sql·mybatis
HLC++10 小时前
Linux的进程间通信
android·linux·服务器
段一凡-华北理工大学10 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化