暂无图片
暂无图片
8
暂无图片
暂无图片
暂无图片

Oracle数据库安全参数优化

原创 暮雨 2025-10-17
589

上一期发布了关于oracle数据库安装后的参数优化文档,此文档只给出了参考指引,没有给出对应的设置规则,接下来几期文档将详细的写写配置规则相关的给大家参考,这里列举依然是常规设置,实际项目中还是需要根据实际情况灵活调整。

前几期也分享了一些参数相关的优化,本期继续分享数据库安全参数相关部分,主要是密码策略,审计,权限相关的部分。

注意:所有参数的修改都应在测试环境充分验证后再应用于生产环境,避免因分配不当导致数据库性能问题或实例无法启动

重要提示:不同Oracle版本可能存在差异,生产环境调整前请务必查阅对应版本的官方文档并进行测试。所有修改操作前请做好参数文件备份

-- 创建PFILE备份
CREATE PFILE='/backup/initORCL_20231201.ora' FROM SPFILE;
-- 直接复制SPFILE(需要数据库关闭)
-- 在操作系统层面复制
-- cp $ORACLE_HOME/dbs/spfileORCL.ora /backup/
`

Oracle数据库安全参数优化

1 密码策略安全配置

1.1 密码复杂度策略

参数说明与配置:

Oracle数据库通过profile管理密码策略,以下为关键参数说明:

参数名称 说明 Oracle默认值 推荐值 国防安全要求
FAILED_LOGIN_ATTEMPTS 最大错误登录次数 10 5 3
PASSWORD_LIFE_TIME 口令有效时间 180天 90天 60天
PASSWORD_REUSE_TIME 口令重用时间间隔 UNLIMITED 90天 365天
PASSWORD_REUSE_MAX 口令重用前需更改次数 UNLIMITED 5 5
PASSWORD_VERIFY_FUNCTION 口令复杂度验证函数 NULL VERIFY_FUNCTION_11G ora12c_strong_verify_function
PASSWORD_LOCK_TIME 账户锁定时间 1天 1天 1天
PASSWORD_GRACE_TIME 口令过期宽限期 7天 7天 7天

配置示例:

-- 创建自定义密码策略profile
CREATE PROFILE secure_profile LIMIT
  FAILED_LOGIN_ATTEMPTS 5
  PASSWORD_LIFE_TIME 90
  PASSWORD_REUSE_TIME 90
  PASSWORD_REUSE_MAX 5
  PASSWORD_VERIFY_FUNCTION ora12c_strong_verify_function
  PASSWORD_LOCK_TIME 1
  PASSWORD_GRACE_TIME 7;
  
-- 将profile分配给用户
ALTER USER scott PROFILE secure_profile;

密码复杂度验证函数:

Oracle 12c引入了新的密码验证函数:

  • ora12c_verify_function - 基本复杂度要求
  • ora12c_strong_verify_function - 更强的复杂度要求
  • ora12c_stig_verify_function - 符合安全技术实施指南要求

STIG(安全技术实施指南)要求包括:

  • 密码至少9个字符
  • 至少2个大写字母
  • 至少2个小写字母
  • 至少2个数字
  • 至少2个特殊字符
  • 新密码必须与旧密码至少4个字符不同

1.2 密码大小写敏感性

版本差异说明:

版本 默认行为 参数可用性 说明
Oracle 11g 大小写敏感 SEC_CASE_SENSITIVE_LOGON=TRUE 可禁用大小写敏感性
Oracle 12cR2 大小写敏感 已弃用 密码大小写敏感性始终强制启用
Oracle 19c 大小写敏感 已弃用 密码大小写敏感性始终强制启用
Oracle 21c 大小写敏感 已移除 参数完全移除,无法禁用

配置示例:

-- 检查当前设置
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;

密码生命周期阶段:

  1. 阶段1a:新旧密码同时有效(PASSWORD_ROLLOVER_TIME设定时间)
  2. 阶段1b:仅新密码有效,直到PASSWORD_LIFE_TIME结束
  3. 阶段2:密码过期前的正常使用期
  4. 阶段3:宽限期(PASSWORD_GRACE_TIME
  5. 阶段4:密码完全过期,必须更改

2 数据库审计配置

2.1 审计基础配置

审计参数说明:

-- 启用数据库审计
ALTER SYSTEM SET AUDIT_TRAIL=DB,EXTENDED SCOPE=SPFILE;

-- 审计SYSDBA操作
ALTER SYSTEM SET AUDIT_SYS_OPERATIONS=TRUE SCOPE=SPFILE;

-- 重启数据库使审计生效
SHUTDOWN IMMEDIATE;
STARTUP;

审计级别类型:

  • AUDIT_TRAIL=NONE:禁用审计
  • AUDIT_TRAIL=OS:审计记录写入操作系统文件
  • AUDIT_TRAIL=DB:审计记录写入数据库表SYS.AUD$
  • AUDIT_TRAIL=DB,EXTENDED:包含SQL语句和绑定变量
  • AUDIT_TRAIL=XML:审计记录写入XML格式操作系统文件

2.2 登录审计配置

监控失败登录尝试:

-- 查看登录失败的审计记录
SELECT os_username, userhost, terminal, username, COUNT(*)
FROM dba_audit_trail
WHERE returncode = 1017
GROUP BY os_username, userhost, username, terminal;

returncode 1017表示无效的用户名/密码,这对于检测暴力破解攻击非常有用。

2.3 细粒度审计策略

配置关键操作审计:

-- 审计所有DDL操作
AUDIT CREATE TABLE, ALTER TABLE, DROP TABLE BY ACCESS;

-- 审计数据查询操作
AUDIT SELECT TABLE BY ACCESS;

-- 审计用户管理操作
AUDIT CREATE USER, ALTER USER, DROP USER BY ACCESS;

-- 审计权限管理操作
AUDIT GRANT, REVOKE BY ACCESS;

-- 查看当前审计设置
SELECT * FROM DBA_STMT_AUDIT_OPTS;

3 用户和权限安全

3.1 账户锁定策略

配置示例:

-- 查询所有开放状态的用户
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 会话超时控制

配置示例:

-- 设置空闲超时和连接时间限制
ALTER PROFILE secure_profile LIMIT 
  IDLE_TIME 10
  CONNECT_TIME 60;

参数说明:

  • IDLE_TIME:最大空闲时间(分钟)
  • CONNECT_TIME:最大连接时间(分钟)

4 版本特定安全特性

4.1 Oracle 12c 密码增强

密码哈希算法改进:

12c使用基于PBKDF2的SHA512哈希算法替代简单的SHA1哈希,更安全抵御暴力破解。

密码文件存储到ASM:

-- 在ASM上创建密码文件
orapwd file='+DATA/ORCL/orapworcl' asm=y force=y format=12 password='NewPass123!'

前提条件: COMPATIBLE.ASM >= 12.1

Data Guard密码自动同步:

12cR2中,主备库的密码文件会自动同步,无需手动维护。

4.2 Oracle 19c/21c 安全增强

认证协议控制:

-- 设置允许的认证协议版本
ALTER SYSTEM SET sqlnet.allowed_logon_version_server=12 SCOPE=SPFILE;

可用值:

  • 12a:Oracle 12c Release 1 (12.1.0.2) 或更高版本
  • 12:Oracle 11g CPUOct2012 及更高版本认证协议(推荐)
  • 11:Oracle 11g 认证协议(默认)
  • 10:Oracle 10g 认证协议
  • 8:Oracle8i 认证协议

5 操作系统级安全配置

5.1 文件权限控制

推荐umask设置:

# 在shell配置文件中设置
umask 027  # 提供中等文件保护 (740)
# 或
umask 077  # 提供完整文件保护 (700)

5.2 密码复杂性规则(操作系统级)

配置示例:

# 设置密码复杂性策略(符合国防安全要求)
/opt/oracle.cellos/host_access_control pam-auth --passwdqc disabled,disabled,disabled,disabled,15

参数说明:

  • 确保密码至少包含四个字符分类(大写、小写、数字和特殊字符)
  • 密码长度至少为15个字符

6 监控和维护

6.1 安全状态监控

定期检查项目:

-- 检查开放账户
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进行数据库安全加固的参考手册。

关键最佳实践:

  1. 定期审查和更新密码策略
  2. 启用适当的审计级别并定期检查审计日志
  3. 及时应用安全补丁和版本更新
  4. 遵循最小权限原则分配用户权限
  5. 建立定期安全评估和监控机制

通过综合应用这些安全配置措施,可以显著提高Oracle数据库的安全性,保护敏感数据免受未授权访问和恶意攻击。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论