温馨提示×

Ubuntu Oracle数据库如何安全设置

小樊
46
2025-11-29 01:15:44
栏目: 云计算

Ubuntu 上 Oracle 数据库的安全设置清单

一 系统与服务加固

  • 专用系统与账户:仅使用专用的 oracle 用户和 oinstall/dba 组;禁止 root 直连数据库;为 oracle 设置强口令与 sudo 限制(仅允许必要命令)。
  • 文件系统权限:限制 $ORACLE_HOME、$ORACLE_BASE、数据文件目录 仅 oracle:oinstall 可访问,关键目录权限 0755/0644,避免其他用户读/写/执行。
  • 补丁与更新:及时安装 Ubuntu 安全更新Oracle Critical Patch Update(CPU),最小化暴露窗口。
  • 服务最小化:仅开放必要端口(默认 1521/TCP),禁用未使用的监听器与数据库服务;监听仅绑定内网地址。
  • 自启动与守护:使用 /etc/oratabsystemd 管理实例启停,确保异常重启后可自动拉起且权限正确。

二 网络与传输安全

  • 防火墙与网络隔离:在 UFW/iptables 仅放行应用服务器与跳板机到 1521/TCP;数据库置于 私有子网/VPC,禁止公网直连。
  • 监听器加固:为 LISTENER 设置强密码并保存配置(在 lsnrctl 中执行 change_passwordsave_config),防止未授权启停与配置篡改。
  • 源地址限制:在 $ORACLE_HOME/network/admin/sqlnet.ora 启用白名单校验,仅允许可信网段/主机访问。
  • 传输加密:启用 SQLNET.ENCRYPTION/SQLNET.CRYPTO_CHECKSUM,强制客户端/服务器协商加密与校验,防止明文传输。
  • 空闲连接保活:设置 SQLNET.EXPIRE_TIME=10(单位:分钟),及时清理僵死会话,降低会话劫持风险。

三 数据库账户与权限控制

  • 强密码策略:口令长度至少 8 位,包含大小写字母、数字与特殊字符;定期更换;限制失败登录尝试与锁定周期。
  • 默认账户治理:修改 SYS/SYSTEM 等默认账户口令;锁定或删除 示例/演示/无用 账户;禁用不需要的 Enterprise Manager 账户(如 DBSNMP/SYSMAN/MGMT_VIEW)。
  • 权限最小化:应用账户仅授予所需 对象/系统权限 与自定义 角色;避免授予 DBA 角色;定期审计高权限账户与权限变更。
  • 撤销 PUBLIC 危险包执行:对 UTL_FILE、UTL_HTTP、UTL_TCP、UTL_SMTP、DBMS_RANDOM 等撤销 PUBLIC 的 EXECUTE,降低代码执行与数据外泄风险。
  • 数据字典保护:设置 O7_DICTIONARY_ACCESSIBILITY=FALSE,禁止非 SYSDBA 通过数据字典基表直接访问敏感元数据。

四 审计与监控

  • 启用审计:将 AUDIT_TRAIL 设为 DB/OS,审计关键操作(登录/登出、DDL、权限变更、敏感表访问);定期归档与分析审计日志。
  • 登录审计与告警:创建 AFTER LOGON 触发器记录 用户名、IP、时间 等关键要素,结合日志监控平台进行异常登录检测与告警。
  • 安全基线核查:定期核查 FAILED_LOGIN_ATTEMPTS、PASSWORD_VERIFY_FUNCTION、PASSWORD_REUSE_MAX、PASSWORD_GRACE_TIME 等策略是否生效。
  • 备份与演练:制定 RMAN/导出 备份策略并定期做 恢复演练,确保被攻击或故障时可快速恢复业务。

五 关键配置示例

  • 白名单与空闲保活(sqlnet.ora)
    tcp.validnode_checking=yes
    tcp.invited_nodes=(10.0.1.10,10.0.1.20,127.0.0.1)
    SQLNET.EXPIRE_TIME=10
    
  • 传输加密(sqlnet.ora)
    SQLNET.ENCRYPTION=REQUIRED
    SQLNET.ENCRYPTION_TYPES_SERVER=(AES256)
    SQLNET.CRYPTO_CHECKSUM=REQUIRED
    SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER=(SHA1)
    
  • 登录审计触发器(登录即写库表)
    CREATE TABLE LOGON_TABLE(
      logon_user  VARCHAR2(255),
      logon_ip    VARCHAR2(255),
      logon_time  DATE
    );
    CREATE OR REPLACE TRIGGER TRI_LOGON
    AFTER LOGON ON DATABASE
    BEGIN
      INSERT INTO LOGON_TABLE VALUES(
        SYS_CONTEXT('USERENV','SESSION_USER'),
        SYS_CONTEXT('USERENV','IP_ADDRESS'),
        SYSDATE
      );
    END;
    /
    
  • 密码与锁定策略(Profile)
    -- 复杂度函数(11g示例脚本)
    @$ORACLE_HOME/RDBMS/ADMIN/utlpwdmg.sql
    ALTER PROFILE DEFAULT LIMIT
      PASSWORD_VERIFY_FUNCTION verify_function_11G
      FAILED_LOGIN_ATTEMPTS 6
      PASSWORD_LOCK_TIME 1
      PASSWORD_GRACE_TIME 90
      PASSWORD_REUSE_MAX 5
      PASSWORD_LIFE_TIME 90;
    
  • 撤销 PUBLIC 危险包
    REVOKE EXECUTE ON UTL_FILE  FROM PUBLIC;
    REVOKE EXECUTE ON UTL_TCP  FROM PUBLIC;
    REVOKE EXECUTE ON UTL_SMTP FROM PUBLIC;
    REVOKE EXECUTE ON UTL_HTTP FROM PUBLIC;
    REVOKE EXECUTE ON DBMS_RANDOM FROM PUBLIC;
    
  • 监听器口令(lsnrctl)
    lsnrctl
    LSNRCTL> change_password
    Old password: <当前>
    New password: <新>
    Reenter new password: <新>
    LSNRCTL> save_config
    

0