外观
Oracle 安全初始化配置
安装前安全准备
系统安全加固
操作系统安全
- 更新系统补丁:安装最新的操作系统补丁
- 禁用不必要的服务:关闭不需要的系统服务
- 配置防火墙:限制网络访问,只开放必要的端口
- 启用 SELinux/AppArmor:在 Linux 系统上启用强制访问控制
用户和权限
- 创建专用 Oracle 用户:使用非 root 账户安装和运行 Oracle
- 设置强密码:为 Oracle 用户设置复杂密码
- 限制用户权限:Oracle 用户只拥有必要的系统权限
- 禁用默认账户:禁用或删除不必要的系统账户
文件系统安全
- 设置正确的文件权限:确保 Oracle 文件和目录有适当的权限
- 使用加密文件系统:对敏感数据使用加密文件系统
- 分离存储:将数据文件、日志文件和备份文件存储在不同的磁盘上
- 启用文件系统审计:监控文件系统的访问和更改
网络安全配置
网络隔离
- 使用专用网络:为数据库服务器使用专用网络
- 配置 VLAN:使用 VLAN 隔离数据库流量
- 实施网络分段:将数据库网络与其他网络分离
防火墙配置
- 限制入站连接:只允许必要的 IP 地址访问数据库端口
- 限制出站连接:控制数据库服务器的出站流量
- 配置端口转发:如需远程访问,使用端口转发而非直接开放端口
- 启用状态检测:使用状态检测防火墙过滤流量
网络加密
- 配置 SSL/TLS:为数据库连接启用 SSL/TLS 加密
- 使用 VPN:对于远程管理,使用 VPN 连接
- 禁用明文传输:确保所有网络传输都经过加密
存储安全配置
存储加密
- 使用存储级加密:如 TDE (Transparent Data Encryption)
- 配置加密算法:选择强加密算法,如 AES-256
- 管理加密密钥:建立安全的密钥管理流程
存储访问控制
- 限制存储访问:只允许 Oracle 用户访问数据存储
- 设置文件系统权限:确保数据文件有适当的权限
- 监控存储访问:审计存储访问活动
存储备份
- 定期备份:建立定期备份策略
- 备份加密:加密备份数据
- 备份验证:定期验证备份的完整性
- 异地存储:将备份存储在异地,防止灾难导致数据丢失
用户和权限规划
用户分类
- 管理员用户:数据库管理员,拥有最高权限
- 应用程序用户:应用程序连接数据库使用的用户
- 普通用户:具有有限权限的用户
- 审计用户:专门用于审计的用户
权限规划
- 最小权限原则:用户只拥有完成任务所需的最小权限
- 基于角色的权限管理:使用角色管理权限,简化权限分配
- 权限分离:将管理权限分配给不同的用户,避免权限集中
- 定期权限审查:定期审查用户权限,移除不必要的权限
认证方式规划
- 密码认证:使用强密码策略
- 操作系统认证:在可信环境中使用
- 外部认证:如 LDAP、RADIUS 或 Kerberos
- 多因素认证:为敏感操作启用多因素认证
安装过程中的安全配置
选择安全的安装选项
安装类型选择
- 最小化安装:只安装必要的组件,减少攻击面
- 自定义安装:根据需要选择组件,避免安装不必要的功能
- 企业版安装:如需高级安全功能,选择企业版
安装目录安全
- 选择安全的安装目录:避免使用默认目录,减少被攻击的风险
- 设置适当的权限:确保安装目录有正确的权限
- 分离 Oracle 主目录:将 Oracle 主目录与数据目录分离
安全更新配置
- 启用安全更新:配置 Oracle 接收安全更新
- 设置 My Oracle Support 账户:用于接收安全通知和补丁
- 配置自动更新:如需自动应用安全补丁,配置自动更新
配置数据库管理员密码
SYS 和 SYSTEM 密码
- 设置强密码:使用复杂密码,包含大小写字母、数字和特殊字符
- 不同密码:为 SYS 和 SYSTEM 使用不同的密码
- 定期更换:建立密码定期更换策略
- 安全存储:使用密码管理工具存储管理员密码
密码文件配置
- 创建密码文件:用于远程 SYSDBA 访问
- 设置密码文件权限:确保密码文件有适当的权限
- 限制密码文件访问:只允许授权用户访问密码文件
选择合适的认证方式
数据库认证
- 密码认证:默认认证方式,使用数据库存储的密码
- 密码复杂性验证:启用密码复杂性检查
- 密码过期策略:设置密码过期时间
操作系统认证
- 适用场景:在可信的服务器环境中
- 配置方法:将用户添加到 dba 组
- 安全考虑:确保操作系统账户的安全
外部认证
- LDAP 认证:集成企业 LDAP 目录服务
- Kerberos 认证:使用 Kerberos 进行网络认证
- RADIUS 认证:使用 RADIUS 进行远程认证
配置网络安全选项
监听器配置
- 设置监听器密码:防止未授权的监听器管理
- 限制监听器访问:只允许授权 IP 访问监听器
- 配置监听器日志:启用详细的监听器日志
- 使用非默认端口:如需增强安全性,使用非默认端口
网络加密
- 启用 SSL/TLS:为数据库连接启用 SSL/TLS
- 配置加密算法:选择强加密算法
- 验证服务器证书:确保客户端验证服务器证书
- 配置客户端认证:如需双向认证,配置客户端证书
连接限制
- 设置连接超时:防止连接挂起和资源耗尽
- 限制并发连接数:防止 DoS 攻击
- 配置连接速率限制:防止暴力破解攻击
安装后的安全初始化
密码策略配置
密码复杂性验证
启用密码验证函数:
sqlALTER PROFILE default LIMIT PASSWORD_VERIFY_FUNCTION ora12c_verify_function;自定义密码验证函数:如需更严格的密码策略,创建自定义验证函数
密码过期策略
设置密码有效期:
sqlALTER PROFILE default LIMIT PASSWORD_LIFE_TIME 90;设置密码 grace 期:
sqlALTER PROFILE default LIMIT PASSWORD_GRACE_TIME 7;
密码重用限制
设置密码重用时间:
sqlALTER PROFILE default LIMIT PASSWORD_REUSE_TIME 365;设置密码重用次数:
sqlALTER PROFILE default LIMIT PASSWORD_REUSE_MAX UNLIMITED;
失败登录尝试限制
设置失败登录尝试次数:
sqlALTER PROFILE default LIMIT FAILED_LOGIN_ATTEMPTS 5;设置账户锁定时间:
sqlALTER PROFILE default LIMIT PASSWORD_LOCK_TIME 1;
密码大小写敏感
启用密码大小写敏感:
sqlALTER SYSTEM SET sec_case_sensitive_logon = TRUE SCOPE = SPFILE;重启数据库:使设置生效
用户和权限管理
移除默认账户
锁定和过期默认账户:
sqlALTER 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 命令
移除示例数据
- 删除示例 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;
- 删除示例 schema:
创建最小权限用户
应用程序用户:
sqlCREATE USER app_user IDENTIFIED BY "StrongPassword123!"; GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW TO app_user;只读用户:
sqlCREATE USER readonly_user IDENTIFIED BY "ReadOnlyPassword123!"; GRANT CREATE SESSION TO readonly_user;
角色管理
创建自定义角色:
sqlCREATE ROLE app_role; GRANT SELECT, INSERT, UPDATE, DELETE ON app_schema.app_table TO app_role; GRANT app_role TO app_user;管理默认角色:限制默认角色的使用,只授予必要的角色
权限回收
回收不必要的权限:
sqlREVOKE DROP ANY TABLE FROM user; REVOKE ALTER ANY USER FROM user;定期审查权限:使用数据字典视图审查用户权限
审计配置
启用审计
设置审计级别:
sqlALTER SYSTEM SET audit_trail = 'DB, EXTENDED' SCOPE = SPFILE;重启数据库:使设置生效
配置审计策略
审计管理员操作:
sqlAUDIT ALL BY SYS BY ACCESS; AUDIT ALL BY SYSTEM BY ACCESS;审计权限变更:
sqlAUDIT ALTER USER, CREATE USER, DROP USER BY ACCESS; AUDIT GRANT, REVOKE BY ACCESS;审计数据访问:
sqlAUDIT SELECT, INSERT, UPDATE, DELETE ON sensitive_schema.sensitive_table BY ACCESS;
审计日志管理
- 设置审计日志大小:防止审计日志过大
- 定期归档审计日志:避免审计日志填满表空间
- 保护审计日志:确保审计日志的安全性和完整性
- 限制审计日志访问:只允许授权用户访问审计日志
网络安全配置
监听器安全
设置监听器密码:
sqllsnrctl set password限制监听器访问:在 sqlnet.ora 中配置:
txttcp.validnode_checking = YES tcp.invited_nodes = (192.168.1.0/24, dbserver)禁用外部过程:如需增强安全性,禁用外部过程
SQL*Net 安全
启用连接加密:在 sqlnet.ora 中配置:
txtSQLNET.ENCRYPTION_SERVER = REQUIRED SQLNET.ENCRYPTION_TYPES_SERVER = (AES256, AES192, AES128) SQLNET.CRYPTO_CHECKSUM_SERVER = REQUIRED SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER = (SHA256, SHA1)设置连接超时:
txtSQLNET.INBOUND_CONNECT_TIMEOUT = 60 SQLNET.OUTBOUND_CONNECT_TIMEOUT = 30 SQLNET.EXPIRE_TIME = 10
防火墙配置
- 限制数据库端口访问:只允许授权 IP 访问 1521 端口
- 使用专用网络:为数据库使用专用网络
- 配置 VPN:如需远程访问,使用 VPN
数据加密配置
透明数据加密 (TDE)
配置 TDE 主密钥:
sqlALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "MasterKeyPassword123!";加密表空间:
sqlCREATE TABLESPACE encrypted_ts DATAFILE '/path/to/encrypted.dbf' SIZE 100M ENCRYPTION USING 'AES256' DEFAULT STORAGE(ENCRYPT);加密现有表:
sqlALTER TABLE sensitive_table MODIFY (column1 ENCRYPT, column2 ENCRYPT);
网络数据加密
配置 SSL/TLS:
- 创建或获取 SSL 证书
- 配置 Oracle Wallet
- 修改 listener.ora 和 sqlnet.ora
使用 TCPS 协议:在 tnsnames.ora 中配置 TCPS 连接
密码加密
启用密码大小写敏感:
sqlALTER SYSTEM SET sec_case_sensitive_logon = TRUE SCOPE = SPFILE;配置密码哈希算法:使用 Oracle 推荐的密码哈希算法
安全补丁管理
补丁评估
- 定期检查补丁:关注 Oracle 安全公告
- 评估补丁影响:分析补丁对系统的影响
- 制定补丁计划:根据业务需求和安全风险制定补丁计划
补丁应用
- 测试补丁:在测试环境中测试补丁
- 备份数据库:在应用补丁前备份数据库
- 应用补丁:使用 OPatch 工具应用补丁
- 验证补丁:确认补丁应用成功
补丁管理流程
- 建立补丁管理流程:包括评估、测试、应用和验证
- 文档化补丁过程:记录补丁应用的详细信息
- 监控补丁状态:确保所有系统都应用了必要的补丁
安全检查和验证
安全配置检查
数据库安全配置检查
- 使用 Oracle 安全评估工具:如 Oracle Database Security Assessment Tool (DBSAT)
- 检查用户和权限:使用数据字典视图检查用户权限
- 检查审计配置:确认审计已正确配置
- 检查密码策略:验证密码策略是否符合要求
网络安全检查
- 检查监听器配置:确认监听器安全配置
- 检查网络访问控制:验证防火墙规则和网络限制
- 测试网络加密:确认网络传输已加密
存储安全检查
- 检查文件权限:确认 Oracle 文件和目录权限正确
- 验证数据加密:确认 TDE 已正确配置
- 检查备份安全:确认备份已加密并安全存储
漏洞扫描
使用漏洞扫描工具
- Oracle 官方工具:如 Oracle Critical Patch Update (CPU) 扫描工具
- 第三方工具:如 Nessus、Qualys 等
- 内部扫描:使用企业内部的漏洞扫描工具
扫描范围
- 数据库服务器:扫描数据库服务器的漏洞
- 数据库实例:扫描数据库实例的漏洞
- 网络配置:扫描网络配置的漏洞
- 应用程序:扫描应用程序的漏洞
扫描频率
- 定期扫描:如每月或每季度进行一次完整扫描
- 补丁后扫描:应用补丁后进行扫描
- 变更后扫描:系统变更后进行扫描
- 按需扫描:根据安全事件或新漏洞公告进行扫描
安全审计
内部审计
- 定期安全审计:由内部安全团队进行审计
- 合规审计:根据法规要求进行合规审计
- 专项审计:针对特定安全问题进行审计
外部审计
- 第三方审计:由外部安全公司进行审计
- 认证审计:如 ISO 27001、SOC 2 等认证审计
- 监管审计:由监管机构进行的审计
审计内容
- 安全策略执行:检查安全策略的执行情况
- 权限管理:审查用户权限和访问控制
- 审计日志:检查审计日志的完整性和合规性
- 漏洞管理:审查漏洞的发现和修复情况
渗透测试
渗透测试计划
- 定义测试范围:明确测试的系统和应用
- 制定测试计划:包括测试方法、工具和时间表
- 获取授权:确保测试得到适当的授权
执行渗透测试
- 信息收集:收集系统和应用的信息
- 漏洞利用:尝试利用发现的漏洞
- 权限提升:尝试提升权限
- 数据访问:尝试访问敏感数据
测试报告
- 记录发现的问题:详细记录发现的安全问题
- 提供修复建议:针对发现的问题提供修复建议
- 验证修复:在修复后验证问题是否解决
安全最佳实践
最小权限原则
权限分配
- 按需分配:只授予用户完成任务所需的最小权限
- 基于角色:使用角色管理权限,简化权限分配
- 定期审查:定期审查用户权限,移除不必要的权限
特权账户管理
- 限制特权账户:减少特权账户的数量
- 使用审计:审计特权账户的活动
- 特权分离:将不同的管理职责分配给不同的账户
应用程序权限
- 应用程序专用账户:为每个应用程序使用专用账户
- 最小应用权限:应用程序账户只拥有必要的数据库权限
- 连接池:使用连接池管理数据库连接
定期安全评估
安全评估计划
- 制定评估计划:包括评估范围、方法和时间表
- 明确评估标准:根据法规和最佳实践确定评估标准
- 分配责任:明确评估的责任人和团队
评估内容
- 配置评估:检查安全配置是否符合最佳实践
- 漏洞评估:扫描系统和应用的漏洞
- 风险评估:评估安全风险的严重程度和可能性
- 合规评估:检查是否符合法规要求
评估频率
- 定期评估:如每季度或每年进行一次完整评估
- 变更后评估:系统变更后进行评估
- 事件后评估:安全事件后进行评估
安全事件响应
事件响应计划
- 制定响应计划:包括事件检测、响应和恢复
- 建立响应团队:组建安全事件响应团队
- 定义响应流程:明确事件响应的步骤和责任
事件检测
- 监控系统:部署安全监控系统
- 告警机制:建立安全事件告警机制
- 日志分析:定期分析安全日志
事件响应
- 快速响应:及时响应安全事件
- 隔离受影响系统:防止事件扩散
- 收集证据:收集事件相关的证据
- 实施修复:修复安全漏洞和问题
事件恢复
- 恢复系统:恢复受影响的系统和数据
- 验证修复:确认安全问题已解决
- 更新安全措施:根据事件经验更新安全措施
安全文档管理
安全策略文档
- 制定安全策略:包括密码策略、访问控制策略等
- 定期更新:根据业务需求和安全威胁更新策略
- 员工培训:确保员工了解和遵守安全策略
安全配置文档
- 记录安全配置:详细记录系统的安全配置
- 配置变更管理:管理安全配置的变更
- 配置基线:建立安全配置基线
安全事件文档
- 记录安全事件:详细记录安全事件的发生和处理
- 事件分析:分析安全事件的原因和影响
- 经验教训:总结安全事件的经验教训
合规文档
- 法规要求文档:记录适用的法规要求
- 合规证明:收集和维护合规证明文件
- 审计文档:准备和维护审计相关文档
常见问题(FAQ)
Q1: 如何安全地管理数据库管理员密码?
A1: 安全管理数据库管理员密码的方法:
- 使用密码管理工具:使用企业级密码管理工具存储管理员密码
- 定期更换密码:建立密码定期更换策略,如每 90 天更换一次
- 不同密码:为不同的管理员账户使用不同的密码
- 多因素认证:为管理员访问启用多因素认证
- 限制管理员访问:只允许从可信的网络和终端访问管理员账户
Q2: 如何防止 SQL 注入攻击?
A2: 防止 SQL 注入攻击的方法:
- 使用绑定变量:在应用程序中使用绑定变量,而非字符串拼接
- 最小权限:应用程序账户只拥有必要的权限
- 输入验证:在应用程序层面验证用户输入
- 使用存储过程:对于复杂操作,使用存储过程
- 审计:审计敏感表的访问和修改
Q3: 如何配置 Oracle 数据库的审计功能?
A3: 配置 Oracle 数据库审计功能的步骤:
启用审计:
sqlALTER SYSTEM SET audit_trail = 'DB, EXTENDED' SCOPE = SPFILE;重启数据库:使审计设置生效
配置审计策略:
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;管理审计日志:定期归档和清理审计日志
Q4: 如何保护敏感数据?
A4: 保护敏感数据的方法:
- 数据加密:使用 TDE 加密敏感数据
- 数据脱敏:对非生产环境中的敏感数据进行脱敏
- 访问控制:限制敏感数据的访问权限
- 审计:审计敏感数据的访问和修改
- 数据分类:对数据进行分类,根据分类实施不同的保护措施
Q5: 如何安全地应用 Oracle 补丁?
A5: 安全应用 Oracle 补丁的步骤:
- 评估补丁:分析补丁的必要性和影响
- 备份数据库:在应用补丁前备份数据库
- 测试补丁:在测试环境中测试补丁
- 应用补丁:使用 OPatch 工具应用补丁
- 验证补丁:确认补丁应用成功,系统正常运行
- 文档记录:记录补丁应用的详细信息
Q6: 如何检测和应对安全事件?
A6: 检测和应对安全事件的方法:
- 监控系统:部署安全监控系统,监控数据库活动
- 日志分析:定期分析数据库和系统日志
- 告警机制:建立安全事件告警机制
- 响应计划:制定安全事件响应计划
- 快速响应:及时响应安全事件,隔离受影响系统
- 恢复措施:实施修复和恢复措施
- 经验总结:分析事件原因,更新安全措施
Q7: 如何配置网络安全?
A7: 配置网络安全的方法:
- 防火墙配置:限制数据库端口的访问,只允许授权 IP
- 网络加密:启用 SSL/TLS 加密数据库连接
- 监听器安全:设置监听器密码,限制监听器访问
- 网络隔离:将数据库网络与其他网络隔离
- VPN 访问:对于远程访问,使用 VPN
Q8: 如何进行安全合规审计?
A8: 进行安全合规审计的步骤:
- 确定合规要求:明确适用的法规和标准
- 制定审计计划:包括审计范围、方法和时间表
- 收集证据:收集安全配置、审计日志等证据
- 评估合规性:根据合规要求评估系统的合规性
- 生成报告:生成合规审计报告,包括发现的问题和建议
- 实施改进:根据审计结果实施安全改进
- 定期审计:定期进行合规审计,确保持续合规
