Skip to content

Oracle 安全初始化配置

安装前安全准备

系统安全加固

  1. 操作系统安全

    • 更新系统补丁:安装最新的操作系统补丁
    • 禁用不必要的服务:关闭不需要的系统服务
    • 配置防火墙:限制网络访问,只开放必要的端口
    • 启用 SELinux/AppArmor:在 Linux 系统上启用强制访问控制
  2. 用户和权限

    • 创建专用 Oracle 用户:使用非 root 账户安装和运行 Oracle
    • 设置强密码:为 Oracle 用户设置复杂密码
    • 限制用户权限:Oracle 用户只拥有必要的系统权限
    • 禁用默认账户:禁用或删除不必要的系统账户
  3. 文件系统安全

    • 设置正确的文件权限:确保 Oracle 文件和目录有适当的权限
    • 使用加密文件系统:对敏感数据使用加密文件系统
    • 分离存储:将数据文件、日志文件和备份文件存储在不同的磁盘上
    • 启用文件系统审计:监控文件系统的访问和更改

网络安全配置

  1. 网络隔离

    • 使用专用网络:为数据库服务器使用专用网络
    • 配置 VLAN:使用 VLAN 隔离数据库流量
    • 实施网络分段:将数据库网络与其他网络分离
  2. 防火墙配置

    • 限制入站连接:只允许必要的 IP 地址访问数据库端口
    • 限制出站连接:控制数据库服务器的出站流量
    • 配置端口转发:如需远程访问,使用端口转发而非直接开放端口
    • 启用状态检测:使用状态检测防火墙过滤流量
  3. 网络加密

    • 配置 SSL/TLS:为数据库连接启用 SSL/TLS 加密
    • 使用 VPN:对于远程管理,使用 VPN 连接
    • 禁用明文传输:确保所有网络传输都经过加密

存储安全配置

  1. 存储加密

    • 使用存储级加密:如 TDE (Transparent Data Encryption)
    • 配置加密算法:选择强加密算法,如 AES-256
    • 管理加密密钥:建立安全的密钥管理流程
  2. 存储访问控制

    • 限制存储访问:只允许 Oracle 用户访问数据存储
    • 设置文件系统权限:确保数据文件有适当的权限
    • 监控存储访问:审计存储访问活动
  3. 存储备份

    • 定期备份:建立定期备份策略
    • 备份加密:加密备份数据
    • 备份验证:定期验证备份的完整性
    • 异地存储:将备份存储在异地,防止灾难导致数据丢失

用户和权限规划

  1. 用户分类

    • 管理员用户:数据库管理员,拥有最高权限
    • 应用程序用户:应用程序连接数据库使用的用户
    • 普通用户:具有有限权限的用户
    • 审计用户:专门用于审计的用户
  2. 权限规划

    • 最小权限原则:用户只拥有完成任务所需的最小权限
    • 基于角色的权限管理:使用角色管理权限,简化权限分配
    • 权限分离:将管理权限分配给不同的用户,避免权限集中
    • 定期权限审查:定期审查用户权限,移除不必要的权限
  3. 认证方式规划

    • 密码认证:使用强密码策略
    • 操作系统认证:在可信环境中使用
    • 外部认证:如 LDAP、RADIUS 或 Kerberos
    • 多因素认证:为敏感操作启用多因素认证

安装过程中的安全配置

选择安全的安装选项

  1. 安装类型选择

    • 最小化安装:只安装必要的组件,减少攻击面
    • 自定义安装:根据需要选择组件,避免安装不必要的功能
    • 企业版安装:如需高级安全功能,选择企业版
  2. 安装目录安全

    • 选择安全的安装目录:避免使用默认目录,减少被攻击的风险
    • 设置适当的权限:确保安装目录有正确的权限
    • 分离 Oracle 主目录:将 Oracle 主目录与数据目录分离
  3. 安全更新配置

    • 启用安全更新:配置 Oracle 接收安全更新
    • 设置 My Oracle Support 账户:用于接收安全通知和补丁
    • 配置自动更新:如需自动应用安全补丁,配置自动更新

配置数据库管理员密码

  1. SYS 和 SYSTEM 密码

    • 设置强密码:使用复杂密码,包含大小写字母、数字和特殊字符
    • 不同密码:为 SYS 和 SYSTEM 使用不同的密码
    • 定期更换:建立密码定期更换策略
    • 安全存储:使用密码管理工具存储管理员密码
  2. 密码文件配置

    • 创建密码文件:用于远程 SYSDBA 访问
    • 设置密码文件权限:确保密码文件有适当的权限
    • 限制密码文件访问:只允许授权用户访问密码文件

选择合适的认证方式

  1. 数据库认证

    • 密码认证:默认认证方式,使用数据库存储的密码
    • 密码复杂性验证:启用密码复杂性检查
    • 密码过期策略:设置密码过期时间
  2. 操作系统认证

    • 适用场景:在可信的服务器环境中
    • 配置方法:将用户添加到 dba 组
    • 安全考虑:确保操作系统账户的安全
  3. 外部认证

    • LDAP 认证:集成企业 LDAP 目录服务
    • Kerberos 认证:使用 Kerberos 进行网络认证
    • RADIUS 认证:使用 RADIUS 进行远程认证

配置网络安全选项

  1. 监听器配置

    • 设置监听器密码:防止未授权的监听器管理
    • 限制监听器访问:只允许授权 IP 访问监听器
    • 配置监听器日志:启用详细的监听器日志
    • 使用非默认端口:如需增强安全性,使用非默认端口
  2. 网络加密

    • 启用 SSL/TLS:为数据库连接启用 SSL/TLS
    • 配置加密算法:选择强加密算法
    • 验证服务器证书:确保客户端验证服务器证书
    • 配置客户端认证:如需双向认证,配置客户端证书
  3. 连接限制

    • 设置连接超时:防止连接挂起和资源耗尽
    • 限制并发连接数:防止 DoS 攻击
    • 配置连接速率限制:防止暴力破解攻击

安装后的安全初始化

密码策略配置

  1. 密码复杂性验证

    • 启用密码验证函数

      sql
      ALTER PROFILE default LIMIT PASSWORD_VERIFY_FUNCTION ora12c_verify_function;
    • 自定义密码验证函数:如需更严格的密码策略,创建自定义验证函数

  2. 密码过期策略

    • 设置密码有效期

      sql
      ALTER PROFILE default LIMIT PASSWORD_LIFE_TIME 90;
    • 设置密码 grace 期

      sql
      ALTER PROFILE default LIMIT PASSWORD_GRACE_TIME 7;
  3. 密码重用限制

    • 设置密码重用时间

      sql
      ALTER PROFILE default LIMIT PASSWORD_REUSE_TIME 365;
    • 设置密码重用次数

      sql
      ALTER PROFILE default LIMIT PASSWORD_REUSE_MAX UNLIMITED;
  4. 失败登录尝试限制

    • 设置失败登录尝试次数

      sql
      ALTER PROFILE default LIMIT FAILED_LOGIN_ATTEMPTS 5;
    • 设置账户锁定时间

      sql
      ALTER PROFILE default LIMIT PASSWORD_LOCK_TIME 1;
  5. 密码大小写敏感

    • 启用密码大小写敏感

      sql
      ALTER SYSTEM SET sec_case_sensitive_logon = TRUE SCOPE = SPFILE;
    • 重启数据库:使设置生效

用户和权限管理

  1. 移除默认账户

    • 锁定和过期默认账户

      sql
      ALTER USER SCOTT ACCOUNT LOCK PASSWORD EXPIRE;
      ALTER USER APPS ACCOUNT LOCK PASSWORD EXPIRE;
      ALTER USER DBSNMP ACCOUNT LOCK PASSWORD EXPIRE;
      ALTER USER SYSMAN ACCOUNT LOCK PASSWORD EXPIRE;
    • 删除不需要的默认账户:如需完全移除,使用 DROP USER 命令

  2. 移除示例数据

    • 删除示例 schema
      sql
      DROP USER SCOTT CASCADE;
      DROP USER HR CASCADE;
      DROP USER OE CASCADE;
      DROP USER PM CASCADE;
      DROP USER IX CASCADE;
      DROP USER SH CASCADE;
  3. 创建最小权限用户

    • 应用程序用户

      sql
      CREATE USER app_user IDENTIFIED BY "StrongPassword123!";
      GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW TO app_user;
    • 只读用户

      sql
      CREATE USER readonly_user IDENTIFIED BY "ReadOnlyPassword123!";
      GRANT CREATE SESSION TO readonly_user;
  4. 角色管理

    • 创建自定义角色

      sql
      CREATE ROLE app_role;
      GRANT SELECT, INSERT, UPDATE, DELETE ON app_schema.app_table TO app_role;
      GRANT app_role TO app_user;
    • 管理默认角色:限制默认角色的使用,只授予必要的角色

  5. 权限回收

    • 回收不必要的权限

      sql
      REVOKE DROP ANY TABLE FROM user;
      REVOKE ALTER ANY USER FROM user;
    • 定期审查权限:使用数据字典视图审查用户权限

审计配置

  1. 启用审计

    • 设置审计级别

      sql
      ALTER SYSTEM SET audit_trail = 'DB, EXTENDED' SCOPE = SPFILE;
    • 重启数据库:使设置生效

  2. 配置审计策略

    • 审计管理员操作

      sql
      AUDIT ALL BY SYS BY ACCESS;
      AUDIT ALL BY SYSTEM BY ACCESS;
    • 审计权限变更

      sql
      AUDIT ALTER USER, CREATE USER, DROP USER BY ACCESS;
      AUDIT GRANT, REVOKE BY ACCESS;
    • 审计数据访问

      sql
      AUDIT SELECT, INSERT, UPDATE, DELETE ON sensitive_schema.sensitive_table BY ACCESS;
  3. 审计日志管理

    • 设置审计日志大小:防止审计日志过大
    • 定期归档审计日志:避免审计日志填满表空间
    • 保护审计日志:确保审计日志的安全性和完整性
    • 限制审计日志访问:只允许授权用户访问审计日志

网络安全配置

  1. 监听器安全

    • 设置监听器密码

      sql
      lsnrctl set password
    • 限制监听器访问:在 sqlnet.ora 中配置:

      txt
      tcp.validnode_checking = YES
      tcp.invited_nodes = (192.168.1.0/24, dbserver)
    • 禁用外部过程:如需增强安全性,禁用外部过程

  2. SQL*Net 安全

    • 启用连接加密:在 sqlnet.ora 中配置:

      txt
      SQLNET.ENCRYPTION_SERVER = REQUIRED
      SQLNET.ENCRYPTION_TYPES_SERVER = (AES256, AES192, AES128)
      SQLNET.CRYPTO_CHECKSUM_SERVER = REQUIRED
      SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER = (SHA256, SHA1)
    • 设置连接超时

      txt
      SQLNET.INBOUND_CONNECT_TIMEOUT = 60
      SQLNET.OUTBOUND_CONNECT_TIMEOUT = 30
      SQLNET.EXPIRE_TIME = 10
  3. 防火墙配置

    • 限制数据库端口访问:只允许授权 IP 访问 1521 端口
    • 使用专用网络:为数据库使用专用网络
    • 配置 VPN:如需远程访问,使用 VPN

数据加密配置

  1. 透明数据加密 (TDE)

    • 配置 TDE 主密钥

      sql
      ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "MasterKeyPassword123!";
    • 加密表空间

      sql
      CREATE TABLESPACE encrypted_ts DATAFILE '/path/to/encrypted.dbf' SIZE 100M ENCRYPTION USING 'AES256' DEFAULT STORAGE(ENCRYPT);
    • 加密现有表

      sql
      ALTER TABLE sensitive_table MODIFY (column1 ENCRYPT, column2 ENCRYPT);
  2. 网络数据加密

    • 配置 SSL/TLS

      • 创建或获取 SSL 证书
      • 配置 Oracle Wallet
      • 修改 listener.ora 和 sqlnet.ora
    • 使用 TCPS 协议:在 tnsnames.ora 中配置 TCPS 连接

  3. 密码加密

    • 启用密码大小写敏感

      sql
      ALTER SYSTEM SET sec_case_sensitive_logon = TRUE SCOPE = SPFILE;
    • 配置密码哈希算法:使用 Oracle 推荐的密码哈希算法

安全补丁管理

  1. 补丁评估

    • 定期检查补丁:关注 Oracle 安全公告
    • 评估补丁影响:分析补丁对系统的影响
    • 制定补丁计划:根据业务需求和安全风险制定补丁计划
  2. 补丁应用

    • 测试补丁:在测试环境中测试补丁
    • 备份数据库:在应用补丁前备份数据库
    • 应用补丁:使用 OPatch 工具应用补丁
    • 验证补丁:确认补丁应用成功
  3. 补丁管理流程

    • 建立补丁管理流程:包括评估、测试、应用和验证
    • 文档化补丁过程:记录补丁应用的详细信息
    • 监控补丁状态:确保所有系统都应用了必要的补丁

安全检查和验证

安全配置检查

  1. 数据库安全配置检查

    • 使用 Oracle 安全评估工具:如 Oracle Database Security Assessment Tool (DBSAT)
    • 检查用户和权限:使用数据字典视图检查用户权限
    • 检查审计配置:确认审计已正确配置
    • 检查密码策略:验证密码策略是否符合要求
  2. 网络安全检查

    • 检查监听器配置:确认监听器安全配置
    • 检查网络访问控制:验证防火墙规则和网络限制
    • 测试网络加密:确认网络传输已加密
  3. 存储安全检查

    • 检查文件权限:确认 Oracle 文件和目录权限正确
    • 验证数据加密:确认 TDE 已正确配置
    • 检查备份安全:确认备份已加密并安全存储

漏洞扫描

  1. 使用漏洞扫描工具

    • Oracle 官方工具:如 Oracle Critical Patch Update (CPU) 扫描工具
    • 第三方工具:如 Nessus、Qualys 等
    • 内部扫描:使用企业内部的漏洞扫描工具
  2. 扫描范围

    • 数据库服务器:扫描数据库服务器的漏洞
    • 数据库实例:扫描数据库实例的漏洞
    • 网络配置:扫描网络配置的漏洞
    • 应用程序:扫描应用程序的漏洞
  3. 扫描频率

    • 定期扫描:如每月或每季度进行一次完整扫描
    • 补丁后扫描:应用补丁后进行扫描
    • 变更后扫描:系统变更后进行扫描
    • 按需扫描:根据安全事件或新漏洞公告进行扫描

安全审计

  1. 内部审计

    • 定期安全审计:由内部安全团队进行审计
    • 合规审计:根据法规要求进行合规审计
    • 专项审计:针对特定安全问题进行审计
  2. 外部审计

    • 第三方审计:由外部安全公司进行审计
    • 认证审计:如 ISO 27001、SOC 2 等认证审计
    • 监管审计:由监管机构进行的审计
  3. 审计内容

    • 安全策略执行:检查安全策略的执行情况
    • 权限管理:审查用户权限和访问控制
    • 审计日志:检查审计日志的完整性和合规性
    • 漏洞管理:审查漏洞的发现和修复情况

渗透测试

  1. 渗透测试计划

    • 定义测试范围:明确测试的系统和应用
    • 制定测试计划:包括测试方法、工具和时间表
    • 获取授权:确保测试得到适当的授权
  2. 执行渗透测试

    • 信息收集:收集系统和应用的信息
    • 漏洞利用:尝试利用发现的漏洞
    • 权限提升:尝试提升权限
    • 数据访问:尝试访问敏感数据
  3. 测试报告

    • 记录发现的问题:详细记录发现的安全问题
    • 提供修复建议:针对发现的问题提供修复建议
    • 验证修复:在修复后验证问题是否解决

安全最佳实践

最小权限原则

  1. 权限分配

    • 按需分配:只授予用户完成任务所需的最小权限
    • 基于角色:使用角色管理权限,简化权限分配
    • 定期审查:定期审查用户权限,移除不必要的权限
  2. 特权账户管理

    • 限制特权账户:减少特权账户的数量
    • 使用审计:审计特权账户的活动
    • 特权分离:将不同的管理职责分配给不同的账户
  3. 应用程序权限

    • 应用程序专用账户:为每个应用程序使用专用账户
    • 最小应用权限:应用程序账户只拥有必要的数据库权限
    • 连接池:使用连接池管理数据库连接

定期安全评估

  1. 安全评估计划

    • 制定评估计划:包括评估范围、方法和时间表
    • 明确评估标准:根据法规和最佳实践确定评估标准
    • 分配责任:明确评估的责任人和团队
  2. 评估内容

    • 配置评估:检查安全配置是否符合最佳实践
    • 漏洞评估:扫描系统和应用的漏洞
    • 风险评估:评估安全风险的严重程度和可能性
    • 合规评估:检查是否符合法规要求
  3. 评估频率

    • 定期评估:如每季度或每年进行一次完整评估
    • 变更后评估:系统变更后进行评估
    • 事件后评估:安全事件后进行评估

安全事件响应

  1. 事件响应计划

    • 制定响应计划:包括事件检测、响应和恢复
    • 建立响应团队:组建安全事件响应团队
    • 定义响应流程:明确事件响应的步骤和责任
  2. 事件检测

    • 监控系统:部署安全监控系统
    • 告警机制:建立安全事件告警机制
    • 日志分析:定期分析安全日志
  3. 事件响应

    • 快速响应:及时响应安全事件
    • 隔离受影响系统:防止事件扩散
    • 收集证据:收集事件相关的证据
    • 实施修复:修复安全漏洞和问题
  4. 事件恢复

    • 恢复系统:恢复受影响的系统和数据
    • 验证修复:确认安全问题已解决
    • 更新安全措施:根据事件经验更新安全措施

安全文档管理

  1. 安全策略文档

    • 制定安全策略:包括密码策略、访问控制策略等
    • 定期更新:根据业务需求和安全威胁更新策略
    • 员工培训:确保员工了解和遵守安全策略
  2. 安全配置文档

    • 记录安全配置:详细记录系统的安全配置
    • 配置变更管理:管理安全配置的变更
    • 配置基线:建立安全配置基线
  3. 安全事件文档

    • 记录安全事件:详细记录安全事件的发生和处理
    • 事件分析:分析安全事件的原因和影响
    • 经验教训:总结安全事件的经验教训
  4. 合规文档

    • 法规要求文档:记录适用的法规要求
    • 合规证明:收集和维护合规证明文件
    • 审计文档:准备和维护审计相关文档

常见问题(FAQ)

Q1: 如何安全地管理数据库管理员密码?

A1: 安全管理数据库管理员密码的方法:

  • 使用密码管理工具:使用企业级密码管理工具存储管理员密码
  • 定期更换密码:建立密码定期更换策略,如每 90 天更换一次
  • 不同密码:为不同的管理员账户使用不同的密码
  • 多因素认证:为管理员访问启用多因素认证
  • 限制管理员访问:只允许从可信的网络和终端访问管理员账户

Q2: 如何防止 SQL 注入攻击?

A2: 防止 SQL 注入攻击的方法:

  • 使用绑定变量:在应用程序中使用绑定变量,而非字符串拼接
  • 最小权限:应用程序账户只拥有必要的权限
  • 输入验证:在应用程序层面验证用户输入
  • 使用存储过程:对于复杂操作,使用存储过程
  • 审计:审计敏感表的访问和修改

Q3: 如何配置 Oracle 数据库的审计功能?

A3: 配置 Oracle 数据库审计功能的步骤:

  1. 启用审计

    sql
    ALTER SYSTEM SET audit_trail = 'DB, EXTENDED' SCOPE = SPFILE;
  2. 重启数据库:使审计设置生效

  3. 配置审计策略

    sql
    -- 审计管理员操作
    AUDIT ALL BY SYS BY ACCESS;
    -- 审计权限变更
    AUDIT ALTER USER, CREATE USER, DROP USER BY ACCESS;
    -- 审计数据访问
    AUDIT SELECT, INSERT, UPDATE, DELETE ON sensitive_schema.sensitive_table BY ACCESS;
  4. 管理审计日志:定期归档和清理审计日志

Q4: 如何保护敏感数据?

A4: 保护敏感数据的方法:

  • 数据加密:使用 TDE 加密敏感数据
  • 数据脱敏:对非生产环境中的敏感数据进行脱敏
  • 访问控制:限制敏感数据的访问权限
  • 审计:审计敏感数据的访问和修改
  • 数据分类:对数据进行分类,根据分类实施不同的保护措施

Q5: 如何安全地应用 Oracle 补丁?

A5: 安全应用 Oracle 补丁的步骤:

  1. 评估补丁:分析补丁的必要性和影响
  2. 备份数据库:在应用补丁前备份数据库
  3. 测试补丁:在测试环境中测试补丁
  4. 应用补丁:使用 OPatch 工具应用补丁
  5. 验证补丁:确认补丁应用成功,系统正常运行
  6. 文档记录:记录补丁应用的详细信息

Q6: 如何检测和应对安全事件?

A6: 检测和应对安全事件的方法:

  • 监控系统:部署安全监控系统,监控数据库活动
  • 日志分析:定期分析数据库和系统日志
  • 告警机制:建立安全事件告警机制
  • 响应计划:制定安全事件响应计划
  • 快速响应:及时响应安全事件,隔离受影响系统
  • 恢复措施:实施修复和恢复措施
  • 经验总结:分析事件原因,更新安全措施

Q7: 如何配置网络安全?

A7: 配置网络安全的方法:

  • 防火墙配置:限制数据库端口的访问,只允许授权 IP
  • 网络加密:启用 SSL/TLS 加密数据库连接
  • 监听器安全:设置监听器密码,限制监听器访问
  • 网络隔离:将数据库网络与其他网络隔离
  • VPN 访问:对于远程访问,使用 VPN

Q8: 如何进行安全合规审计?

A8: 进行安全合规审计的步骤:

  1. 确定合规要求:明确适用的法规和标准
  2. 制定审计计划:包括审计范围、方法和时间表
  3. 收集证据:收集安全配置、审计日志等证据
  4. 评估合规性:根据合规要求评估系统的合规性
  5. 生成报告:生成合规审计报告,包括发现的问题和建议
  6. 实施改进:根据审计结果实施安全改进
  7. 定期审计:定期进行合规审计,确保持续合规