Skip to content

Oracle 权限审计

审计目的

  • 识别权限风险:发现过度授权、权限滥用等安全风险
  • 合规性检查:确保符合内部政策和法规要求
  • 权限优化:识别和清理不必要的权限
  • 安全事件调查:为安全事件提供审计线索
  • 权限变更跟踪:监控权限的变更情况

审计范围

  • 系统权限:数据库级别的权限
  • 对象权限:表、视图、过程等对象的权限
  • 角色权限:角色的创建、修改和分配
  • 用户权限:用户的权限分配和使用
  • 权限变更:权限的授予和撤销

权限审计方法

静态权限审计

系统权限审计

sql
-- 查看所有用户的系统权限
SELECT grantee, privilege
FROM dba_sys_privs
ORDER BY grantee, privilege;

-- 查看具有管理员权限的用户
SELECT grantee, privilege
FROM dba_sys_privs
WHERE privilege LIKE '%ADMIN%'
ORDER BY grantee;

-- 查看具有 DBA 角色的用户
SELECT grantee
FROM dba_role_privs
WHERE granted_role = 'DBA'
ORDER BY grantee;

对象权限审计

sql
-- 查看所有用户的对象权限
SELECT grantee, owner, table_name, privilege
FROM dba_tab_privs
ORDER BY grantee, owner, table_name;

-- 查看对敏感表的权限
SELECT grantee, owner, table_name, privilege
FROM dba_tab_privs
WHERE table_name IN ('EMPLOYEES', 'SALARIES', 'CREDIT_CARDS')
ORDER BY grantee, table_name;

角色权限审计

sql
-- 查看所有角色及其权限
SELECT role, privilege
FROM dba_sys_privs
WHERE grantee IN (SELECT role FROM dba_roles)
ORDER BY role, privilege;

-- 查看角色的对象权限
SELECT grantee, owner, table_name, privilege
FROM dba_tab_privs
WHERE grantee IN (SELECT role FROM dba_roles)
ORDER BY grantee, table_name;

-- 查看角色的角色权限
SELECT grantee, granted_role
FROM dba_role_privs
WHERE grantee IN (SELECT role FROM dba_roles)
ORDER BY grantee, granted_role;

动态权限审计

权限使用审计

  • 审计权限使用
    • 配置细粒度审计
    • 监控敏感权限的使用
    • 分析权限使用模式

权限变更审计

  • 审计权限变更
    • 监控权限的授予和撤销
    • 跟踪角色的创建和修改
    • 记录权限变更的时间和操作者

审计配置

标准审计配置

启用审计

sql
-- 查看当前审计设置
SHOW PARAMETER audit;

-- 启用审计
ALTER SYSTEM SET audit_trail=DB,EXTENDED SCOPE=SPFILE;
ALTER SYSTEM SET audit_sys_operations=TRUE SCOPE=SPFILE;

-- 重启数据库使配置生效
SHUTDOWN IMMEDIATE;
STARTUP;

配置审计策略

sql
-- 审计系统权限的授予和撤销
AUDIT GRANT, REVOKE ANY SYSTEM PRIVILEGE BY ACCESS;

-- 审计对象权限的授予和撤销
AUDIT GRANT, REVOKE ANY OBJECT PRIVILEGE BY ACCESS;

-- 审计角色的授予和撤销
AUDIT GRANT, REVOKE ANY ROLE BY ACCESS;

-- 审计 DBA 权限的使用
AUDIT ALL BY DBA BY ACCESS;

细粒度审计配置

创建细粒度审计策略

sql
-- 创建细粒度审计策略
BEGIN
  DBMS_FGA.ADD_POLICY(
    object_schema => 'HR',
    object_name => 'EMPLOYEES',
    policy_name => 'AUDIT_EMPLOYEES_SALARY',
    audit_condition => 'SALARY > 10000',
    audit_column => 'SALARY',
    handler_schema => NULL,
    handler_module => NULL,
    enable => TRUE,
    statement_types => 'SELECT, UPDATE',
    audit_trail => DBMS_FGA.DB+DBMS_FGA.EXTENDED
  );
END;
/

管理细粒度审计策略

sql
-- 查看细粒度审计策略
SELECT * FROM dba_audit_policies;

-- 禁用细粒度审计策略
BEGIN
  DBMS_FGA.DISABLE_POLICY(
    object_schema => 'HR',
    object_name => 'EMPLOYEES',
    policy_name => 'AUDIT_EMPLOYEES_SALARY'
  );
END;
/

-- 删除细粒度审计策略
BEGIN
  DBMS_FGA.DROP_POLICY(
    object_schema => 'HR',
    object_name => 'EMPLOYEES',
    policy_name => 'AUDIT_EMPLOYEES_SALARY'
  );
END;
/

权限检查与分析

权限风险检查

过度授权检查

sql
-- 检查具有 ALL PRIVILEGES 的用户
SELECT grantee
FROM dba_sys_privs
WHERE privilege = 'ALL PRIVILEGES'
ORDER BY grantee;

-- 检查具有 UNLIMITED TABLESPACE 的用户
SELECT grantee
FROM dba_sys_privs
WHERE privilege = 'UNLIMITED TABLESPACE'
ORDER BY grantee;

-- 检查具有 CREATE ANY TABLE 权限的用户
SELECT grantee
FROM dba_sys_privs
WHERE privilege = 'CREATE ANY TABLE'
ORDER BY grantee;

敏感权限检查

sql
-- 检查具有敏感系统权限的用户
SELECT grantee, privilege
FROM dba_sys_privs
WHERE privilege IN (
  'ALTER SYSTEM',
  'GRANT ANY PRIVILEGE',
  'GRANT ANY ROLE',
  'DROP ANY TABLE',
  'CREATE ANY PROCEDURE'
)
ORDER BY privilege, grantee;

-- 检查具有 DBA 角色的用户
SELECT grantee, granted_role, admin_option
FROM dba_role_privs
WHERE granted_role = 'DBA'
ORDER BY grantee;

权限使用分析

审计数据分析

sql
-- 查看审计数据
SELECT username, action_name, object_name, sql_text, timestamp
FROM dba_audit_trail
WHERE action_name IN ('GRANT', 'REVOKE')
ORDER BY timestamp DESC;

-- 分析权限使用模式
SELECT username, action_name, COUNT(*)
FROM dba_audit_trail
WHERE action_name LIKE '%PRIVILEGE%' OR action_name LIKE '%ROLE%'
GROUP BY username, action_name
ORDER BY COUNT(*) DESC;

权限使用频率分析

  • 分析方法
    • 收集权限使用的审计数据
    • 统计权限使用的频率
    • 识别不常用的权限
    • 评估权限的必要性

权限审计报告

审计报告内容

权限摘要报告

  • 系统权限摘要

    • 总权限数
    • 按用户分组的权限数
    • 敏感权限分布
  • 对象权限摘要

    • 按对象类型分组的权限数
    • 敏感对象的权限分布
    • 权限授予情况
  • 角色权限摘要

    • 角色数量
    • 角色权限分布
    • 角色分配情况

风险评估报告

  • 权限风险

    • 过度授权风险
    • 敏感权限风险
    • 权限管理风险
  • 合规性评估

    • 符合内部政策情况
    • 符合法规要求情况
    • 需要改进的方面

审计报告生成

自动报告生成

sql
-- 生成权限审计报告的脚本示例
SET PAGESIZE 100
SET LINESIZE 200
SPOOL privilege_audit_report.txt

PROMPT ===============================
PROMPT Oracle 权限审计报告
PROMPT 生成时间: &_DATE
PROMPT ===============================

PROMPT 
PROMPT 1. 系统权限摘要
PROMPT ====================
SELECT grantee, COUNT(*) AS privilege_count
FROM dba_sys_privs
GROUP BY grantee
ORDER BY privilege_count DESC;

PROMPT 
PROMPT 2. 具有 DBA 角色的用户
PROMPT ===========================
SELECT grantee
FROM dba_role_privs
WHERE granted_role = 'DBA'
ORDER BY grantee;

PROMPT 
PROMPT 3. 敏感系统权限
PROMPT ====================
SELECT grantee, privilege
FROM dba_sys_privs
WHERE privilege IN (
  'ALTER SYSTEM',
  'GRANT ANY PRIVILEGE',
  'GRANT ANY ROLE',
  'DROP ANY TABLE',
  'CREATE ANY PROCEDURE'
)
ORDER BY privilege, grantee;

SPOOL OFF

版本差异考虑

Oracle 11g 权限审计特点

  • 标准审计

    • 支持 DB、OS、XML 等审计模式
    • 审计数据存储在 SYS.AUD$ 表中
    • 细粒度审计功能
  • 审计限制

    • 审计数据可能增长过快
    • 审计对系统性能有一定影响
    • 审计配置相对复杂

Oracle 12c 权限审计特点

  • 统一审计

    • 引入统一审计架构
    • 审计数据存储在统一审计表中
    • 简化了审计配置
  • 增强的审计功能

    • 更细粒度的审计控制
    • 审计策略管理
    • 支持条件审计

Oracle 19c 权限审计特点

  • 进一步增强的审计

    • 审计性能优化
    • 更多预定义审计策略
    • 增强的审计数据管理
  • 云环境审计

    • 支持云环境的权限审计
    • 与云安全服务集成

生产环境最佳实践

权限审计策略

定期审计

  • 审计频率

    • 月度权限审计
    • 季度全面权限审计
    • 年度权限合规审计
  • 审计流程

    • 制定审计计划
    • 执行权限检查
    • 分析审计结果
    • 生成审计报告
    • 实施改进措施

实时监控

  • 监控重点

    • 权限变更监控
    • 敏感权限使用监控
    • 异常权限操作监控
  • 监控工具

    • Oracle Enterprise Manager
    • 第三方监控工具
    • 自定义监控脚本

权限管理最佳实践

最小权限原则

  • 实施方法

    • 仅授予必要的权限
    • 基于角色的权限管理
    • 定期审查权限
  • 验证方法

    • 权限使用分析
    • 权限必要性评估
    • 权限撤销测试

权限分离

  • 分离原则

    • 管理权限与普通权限分离
    • 数据访问权限与管理权限分离
    • 开发权限与生产权限分离
  • 实施方法

    • 建立权限管理角色
    • 实施职责分离
    • 定期审查权限分离情况

审计数据管理

审计数据存储

  • 存储配置
    • 为审计表配置单独的表空间
    • 启用审计表分区
    • 监控审计表空间使用情况

审计数据清理

sql
-- 清理过期的审计数据
DELETE FROM aud$ WHERE timestamp < SYSDATE - 90;
COMMIT;

-- 对于统一审计
DELETE FROM unified_audit_trail WHERE event_timestamp < SYSDATE - 90;
COMMIT;

审计数据备份

  • 备份策略
    • 定期备份审计数据
    • 确保备份数据的安全性
    • 测试备份数据的可恢复性

常见问题(FAQ)

Q1: 如何识别过度授权的用户?

A1: 识别过度授权用户的方法:

  • 检查具有 ALL PRIVILEGES 的用户
  • 检查具有 UNLIMITED TABLESPACE 权限的用户
  • 检查具有多个管理员权限的用户
  • 分析用户权限与实际需求的匹配度
  • 比较用户权限与同角色其他用户的权限

Q2: 如何审计敏感数据的访问权限?

A2: 审计敏感数据访问权限的方法:

  • 使用细粒度审计(FGA)监控敏感列的访问
  • 配置针对敏感表的权限审计
  • 监控敏感数据的 SELECT、UPDATE 操作
  • 分析敏感数据访问的审计记录
  • 定期审查敏感数据的权限分配

Q3: 如何监控权限的变更?

A3: 监控权限变更的方法:

  • 启用标准审计中的权限变更审计
  • 配置针对 GRANT 和 REVOKE 操作的审计
  • 使用 Oracle Enterprise Manager 监控权限变更
  • 定期检查权限变更的审计记录
  • 实施权限变更的审批流程

Q4: 如何评估权限的必要性?

A4: 评估权限必要性的方法:

  • 分析权限的使用频率
  • 检查权限的使用历史
  • 评估用户的工作职责
  • 参考行业最佳实践
  • 进行权限使用测试

Q5: 如何处理审计数据增长过快的问题?

A5: 处理审计数据增长过快的问题:

  • 配置合理的审计范围,避免过度审计
  • 为审计表配置单独的表空间
  • 启用审计表分区
  • 制定审计数据清理策略
  • 定期备份和清理过期的审计数据

Q6: 如何确保权限审计的有效性?

A6: 确保权限审计有效性的措施:

  • 制定明确的权限审计策略
  • 定期执行权限审计
  • 结合静态和动态审计方法
  • 分析审计结果并采取行动
  • 持续改进权限管理流程

Q7: 如何在云环境中进行权限审计?

A7: 在云环境中进行权限审计的方法:

  • 利用云服务提供商的审计工具
  • 配置云环境的权限审计策略
  • 监控云数据库的权限变更
  • 与云安全服务集成
  • 定期审查云环境的权限配置