-- 检查当前设置
SHOW PARAMETER SEC_CASE_SENSITIVE_LOGON;
-- 在11g中禁用大小写敏感性(不推荐)
ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE;
-- 检查用户密码版本
SELECT username FROM dba_users WHERE password_versions NOT LIKE '%12%';
-- 批量重置密码以确保使用最新算法
BEGIN
FOR r IN (SELECT username FROM dba_users WHERE account_status='OPEN') LOOP
EXECUTE IMMEDIATE 'ALTER USER '||r.username||' IDENTIFIED BY "TempPass123!"';
END LOOP;
END;
/
1.3 渐进式密码轮转(19c/21c新特性)
Oracle 19.12及21c引入了渐进式密码轮转特性,允许在密码更改期间新旧密码同时有效。
配置参数:
PASSWORD_ROLLOVER_TIME:密码轮转时间,默认0(禁用)
配置示例:
-- 启用渐进式密码轮转(7天)
ALTER PROFILE secure_profile LIMIT PASSWORD_ROLLOVER_TIME 7;
-- 手动提前结束轮转期
ALTER USER scott EXPIRE PASSWORD ROLLOVER PERIOD;
密码生命周期阶段:
-- 查询所有开放状态的用户
SELECT username, profile FROM dba_users WHERE account_status='OPEN';
-- 查询所有profile的密码设置
SELECT * FROM dBA_profiles WHERE resource_type='PASSWORD';
-- 设置失败登录尝试
ALTER PROFILE secure_profile LIMIT FAILED_LOGIN_ATTEMPTS 5;
防范用户被锁定的监控:
-- 监控接近锁定阈值的用户
SELECT username, account_status, lock_date
FROM dba_users
WHERE account_status <> 'OPEN';
-- 监控失败登录计数
SELECT username, count(*)
FROM dba_audit_trail
WHERE returncode = 1017
AND timestamp > SYSDATE - 1/24 -- 最近1小时
GROUP BY username;
3.2 会话超时控制
配置示例:
-- 检查开放账户
SELECT username, account_status, profile, expiry_date
FROM dba_users
WHERE account_status = 'OPEN';
-- 检查密码即将过期的用户
SELECT username, account_status, expiry_date
FROM dba_users
WHERE expiry_date IS NOT NULL
AND expiry_date < SYSDATE + 7;
-- 检查被锁定账户
SELECT username, lock_date, account_status
FROM dba_users
WHERE account_status LIKE '%LOCKED%';
-- 检查DBA权限用户
SELECT grantee, granted_role
FROM dba_role_privs
WHERE granted_role IN ('DBA', 'RESOURCE', 'CONNECT')
ORDER BY granted_role, grantee;
6.2 审计日志维护
定期清理审计日志:
-- 检查审计表大小
SELECT segment_name, bytes/1024/1024 MB
FROM dba_segments
WHERE segment_name = 'AUD$';
-- 归档并清理旧审计记录
DELETE FROM sys.aud$ WHERE timestamp# < SYSDATE - 90;
-- 定期执行表空间重组
ALTER TABLE sys.aud$ MOVE TABLESPACE SYSAUX;
总结
Oracle数据库安全配置是一个持续的过程,需要根据具体业务需求和安全要求进行调整。本文涵盖了从密码策略、审计配置到版本特定特性的全面安全设置指南,可作为DBA进行数据库安全加固的参考手册。