给存量账号补设口令有效期,是密评整改中常见的一项操作。这次在测试环境模拟整改时,给一个长期未改密的账号设置 90 天有效期、30 天宽限期,ALTER USER 执行成功,账号却随即无法正常登录,业务侧也出现数据库连接报错。
本文记录这次排查和处理过程。验证版本为 DM Database 64 V8 05134284458-20260126-311526-20178,示例账号统一写作 TEST_USER。
原先正常使用的账号执行了以下语句:
ALTER USER TEST_USER LIMIT
PASSWORD_LIFE_TIME 90,
PASSWORD_GRACE_TIME 30,
CONNECT_IDLE_TIME 10,
FAILED_LOGIN_ATTEMPTS 5,
PASSWORD_LOCK_TIME 10,
PASSWORD_REUSE_MAX 5;
语句没有报错,但账号随后登录失败,相关业务操作无法正常进行。检查发现,该账号距上次修改密码已经超过 120 天。
先查看账号状态和资源限制,再查最近一次密码修改时间:
SELECT
D.USERNAME,
D.ACCOUNT_STATUS,
D.EXPIRY_DATE,
S.LIFE_TIME,
S.GRACE_TIME,
S.REUSE_TIME,
S.REUSE_MAX,
S.CONN_IDLE_TIME,
S.FAILED_NUM,
S.LOCK_TIME
FROM DBA_USERS D
JOIN SYS.SYSUSERS S ON S.ID = D.USER_ID
WHERE D.USERNAME = 'TEST_USER';
SELECT
D.USERNAME,
MAX(P.MODIFIED_TIME) AS LAST_PASSWORD_MODIFIED_TIME
FROM DBA_USERS D
LEFT JOIN SYS.SYSPWDCHGS P ON P.LOGINID = D.USER_ID
WHERE D.USERNAME = 'TEST_USER'
GROUP BY D.USERNAME;
结果显示,账号已经设置了 90 天有效期和 30 天宽限期;执行 ALTER USER ... LIMIT 并没有刷新密码修改时间。在本次验证版本中,给已有账号补设有效期时,口令年龄仍与此前的改密时间有关,不会从整改当天重新起算。
达梦手册对这两个参数的说明是:超过 PASSWORD_LIFE_TIME 后进入 PASSWORD_GRACE_TIME 宽限期;宽限期内仍可访问数据库,期满还未改密,就会限制除修改口令外的其他操作。本次账号上次改密距整改当天已超过 120 天,90 天有效期加 30 天宽限期都已过去,因此策略生效后立即受到限制。登录失败和业务连接报错是本次验证中实际观察到的现象。
已经影响账号使用时,先临时取消该账号的口令有效期限制:
ALTER USER TEST_USER LIMIT PASSWORD_LIFE_TIME UNLIMITED;
执行后,账号恢复登录,业务连接报错消失。UNLIMITED 在这里只用于临时恢复,最终仍要落实 90 天有效期。
正式整改前,先核对账号用途、当前口令,以及原有的 PASSWORD_REUSE_TIME、PASSWORD_REUSE_MAX 配置。本例已设置 PASSWORD_REUSE_MAX 5,直接把密码重设为原口令会受到复用规则限制,所以先临时取消两项复用限制:
ALTER USER TEST_USER LIMIT
PASSWORD_REUSE_TIME UNLIMITED,
PASSWORD_REUSE_MAX UNLIMITED;
接着使用原口令重设一次,让密码修改时间更新,同时不改变应用使用的口令。下面的 原口令 只是脱敏示例,实际执行时填写该账号的现用口令:
ALTER USER TEST_USER IDENTIFIED BY "原口令";
重设后,复查 SYS.SYSPWDCHGS.MODIFIED_TIME,确认时间已更新,并测试账号登录和实际业务操作。确认正常后,再恢复本例的目标策略:
ALTER USER TEST_USER LIMIT
PASSWORD_LIFE_TIME 90,
PASSWORD_GRACE_TIME 30,
CONNECT_IDLE_TIME 10,
FAILED_LOGIN_ATTEMPTS 5,
PASSWORD_LOCK_TIME 10,
PASSWORD_REUSE_TIME UNLIMITED,
PASSWORD_REUSE_MAX 5;
本次处理后,LIFE_TIME 为 90、GRACE_TIME 为 30、REUSE_MAX 为 5,账号正常登录,业务操作也恢复正常。尚未受影响的存量账号,同样应先核对最近改密时间和原有复用规则,再逐个完成改密与策略设置。
第一,CONNECT_IDLE_TIME 10 的单位由 RESOURCE_FLAG 决定:值为 0 时是分钟,值为 1 时是秒。执行整改前可先查实例参数:
SELECT PARA_NAME, PARA_VALUE
FROM V$DM_INI
WHERE PARA_NAME = 'RESOURCE_FLAG';
第二,关联了 PROFILE 的账号由 PROFILE 管理资源限制,不能直接通过 ALTER USER ... LIMIT 修改,需要调整对应的 PROFILE。
这次问题的关键不在于 ALTER USER 是否执行成功,而在于存量账号的密码已经用了多久。批量补设口令有效期之前,先检查账号状态和最近改密时间;整改完成后,再确认账号登录及业务操作都正常。
文章
阅读量
获赞
