Oracle Database 安全加固(审计、网络、TLS、身份、权限、Unified Auditing、TDE)
Oracle难度: 高级耗时: 5 分钟(审计)– 4 小时(完整加固)这不是安装指南:用于发现并修复运行中的 Oracle 19c / 23ai (26ai) 数据库(单实例、Oracle Restart 或 RAC;CDB/PDB)的安全漏洞。先用只读的状态审计按严重程度列出漏洞,并说明每项发现对应哪张卡片;然后逐个领域或按顺序全部修复:listener 和 TCP.VALIDNODE_CHECKING、防火墙、TCPS (wallet) 或 native network encryption、12C 口令验证器和 profile、锁定默认账户、角色设计及收回 PUBLIC 的 UTL_* 权限、Unified Auditing 与 AUDSYS 清理、TDE、加密备份、操作系统以及 RU 跟踪。TDE 以及 RMAN/Data Pump 加密需要 Advanced Security 许可;其余全部无需额外许可。最后再次运行审计。
架构: 单实例 / Oracle Restart / RAC(2–8 节点),CDB + PDB;应用服务器(客户端验证)
场景
- 状态审计:我有哪些安全漏洞?(只读) — 首先运行的扫描:默认口令账户和未锁定账户、旧口令验证器、profile、DBA/ANY 权限、对 PUBLIC 开放的 UTL_ PL/SQL package、审计、TDE、未加密会话、listener 和文件权限;不做任何修改。
- 完整加固(按顺序全部执行) — 新安装或从未加固过的数据库:按安全顺序应用所有领域;listener 和数据库会重启一两次(需要维护窗口)。
- 网络与连接:谁能从哪里连接?(listener、TCP.VALIDNODE_CHECKING、防火墙) — listener 对所有地址开放,未定义 invited nodes,1521/5500 对所有人开放。listener 会重启(已有会话不受影响)。
- 加密连接(TCPS wallet 或 native network encryption) — 网络流量未加密;使用 TLS(TCPS、wallet、证书、客户端 SSL_SERVER_DN_MATCH)或无需证书的 native encryption (SQLNET.ENCRYPTION_SERVER=REQUIRED)。两种方式都无需额外许可;listener 会重启,已有会话不受影响。
- 身份验证与口令(12C 验证器、profile、默认账户) — 10G/11G 口令验证器、没有口令 profile、默认口令账户或示例账户未锁定;个人 DBA 账户。无需停机。
- 最小权限:角色、PUBLIC 和应用账户 — 应用账户拥有 DBA/RESOURCE/ANY 权限,UTL_FILE/UTL_TCP/UTL_HTTP 对 PUBLIC 开放;schema owner、读/写角色和权限报告。无需停机。
- 审计:谁做了什么?(Unified Auditing、AUDSYS 清理) — 审计人员要求提供登录、账户和 schema 变更记录;unified audit 策略、按保留期清理 AUDSYS,以及把记录发送到 syslog/集中平台。Unified Auditing 无需额外许可。
- 加密磁盘上的数据 (TDE) — 使用 TDE 防止数据文件、备份或磁盘副本被读取:WALLET_ROOT、keystore、master key、表空间加密(online)。需要 Advanced Security 许可;设置 WALLET_ROOT 需重启一次。
- 备份安全(RMAN 加密、免口令自动化、权限) — RMAN/Data Pump 备份未加密,脚本中有明文口令,备份目录对所有人开放;RMAN encryption、ENCRYPTION_PWD_PROMPT、wallet (SEPS) 和目录权限。RMAN 和 Data Pump 加密需要 Advanced Security 许可。
- 操作系统层面(oracle 账户、文件权限、core dump、SELinux) — oracle 账户可用口令登录,口令文件/network admin/wallet 权限过宽,SELinux 已关闭。core dump 限制在新会话/重启后生效。
- 补丁与版本:我是否在最新 RU 上? — 已安装的 RU、datapatch 状态和支持时间表;应用补丁时链接到 RU 补丁指南。只读。
开始之前
- oracle 用户的 profile 中定义了 ORACLE_HOME=…、ORACLE_SID…(按节点对应的实例名)… 和 PATH;sqlplus / as sysdba 无需口令(操作系统认证)即可运行。各步骤用 sudo -iu oracle 在 login shell 中运行,会加载 profile。… listener 由 Grid Infrastructure home (…) 以 … 管理。… 如果输出中的中文显示为 ?,在 profile 中加入 export NLS_LANG=AMERICAN_AMERICA.AL32UTF8(只影响显示;不影响数据)。
- 服务器上打开了两个独立会话;其中一个保持 sqlplus / as sysdba 打开。本地 / as sysdba (bequeath) 连接不受 listener、sqlnet.ora 网络规则和 profile 影响:listener、invited nodes 或加密出错时,它始终是退路。每个收紧访问的步骤之后,在另一个会话中(从应用服务器)测试新连接。
- 维护窗口:listener 会重启(新连接会被拒绝几秒钟,已有会话不受影响)…;TDE 的 WALLET_ROOT 和审计的 UNIFIED_AUDIT_SYSTEMLOG 是静态参数,需要重启数据库…。… RAC 中数据库可以逐节点 (rolling) 重启:srvctl stop instance -db … -node <node> / start。…
- TDE、RMAN 备份加密和 Data Pump 加密需要 Oracle Advanced Security 许可(Enterprise Edition + 附加许可;Oracle Cloud / Exadata Cloud 中已包含)。没有许可时不要执行这些步骤;改用磁盘级加密 (LUKS) 或存储加密。Native Network Encryption 和 TLS 在所有版本中均无需额外许可(自 11gR2 起)。
- 连接数据库的应用、Data Guard/OEM/备份服务器的地址列表及客户端版本。审计步骤会显示当前会话。
- 有最新且经过恢复验证的 RMAN 备份(RMAN 备份策略)。TDE 之前的备份不需要 keystore 即可打开:TDE 之后,没有 keystore 备份就无法打开新备份。
指南阶段
- 状态审计(只读) — 列出数据库内部的发现 · 审计操作系统和 Net 层面
- 开始之前:回退点 — 保存 Net 文件和参数 · 导出用户、profile 和权限
- 权限 — 1. 诊断 — 显示应用账户的权限和对 PUBLIC 开放的 PL/SQL package
- 权限 — 2. 安全网 — 查找依赖 PUBLIC 权限的对象
- 权限 — 3. 应用 — 创建 schema owner、角色和账户 · 向角色授予表权限 · 收回应用账户的多余权限 · 从 PUBLIC 收回 UTL_* 和危险 PL/SQL package 的权限 · 权限报告
- 权限 — 4. 验证 — 验证应用账户的有效权限 · 从应用服务器测试 DDL
- 身份 — 1. 诊断 — 显示账户状态、验证器和 profile
- 身份 — 2. 安全网 — 检查客户端版本
- 身份 — 3. 应用 — 锁定默认口令账户、示例账户和不用的 Oracle 账户 · 创建口令 profile · 加固 CDB root 中的 DEFAULT profile · 强制使用 12C 口令验证器 (sqlnet.ora) · 为应用账户设置口令 · 创建个人 DBA 账户 …
- 身份 — 4. 验证 — 验证账户和验证器状态 · 从应用服务器测试登录(新会话)
- 网络加密 — 1. 诊断 — 显示会话的加密状态
- 网络加密 — 3. 应用 — 强制启用 native network encryption · 创建服务器 wallet · 把 CA 返回的证书加入 wallet · 向 listener 属主开放 wallet…并复制到其他节点… · 写入 listener 的 TLS 设置 · 写入数据库 home 的 TLS 设置 …
- 网络加密 — 4. 验证 — 验证新连接已加密
- 网络加密 — 5. 后续 — 关闭未加密的 1521 并更新证书
- 网络 — 1. 诊断:谁从哪里连接? — 显示 listener 和连接来源
- 网络 — 3. 应用 — 让 listener 只接受允许的地址 (valid node checking) · 重启 listener · 在防火墙上只对允许的网络开放端口
- 网络 — 4. 验证 — 从应用服务器测试连接(新会话)
- 审计 — 1. 诊断 — 显示审计模式、策略和 AUDSYS 大小
- 审计 — 3. 应用 — 定义并启用审计策略 · 把 AUDSYS 迁到单独的表空间并定时清理 · 在 CDB root 中启用预置策略和清理 · 把审计摘要写入 syslog (UNIFIED_AUDIT_SYSTEMLOG) · rsyslog:把 local3 转发到集中服务器 · 重启 rsyslog 并重启数据库
- 审计 — 4. 验证 — 做一次修改并查看记录
- 操作系统 — 1. 诊断 — oracle 账户、文件权限、core dump 和 SELinux
- 操作系统 — 3. 应用 — 锁定 oracle 账户的口令 · 修正口令文件和 Net 文件的权限 · 关闭 oracle 用户的 core dump · 保持 SELinux 为 Enforcing
- 操作系统 — 4. 验证 — 验证修改
- TDE — 1. 诊断 — 显示 keystore 和表空间加密状态
- TDE — 2. 安全网 — TDE 之前的备份和空间检查
- TDE — 3. 应用 — 设置 WALLET_ROOT · 为 WALLET_ROOT 重启数据库 · 创建并打开 keystore,设置 master key · 把 keystore 复制到其他 RAC 节点 · 加密表空间 · 备份 keystore
- TDE — 4. 验证 — 验证 keystore 和加密表空间
- 备份 — 1. 诊断 — 显示 RMAN 加密设置和备份状态
- 备份 — 3. 应用 — 开启 RMAN 备份加密 · 测试加密备份 · 加密 Data Pump 导出 · 脚本的免口令连接 (Secure External Password Store) · 修正备份和 wallet 目录的权限
- 补丁与版本 — 1. 诊断 — 显示已安装的 RU 和 datapatch 状态