外观
Oracle 安全配置检查
用户和权限管理检查
用户账户检查
检查内容
- 检查是否存在多余的管理员账户
- 检查是否存在默认账户或过期账户
- 检查账户锁定状态和密码策略
- 检查特权账户的使用情况
检查命令
sql
-- 检查所有用户账户
SELECT username, account_status, lock_date, expiry_date FROM dba_users;
-- 检查特权用户
SELECT grantee, granted_role FROM dba_role_privs WHERE granted_role IN ('DBA', 'SYSDBA', 'SYSOPER');
-- 检查默认账户状态
SELECT username, account_status FROM dba_users WHERE username IN ('SCOTT', 'ADAMS', 'JONES', 'CLARK', 'KING');
-- 检查密码策略
SELECT * FROM dba_profiles WHERE profile = 'DEFAULT' AND resource_type = 'PASSWORD';权限检查
检查内容
- 检查用户权限分配是否合理
- 检查角色权限是否过于宽松
- 检查系统权限和对象权限
- 检查权限继承情况
检查命令
sql
-- 检查用户系统权限
SELECT grantee, privilege FROM dba_sys_privs WHERE grantee NOT IN ('SYS', 'SYSTEM');
-- 检查用户对象权限
SELECT grantee, owner, table_name, privilege FROM dba_tab_privs WHERE grantee NOT IN ('SYS', 'SYSTEM');
-- 检查角色权限
SELECT role, privilege FROM dba_sys_privs WHERE grantee IN (SELECT role FROM dba_roles);
-- 检查权限继承
SELECT grantee, granted_role, admin_option FROM dba_role_privs;密码策略检查
检查内容
- 检查密码复杂度要求
- 检查密码过期设置
- 检查密码锁定设置
- 检查密码历史记录
检查命令
sql
-- 检查密码策略设置
SELECT resource_name, limit FROM dba_profiles WHERE profile = 'DEFAULT' AND resource_type = 'PASSWORD';
-- 检查密码文件权限
$ ls -la $ORACLE_HOME/dbs/orapw* # Linux/Unix
$ dir %ORACLE_HOME%\database\PWD* # Windows
-- 检查密码验证函数
SELECT * FROM dba_profiles WHERE profile = 'DEFAULT' AND resource_name = 'PASSWORD_VERIFY_FUNCTION';网络安全检查
监听器配置检查
检查内容
- 检查监听器是否配置了访问控制
- 检查监听器是否使用了加密
- 检查监听器日志配置
- 检查监听器状态和端口设置
检查命令
bash
# 检查监听器状态
$ lsnrctl status
# 检查监听器配置
$ lsnrctl show all
# 检查监听器访问控制配置
$ cat $ORACLE_HOME/network/admin/listener.ora
# 检查监听器日志
$ ls -la $ORACLE_BASE/diag/tnslsnr/*/listener/trace/网络连接检查
检查内容
- 检查网络服务名配置
- 检查SQL*Net加密设置
- 检查网络访问控制列表
- 检查防火墙设置
检查命令
bash
# 检查网络服务名配置
$ cat $ORACLE_HOME/network/admin/tnsnames.ora
# 检查SQL*Net参数文件
$ cat $ORACLE_HOME/network/admin/sqlnet.ora
# 检查网络访问控制
SELECT * FROM dba_network_acls;
# 检查数据库链接
SELECT owner, db_link, username FROM dba_db_links;加密设置检查
检查内容
- 检查透明数据加密(TDE)设置
- 检查网络传输加密设置
- 检查密码文件加密
- 检查备份加密设置
检查命令
sql
-- 检查TDE主密钥状态
SELECT * FROM v$encryption_wallet;
-- 检查表空间加密状态
SELECT tablespace_name, encrypted FROM dba_tablespaces;
-- 检查网络加密设置
SELECT parameter, value FROM v$parameter WHERE parameter LIKE '%encryption%';
-- 检查备份加密设置
RMAN> SHOW ENCRYPTION FOR DATABASE;审计和监控检查
审计设置检查
检查内容
- 检查审计是否启用
- 检查审计级别设置
- 检查审计日志配置
- 检查审计策略
检查命令
sql
-- 检查审计是否启用
SELECT value FROM v$parameter WHERE name = 'audit_trail';
-- 检查审计文件位置
SELECT value FROM v$parameter WHERE name = 'audit_file_dest';
-- 检查审计策略
SELECT policy_name, enabled FROM dba_audit_policies;
-- 检查审计日志大小和数量
$ ls -la $ORACLE_BASE/admin/*/adump/监控设置检查
检查内容
- 检查性能监控设置
- 检查告警设置
- 检查安全事件监控
- 检查系统资源监控
检查命令
sql
-- 检查性能监控设置
SELECT * FROM dba_hist_wr_control;
-- 检查告警设置
SELECT metric_name, warning_threshold, critical_threshold FROM dba_thresholds;
-- 检查安全事件
SELECT * FROM dba_audit_session ORDER BY timestamp DESC;
-- 检查系统资源使用情况
SELECT * FROM v$resource_limit;日志管理检查
检查内容
- 检查日志文件权限
- 检查日志轮转设置
- 检查日志保留策略
- 检查日志备份情况
检查命令
bash
# 检查告警日志权限
$ ls -la $ORACLE_BASE/diag/rdbms/*/*/trace/alert_*.log
# 检查审计日志权限
$ ls -la $ORACLE_BASE/admin/*/adump/
# 检查监听日志权限
$ ls -la $ORACLE_BASE/diag/tnslsnr/*/listener/trace/listener.log
# 检查日志空间使用情况
$ du -sh $ORACLE_BASE/diag/数据保护检查
表空间和数据文件检查
检查内容
- 检查表空间权限
- 检查数据文件权限和位置
- 检查临时表空间设置
- 检查撤销表空间设置
检查命令
sql
-- 检查表空间权限
SELECT tablespace_name, owner, privilege FROM dba_ts_quotas;
-- 检查数据文件位置和权限
SELECT name FROM v$datafile;
$ ls -la /path/to/datafiles/ # Linux/Unix
-- 检查临时表空间
SELECT tablespace_name, status FROM dba_tablespaces WHERE contents = 'TEMPORARY';
-- 检查撤销表空间
SELECT tablespace_name, status FROM dba_tablespaces WHERE contents = 'UNDO';敏感数据检查
检查内容
- 检查敏感数据存储位置
- 检查敏感数据加密情况
- 检查敏感数据访问控制
- 检查敏感数据审计
检查命令
sql
-- 查找可能包含敏感数据的表
SELECT owner, table_name, column_name FROM dba_tab_columns
WHERE column_name LIKE '%PASS%' OR column_name LIKE '%CRED%' OR column_name LIKE '%SSN%' OR column_name LIKE '%CARD%';
-- 检查敏感数据加密
SELECT owner, table_name, column_name, encryption_alg FROM dba_tab_cols WHERE encryption_alg IS NOT NULL;
-- 检查敏感数据访问控制
SELECT grantee, owner, table_name, privilege FROM dba_tab_privs
WHERE table_name IN (SELECT table_name FROM dba_tab_columns
WHERE column_name LIKE '%PASS%' OR column_name LIKE '%CRED%');备份安全检查
检查内容
- 检查备份文件权限
- 检查备份加密设置
- 检查备份访问控制
- 检查备份存储位置
检查命令
bash
# 检查备份文件权限
$ ls -la /path/to/backup/ # Linux/Unix
# 检查RMAN备份加密设置
RMAN> SHOW ENCRYPTION FOR DATABASE;
# 检查备份访问控制
$ find /path/to/backup -type f -perm /o+r -ls # 检查是否有其他用户可读的备份文件
# 检查备份保留策略
RMAN> SHOW RETENTION POLICY;补丁和更新管理检查
补丁状态检查
检查内容
- 检查数据库补丁级别
- 检查安全补丁安装情况
- 检查补丁历史记录
- 检查补丁兼容性
检查命令
sql
-- 检查数据库版本和补丁级别
SELECT * FROM v$version;
-- 检查补丁信息
SELECT * FROM dba_registry_history;
-- 检查安全补丁状态
$ opatch lsinventory # Linux/Unix
-- 检查OPatch版本
$ opatch version # Linux/Unix更新策略检查
检查内容
- 检查更新计划和流程
- 检查更新测试策略
- 检查更新回滚计划
- 检查更新文档
检查命令
bash
# 检查更新日志
$ cat update_log.txt # 假设有更新日志文件
# 检查补丁应用脚本
$ ls -la /path/to/patch/scripts/ # 检查是否有补丁应用脚本
# 检查更新计划文档
$ ls -la /path/to/update/plans/ # 检查是否有更新计划文档安全配置最佳实践
用户和权限管理
- 最小权限原则:只授予用户必要的权限
- 定期权限审查:定期检查和撤销不必要的权限
- 特权账户管理:严格控制SYSDBA等特权账户的使用
- 角色分离:实现职责分离,避免权限集中
- 密码管理:实施强密码策略,定期更改密码
网络安全
- 监听器安全:配置监听器访问控制和加密
- 网络加密:启用SQL*Net加密和数据传输加密
- 防火墙设置:配置防火墙限制数据库访问
- 网络访问控制:使用网络访问控制列表限制连接
- 端口安全:使用非默认端口,避免使用常用端口
审计和监控
- 全面审计:启用适当级别的审计
- 实时监控:实施实时安全事件监控
- 日志管理:定期归档和清理审计日志
- 告警机制:设置安全事件告警
- 定期检查:定期检查审计日志和安全事件
数据保护
- 数据加密:对敏感数据实施透明数据加密(TDE)
- 备份加密:启用备份加密保护备份数据
- 访问控制:实施细粒度的访问控制
- 数据脱敏:对非生产环境数据进行脱敏
- 定期备份:实施定期备份策略
补丁管理
- 及时更新:及时应用安全补丁
- 测试流程:在测试环境中验证补丁
- 回滚计划:制定补丁回滚计划
- 补丁跟踪:跟踪补丁应用情况和状态
- 合规性检查:确保符合行业合规要求
版本差异
Oracle 10g
- 提供基本的安全功能
- 支持审计和基本的密码策略
- 支持网络加密
- 安全功能相对有限
Oracle 11g
- 增强了审计功能
- 引入了透明数据加密(TDE)
- 提供了更强大的密码策略
- 引入了审计 vault
- 增强了网络安全功能
Oracle 12c及以上
- 引入了多租户架构的安全管理
- 增强了细粒度访问控制
- 提供了数据红action功能
- 引入了统一审计
- 增强了加密和密钥管理
常见问题(FAQ)
Q1: 如何检查Oracle数据库是否存在默认账户?
A1: 可以使用以下SQL语句检查默认账户:
sql
SELECT username, account_status FROM dba_users WHERE username IN ('SCOTT', 'ADAMS', 'JONES', 'CLARK', 'KING', 'MILLER', 'SYSTEM', 'SYS');对于SCOTT等示例账户,建议锁定或删除,只保留必要的系统账户。
Q2: 如何检查Oracle数据库的审计设置?
A2: 可以使用以下SQL语句检查审计设置:
sql
SELECT value FROM v$parameter WHERE name = 'audit_trail';
SELECT value FROM v$parameter WHERE name = 'audit_file_dest';
SELECT policy_name, enabled FROM dba_audit_policies;建议将audit_trail设置为DB或DB,EXTENDED,以启用数据库审计功能。
Q3: 如何检查Oracle监听器的安全配置?
A3: 可以使用以下命令检查监听器配置:
bash
$ lsnrctl status
$ cat $ORACLE_HOME/network/admin/listener.ora
$ cat $ORACLE_HOME/network/admin/sqlnet.ora建议配置监听器访问控制、使用非默认端口、启用监听器日志。
Q4: 如何检查Oracle数据库的密码策略?
A4: 可以使用以下SQL语句检查密码策略:
sql
SELECT resource_name, limit FROM dba_profiles WHERE profile = 'DEFAULT' AND resource_type = 'PASSWORD';建议设置强密码策略,包括密码复杂度、过期时间、锁定设置等。
Q5: 如何检查Oracle数据库的补丁级别?
A5: 可以使用以下命令检查补丁级别:
sql
SELECT * FROM v$version;在Linux/Unix系统上,还可以使用:
bash
$ opatch lsinventory建议及时应用安全补丁,保持数据库版本的安全性。
Q6: 如何检查Oracle数据库的网络加密设置?
A6: 可以使用以下SQL语句检查网络加密设置:
sql
SELECT parameter, value FROM v$parameter WHERE parameter LIKE '%encryption%';也可以检查sqlnet.ora文件:
bash
$ cat $ORACLE_HOME/network/admin/sqlnet.ora建议启用SQL*Net加密以保护网络传输的数据。
Q7: 如何检查Oracle数据库的敏感数据?
A7: 可以使用以下SQL语句查找可能包含敏感数据的表:
sql
SELECT owner, table_name, column_name FROM dba_tab_columns
WHERE column_name LIKE '%PASS%' OR column_name LIKE '%CRED%' OR column_name LIKE '%SSN%' OR column_name LIKE '%CARD%' OR column_name LIKE '%PHONE%' OR column_name LIKE '%EMAIL%';建议对敏感数据实施加密和访问控制。
Q8: 如何检查Oracle数据库的备份安全?
A8: 可以使用以下命令检查备份安全:
bash
$ ls -la /path/to/backup/ # 检查备份文件权限
RMAN> SHOW ENCRYPTION FOR DATABASE; # 检查备份加密设置
RMAN> SHOW RETENTION POLICY; # 检查备份保留策略建议启用备份加密,设置合理的备份保留策略,确保备份文件的安全存储。
Q9: 如何检查Oracle数据库的权限分配?
A9: 可以使用以下SQL语句检查权限分配:
sql
SELECT grantee, privilege FROM dba_sys_privs WHERE grantee NOT IN ('SYS', 'SYSTEM');
SELECT grantee, owner, table_name, privilege FROM dba_tab_privs WHERE grantee NOT IN ('SYS', 'SYSTEM');建议遵循最小权限原则,只授予用户必要的权限,并定期审查权限分配。
Q10: 如何检查Oracle数据库的安全事件?
A10: 可以使用以下SQL语句检查安全事件:
sql
SELECT * FROM dba_audit_session ORDER BY timestamp DESC;
SELECT * FROM dba_audit_trail WHERE action_name LIKE '%LOGON%' ORDER BY timestamp DESC;建议定期检查审计日志,监控异常的登录尝试和安全事件。
