Skip to content

Oracle 安全配置建议

安全配置的重要性

数据保护

安全配置是保护敏感数据的第一道防线,有效的安全配置可以防止未授权访问、数据泄露和恶意攻击,确保数据的机密性、完整性和可用性。

合规要求

许多行业法规和标准(如GDPR、HIPAA、PCI DSS等)要求企业实施适当的安全控制措施,安全配置是满足这些合规要求的基础。

风险缓解

合理的安全配置可以减少安全漏洞和攻击面,降低安全事件发生的风险,避免因安全事件导致的财务损失、法律责任和声誉损害。

业务连续性

安全配置不仅保护数据,还保护数据库服务的连续性,防止因安全事件导致的服务中断,确保业务的正常运行。

数据库安全基础

最小权限原则

权限分配

  • 角色设计:根据工作职责设计最小必要权限的角色
  • 权限审核:定期审核用户权限,移除不必要的权限
  • 特权管理:严格控制DBA等特权用户的数量和权限

示例

sql
-- 创建具有最小权限的角色
CREATE ROLE app_user;
GRANT CREATE SESSION TO app_user;
GRANT SELECT, INSERT, UPDATE, DELETE ON app.orders TO app_user;

-- 分配角色给用户
GRANT app_user TO user1;

-- 定期审核权限
SELECT grantee, granted_role
FROM dba_role_privs
WHERE grantee NOT IN ('SYS', 'SYSTEM')
ORDER BY grantee;

密码策略

密码复杂度

  • 长度要求:设置最小密码长度(建议至少12位)
  • 复杂度要求:要求包含大小写字母、数字和特殊字符
  • 过期时间:设置密码过期时间(建议90天)
  • 历史记录:禁止使用最近使用过的密码(建议至少5个历史密码)

配置示例

sql
-- 设置密码验证函数
ALTER PROFILE DEFAULT LIMIT
  PASSWORD_LIFE_TIME 90
  PASSWORD_GRACE_TIME 7
  PASSWORD_REUSE_TIME 365
  PASSWORD_REUSE_MAX 5
  FAILED_LOGIN_ATTEMPTS 10
  PASSWORD_LOCK_TIME 1
  PASSWORD_VERIFY_FUNCTION ora12c_strong_verify_function;

-- 启用密码大小写区分
ALTER SYSTEM SET sec_case_sensitive_logon = TRUE SCOPE=SPFILE;
-- 需要重启数据库

网络访问控制

监听器配置

  • 访问控制:配置监听器访问控制列表
  • 加密传输:启用监听器密码和网络加密
  • 端口保护:使用非默认端口,配置防火墙规则

配置示例

sql
-- 配置监听器访问控制
-- 在listener.ora文件中添加
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /u01/app/oracle/product/19.3.0/dbhome_1)
      (PROGRAM = extproc)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = dbserver)(PORT = 1521))
    )
  )

-- 配置监听器密码
LSNRCTL> CHANGE_PASSWORD
Old password:
New password: <输入新密码>
Reenter new password: <确认新密码>

LSNRCTL> SET PASSWORD <密码>
LSNRCTL> SAVE_CONFIG

认证和授权配置

认证配置

强认证

  • 密码认证:使用强密码策略
  • 操作系统认证:限制操作系统认证的使用
  • 网络认证:使用SSL/TLS进行网络认证
  • 多因素认证:考虑实施多因素认证

配置示例

sql
-- 禁用远程操作系统认证
ALTER SYSTEM SET remote_os_authent = FALSE SCOPE=SPFILE;

-- 限制本地操作系统认证
ALTER SYSTEM SET os_authent_prefix = '' SCOPE=SPFILE;

-- 启用密码大小写区分
ALTER SYSTEM SET sec_case_sensitive_logon = TRUE SCOPE=SPFILE;
-- 需要重启数据库

授权配置

角色管理

  • 预定义角色:谨慎使用预定义角色(如DBA、SYSDBA)
  • 自定义角色:根据业务需求创建自定义角色
  • 权限继承:注意角色权限的继承关系

配置示例

sql
-- 创建自定义角色
CREATE ROLE read_only;
GRANT CREATE SESSION TO read_only;
GRANT SELECT ON app.employees TO read_only;
GRANT SELECT ON app.departments TO read_only;

-- 创建应用管理员角色
CREATE ROLE app_admin;
GRANT read_only TO app_admin;
GRANT INSERT, UPDATE, DELETE ON app.employees TO app_admin;
GRANT INSERT, UPDATE, DELETE ON app.departments TO app_admin;

-- 审核角色权限
SELECT role, privilege
FROM dba_sys_privs
WHERE role NOT IN ('CONNECT', 'RESOURCE')
ORDER BY role, privilege;

特权用户管理

SYS和SYSTEM用户

  • 密码管理:定期更改SYS和SYSTEM用户密码
  • 权限限制:限制SYS和SYSTEM用户的使用
  • 审计:对SYS和SYSTEM用户的操作进行审计

配置示例

sql
-- 更改SYS密码
ALTER USER SYS IDENTIFIED BY "new_secure_password";

-- 更改SYSTEM密码
ALTER USER SYSTEM IDENTIFIED BY "new_secure_password";

-- 审计SYS用户操作
AUDIT ALL BY SYS BY ACCESS;

审计配置

统一审计

配置

  • 启用统一审计:在Oracle 12c+中启用统一审计
  • 审计策略:创建和应用适当的审计策略
  • 审计存储:配置审计记录的存储和管理

配置示例

sql
-- 启用统一审计(Oracle 12c+)
ALTER SYSTEM SET audit_trail = 'DB,EXTENDED' SCOPE=SPFILE;
-- 需要重启数据库

-- 创建审计策略
CREATE AUDIT POLICY db_admin_actions
  ACTIONS CREATE USER, ALTER USER, DROP USER,
         CREATE ROLE, ALTER ROLE, DROP ROLE,
         GRANT, REVOKE;

-- 启用审计策略
AUDIT POLICY db_admin_actions;

-- 查看审计记录
SELECT audit_type, event_timestamp, dbusername, 
       object_schema, object_name, action_name,
       sql_text
FROM unified_audit_trail
ORDER BY event_timestamp DESC;

细粒度审计

配置

  • 敏感数据审计:对敏感数据的访问进行审计
  • 条件审计:基于条件进行审计
  • 列级审计:对特定列的访问进行审计

配置示例

sql
-- 创建细粒度审计策略
BEGIN
  DBMS_FGA.ADD_POLICY(
    object_schema => 'hr',
    object_name => 'employees',
    policy_name => 'audit_salary_access',
    audit_condition => 'salary > 5000',
    audit_column => 'salary',
    handler_schema => NULL,
    handler_module => NULL,
    enable => TRUE,
    statement_types => 'SELECT'
  );
END;
/

-- 查看细粒度审计记录
SELECT object_schema, object_name, policy_name, 
       db_user, os_user, userhost, 
       to_char(timestamp, 'YYYY-MM-DD HH24:MI:SS') AS audit_time,
       sql_text
FROM dba_fga_audit_trail
ORDER BY timestamp DESC;

加密配置

透明数据加密 (TDE)

配置

  • 表空间加密:对包含敏感数据的表空间进行加密
  • 列加密:对特定敏感列进行加密
  • 密钥管理:安全管理TDE主密钥

配置示例

sql
-- 启用TDE主密钥
ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "password";

-- 创建加密表空间
CREATE TABLESPACE encrypted_ts 
  DATAFILE 'encrypted_ts.dbf' SIZE 100M
  ENCRYPTION USING 'AES256' DEFAULT STORAGE (ENCRYPT);

-- 加密现有表
ALTER TABLE hr.employees ENCRYPT;

-- 导出TDE主密钥(用于备份)
ADMINISTER KEY MANAGEMENT EXPORT ENCRYPTION KEYS 
  TO 'tde_key_backup.key' 
  IDENTIFIED BY "password";

网络加密

配置

  • SSL/TLS:配置数据库和客户端之间的SSL/TLS加密
  • 加密级别:设置适当的加密级别
  • 证书管理:管理SSL证书

配置示例

sql
-- 在sqlnet.ora中配置网络加密
SQLNET.ENCRYPTION_SERVER = REQUIRED
SQLNET.ENCRYPTION_TYPES_SERVER = (AES256, AES192, AES128)
SQLNET.CRYPTO_CHECKSUM_SERVER = REQUIRED
SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER = (SHA256, SHA1)

-- 在listener.ora中配置
WALLET_LOCATION =
  (SOURCE =
    (METHOD = FILE)
    (METHOD_DATA =
      (DIRECTORY = /u01/app/oracle/wallet)
    )
  )

-- 在tnsnames.ora中配置客户端
ORCL =
  (DESCRIPTION =
    (ADDRESS =
      (PROTOCOL = TCPS)
      (HOST = dbserver)
      (PORT = 2484)
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
    (SECURITY =
      (SSL_SERVER_CERT_DN = "CN=dbserver,OU=IT,O=Company,L=City,ST=State,C=Country")
    )
  )

补丁和更新

补丁管理

补丁评估

  • 安全公告:关注Oracle安全公告(CVE)
  • 补丁分析:分析补丁对系统的影响
  • 测试:在测试环境中测试补丁

补丁应用

  • 计划:制定补丁应用计划,包括回滚策略
  • 备份:在应用补丁前备份数据库
  • 应用:按照Oracle文档应用补丁
  • 验证:验证补丁应用成功

示例流程

  1. 下载补丁:从Oracle Support下载最新补丁
  2. 备份数据库
    sql
    RMAN> BACKUP DATABASE PLUS ARCHIVELOG;
  3. 应用补丁
    bash
    # 应用PSU补丁
    opatch apply /path/to/patch
  4. 验证补丁
    bash
    opatch lsinventory
  5. 运行后处理
    sql
    @?/rdbms/admin/catbundle.sql PSU APPLY

数据库版本管理

版本选择

  • 长期支持版本:选择Oracle长期支持(LTS)版本
  • 补丁级别:保持数据库在最新的补丁级别
  • 生命周期:了解数据库版本的生命周期

版本升级

  • 升级计划:制定详细的升级计划
  • 测试:在测试环境中进行升级测试
  • 回滚:准备回滚方案
  • 验证:升级后验证系统功能

安全监控

数据库活动监控

监控工具

  • Oracle Enterprise Manager:使用OEM监控数据库活动
  • 审计日志分析:分析审计日志中的异常活动
  • 第三方工具:使用专业的安全监控工具

监控内容

  • 登录尝试:失败的登录尝试、异常的登录时间和位置
  • 权限变更:用户权限的变更
  • 数据访问:敏感数据的访问模式
  • 配置变更:数据库配置的变更

异常检测

基于阈值的检测

  • 登录尝试:设置失败登录尝试阈值
  • 权限变更:监控权限变更频率
  • 数据访问:监控数据访问量和模式

基于行为的检测

  • 用户行为分析:建立用户正常行为基线
  • 异常识别:识别偏离正常行为的活动
  • 预警机制:设置预警机制,提前发现潜在风险

常见安全问题处理

未授权访问

症状

  • 异常的登录尝试
  • 未授权用户的数据库访问
  • 敏感数据的异常访问模式

原因

  • 弱密码:用户使用弱密码
  • 权限过度:用户拥有过多权限
  • 配置错误:安全配置不当

解决方案

  • 立即响应:锁定可疑账户,终止未授权会话
  • 审计:分析未授权访问的范围和影响
  • 加强防护
    sql
    -- 锁定可疑账户
    ALTER USER suspicious_user ACCOUNT LOCK;
    
    -- 终止未授权会话
    ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;
    
    -- 加强密码策略
    ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS 5;

权限滥用

症状

  • 用户执行超出其职责的操作
  • 特权用户的异常活动
  • 权限的异常变更

原因

  • 权限过度:用户拥有过多权限
  • 角色滥用:不当使用特权角色
  • 监控不足:缺乏对权限使用的监控

解决方案

  • 撤销过度权限
    sql
    -- 撤销不必要的权限
    REVOKE DBA FROM user_with_excess_privs;
    
    -- 审查角色权限
    SELECT grantee, granted_role
    FROM dba_role_privs
    WHERE granted_role = 'DBA'
    AND grantee NOT IN ('SYS', 'SYSTEM');
  • 实施最小权限:重新设计权限模型,实施最小权限原则
  • 加强审计:对权限变更和使用进行审计

安全漏洞

症状

  • 数据库被恶意攻击
  • 异常的数据库行为
  • 安全扫描工具发现漏洞

原因

  • 未应用补丁:数据库未应用最新安全补丁
  • 配置错误:安全配置不当
  • 过时版本:使用过时的Oracle版本

解决方案

  • 应用补丁:立即应用相关安全补丁
  • 修复配置:修正安全配置错误
  • 升级版本:考虑升级到更安全的版本
  • 漏洞扫描:定期进行安全漏洞扫描

最佳实践

安全基线

建立安全基线

  • 配置基线:建立数据库安全配置基线
  • 审计基线:建立审计配置基线
  • 监控基线:建立安全监控基线

定期评估

  • 安全评估:定期进行数据库安全评估
  • 合规检查:定期进行合规性检查
  • 差距分析:分析当前配置与基线的差距

安全文档

文档内容

  • 安全策略:制定数据库安全策略文档
  • 配置文档:记录数据库安全配置
  • 流程文档:记录安全相关流程
  • 事件响应:制定安全事件响应计划

文档管理

  • 版本控制:对安全文档进行版本控制
  • 定期更新:定期更新安全文档
  • 访问控制:控制对安全文档的访问

培训和意识

管理员培训

  • 安全培训:对数据库管理员进行安全培训
  • 技能认证:鼓励管理员获取安全相关认证
  • 定期更新:定期更新培训内容

用户意识

  • 安全意识:提高用户的安全意识
  • 密码管理:培训用户正确管理密码
  • 安全报告:鼓励用户报告安全问题

版本差异

Oracle 11g

安全特性

  • TDE:支持表空间加密和列加密
  • 细粒度审计:支持基于条件的审计
  • 密码策略:基本的密码策略功能
  • 网络加密:支持网络加密

限制

  • 统一审计:不支持统一审计功能
  • 高级安全功能:某些高级安全功能不可用
  • 密码验证:密码验证功能相对简单

Oracle 12c及以上

增强功能

  • 统一审计:提供统一的审计框架
  • 多租户安全:支持多租户环境的安全管理
  • 高级密码策略:增强的密码验证功能
  • 特权分析:识别和管理过度特权
  • 数据红色action:动态数据屏蔽功能

新特性

sql
-- Oracle 12c+ 特权分析
BEGIN
  DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE(
    name => 'priv_analysis',
    description => 'Privilege analysis for application users',
    type => DBMS_PRIVILEGE_CAPTURE.G_DATABASE
  );
END;
/

-- 启用特权分析
BEGIN
  DBMS_PRIVILEGE_CAPTURE.ENABLE_CAPTURE('priv_analysis');
END;
/

-- 分析结果
SELECT * FROM dba_prilege_capture;

常见问题(FAQ)

Q1: 如何评估Oracle数据库的安全状态?

A1: 评估Oracle数据库安全状态的方法:

  1. 安全扫描:使用Oracle Database Security Assessment Tool (DBSAT)或第三方工具进行安全扫描
  2. 配置审查:审查数据库配置,确保符合安全最佳实践
  3. 权限审查:审查用户权限,确保实施最小权限原则
  4. 审计评估:评估审计配置,确保适当的审计覆盖
  5. 补丁检查:检查数据库补丁级别,确保应用最新安全补丁
  6. 漏洞评估:评估数据库是否存在已知漏洞

Q2: 如何保护Oracle数据库免受SQL注入攻击?

A2: 保护Oracle数据库免受SQL注入攻击的措施:

  1. 使用绑定变量:在应用程序中使用绑定变量,避免直接拼接SQL语句
    sql
    -- 安全的做法
    SELECT * FROM employees WHERE employee_id = :id;
    
    -- 不安全的做法
    SELECT * FROM employees WHERE employee_id = ' || user_input || ';
  2. 最小权限:限制应用程序用户的权限,只授予必要的权限
  3. 输入验证:在应用程序层面对用户输入进行验证和过滤
  4. 细粒度审计:对敏感表的访问进行审计
  5. 使用应用程序防火墙:考虑使用数据库应用程序防火墙(DBF)

Q3: 如何安全管理Oracle数据库的备份?

A3: 安全管理Oracle数据库备份的策略:

  1. 备份加密
    sql
    -- 使用RMAN备份加密
    RMAN> CONFIGURE ENCRYPTION FOR DATABASE ON;
    RMAN> BACKUP DATABASE PLUS ARCHIVELOG;
  2. 备份访问控制:限制对备份文件的访问
  3. 备份存储:将备份存储在安全的位置,考虑异地存储
  4. 备份验证:定期验证备份的完整性和可恢复性
    sql
    RMAN> VALIDATE BACKUPSET ALL;
  5. 备份轮换:实施备份轮换策略,确保备份的时效性
  6. 备份文档:记录备份策略和恢复流程

Q4: 如何处理Oracle数据库的安全事件?

A4: 处理Oracle数据库安全事件的流程:

  1. 事件响应团队:建立专门的安全事件响应团队
  2. 事件分类:根据事件的严重程度进行分类
  3. 遏制措施:立即采取措施遏制事件的影响
    sql
    -- 锁定可疑账户
    ALTER USER suspicious_user ACCOUNT LOCK;
    
    -- 终止可疑会话
    ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;
  4. 证据收集:收集和保存事件相关的证据
    sql
    -- 保存审计日志
    CREATE TABLE audit_evidence AS
    SELECT * FROM unified_audit_trail
    WHERE event_timestamp > SYSTIMESTAMP - INTERVAL '24' HOUR;
  5. 根本原因分析:分析事件的根本原因
  6. 修复措施:实施修复措施,防止类似事件再次发生
  7. 事件报告:根据法规要求报告安全事件
  8. 经验总结:总结事件处理经验,更新安全策略和流程

Q5: 如何确保Oracle数据库的合规性?

A5: 确保Oracle数据库合规性的方法:

  1. 法规识别:识别适用的法规和标准(如GDPR、HIPAA、PCI DSS等)
  2. 合规映射:将法规要求映射到具体的安全控制措施
  3. 技术控制
    sql
    -- 配置审计以满足PCI DSS要求
    CREATE AUDIT POLICY pci_dss_audit
      ACTIONS SELECT, INSERT, UPDATE, DELETE ON payment.cards;
    AUDIT POLICY pci_dss_audit;
    
    -- 配置TDE以满足数据保护要求
    ALTER TABLE payment.cards ENCRYPT;
  4. 流程控制:建立符合法规要求的流程
  5. 文档管理:准备合规审计所需的文档
  6. 定期审计:定期进行内部和外部合规审计
  7. 持续监控:持续监控合规状态,及时调整控制措施
  8. 培训:对员工进行合规培训,提高合规意识