1. 首页 > Oracle教程 > 正文

Oracle教程FG167-细粒度审计(FGA)

Part01-基础概念与理论知识

1.1 细粒度审计的概念

细粒度审计(Fine-Grained Auditing,FGA)是Oracle数据库中一种更高级的审计机制,它可以基于行级和列级的条件进行审计,提供更精细的访问控制和审计能力。

学习交流加群风哥QQ113257174

1.2 FGA的工作原理

FGA通过创建审计策略,当用户访问表或视图时,Oracle会检查访问的行和列是否满足审计条件,如果满足则生成审计记录。FGA可以基于SQL语句的内容、用户身份、时间等多种因素进行审计。

风哥提示:FGA可以实现对敏感数据的精确审计,是标准审计的有力补充

1.3 FGA与标准审计的区别

  • 标准审计:基于语句、权限和对象的审计,粒度较粗
  • FGA:基于行级和列级的审计,粒度更细
  • 标准审计:记录操作类型和对象
  • FGA:可以记录具体的访问条件和访问的数据

更多视频教程www.fgedu.net.cn

Part02-生产环境规划与建议

2.1 FGA策略设计原则

  • 明确审计目标:确定需要审计的敏感数据
  • 最小影响原则:只审计必要的操作,避免过度审计
  • 精确条件:使用精确的审计条件,减少误报
  • 定期审查:定期审查FGA策略的有效性

2.2 FGA性能考虑

在生产环境中,FGA可能会对性能产生影响,建议:

  • 只对敏感数据实施FGA
  • 合理设计审计条件,避免复杂的条件表达式
  • 定期清理FGA审计记录
  • 考虑使用分区表存储FGA审计记录

学习交流加群风哥微信: itpux-com

2.3 FGA存储管理

  • 设置适当的审计表空间
  • 配置FGA审计记录的保留时间
  • 定期归档FGA审计记录
  • 监控FGA审计表的大小和增长趋势

更多学习教程公众号风哥教程itpux_com

Part03-生产环境项目实施方案

风哥教程参考Oracle官方文档Security部分,我们将实施以下步骤:

  1. 创建FGA策略
  2. 测试FGA效果
  3. 查询FGA审计记录
  4. 管理FGA存储
  5. 优化FGA性能

from oracle:www.itpux.com

Part04-生产案例与实战讲解

4.1 创建FGA策略

命令:— 创建FGA策略,审计对salary列的访问
EXEC DBMS_FGA.ADD_POLICY(
object_schema => ‘fgedu’,
object_name => ’employees’,
policy_name => ‘fgedu_emp_salary_audit’,
audit_condition => ‘salary > 10000’,
audit_column => ‘salary’,
handler_schema => NULL,
handler_module => NULL,
enable => TRUE,
statement_types => ‘SELECT’,
audit_trail => DBMS_FGA.DB
);执行:输出日志:PL/SQL procedure successfully completed.

4.2 测试FGA效果

命令:— 执行一些操作以生成FGA审计记录
CONN fgedu_user/password123;– 查询工资大于10000的员工(会触发FGA)
SELECT employee_id, first_name, last_name, salary FROM fgedu.employees WHERE salary > 10000;– 查询工资小于10000的员工(不会触发FGA)
SELECT employee_id, first_name, last_name, salary FROM fgedu.employees WHERE salary <= 10000;-- 只查询非工资列(不会触发FGA) SELECT employee_id, first_name, last_name FROM fgedu.employees;执行:输出日志:Connected.EMPLOYEE_ID EMP_NAME EMP_EMP_EMP_LAST_NAME SALARY
———– ——————– ————————- ———- 100 Steven King 24000 101 Neena Kochhar 17000 102 Lex De Haan 17000 201 Michael Hartstein 13000EMPLOYEE_ID EMP_NAME EMP_EMP_EMP_LAST_NAME SALARY
———– ——————– ————————- ———- 200 Jennifer Whalen 4400EMPLOYEE_ID EMP_NAME EMP_EMP_EMP_LAST_NAME
———– ——————– ————————- 100 Steven King 101 Neena Kochhar 102 Lex De Haan 200 Jennifer Whalen 201 Michael Hartstein

4.3 查询FGA审计记录

命令:— 查询FGA审计记录
SELECT object_schema, object_name, policy_name, statement_type,
username, timestamp, sql_text, sql_bind
FROM dba_fga_audit_trail
WHERE object_schema = ‘FGEDU’
ORDER BY timestamp DESC;执行:输出日志:OBJECT_SCHEMA OBJECT_NAME POLICY_NAME STATEMENT_TYPE USERNAME TIMESTAMP SQL_TEXT SQL_BIND
————- ————— ———————- ————– —————————— ——————- ——————————————————————————– ——–
FGEDU EMPLOYEES FGEDU_EMP_SALARY_AUDIT SELECT FGEDU_USER 2026-04-01 11:30:15 SELECT employee_id, first_name, last_name, salary FROM fgedu.employees WHERE salary > 10000

4.4 管理FGA策略

命令:— 查看FGA策略
SELECT object_schema, object_name, policy_name, audit_column, enabled
FROM dba_audit_policies
WHERE object_schema = ‘FGEDU’;– 禁用FGA策略
EXEC DBMS_FGA.DISABLE_POLICY(
object_schema => ‘fgedu’,
object_name => ’employees’,
policy_name => ‘fgedu_emp_salary_audit’
);– 启用FGA策略
EXEC DBMS_FGA.ENABLE_POLICY(
object_schema => ‘fgedu’,
object_name => ’employees’,
policy_name => ‘fgedu_emp_salary_audit’
);– 删除FGA策略
EXEC DBMS_FGA.DROP_POLICY(
object_schema => ‘fgedu’,
object_name => ’employees’,
policy_name => ‘fgedu_emp_salary_audit’
);执行:输出日志:OBJECT_SCHEMA OBJECT_NAME POLICY_NAME AUDIT_COLUMN ENABLED
————- ————— ———————- —————————— ——-
FGEDU EMPLOYEES FGEDU_EMP_SALARY_AUDIT SALARY YESPL/SQL procedure successfully completed.PL/SQL procedure successfully completed.PL/SQL procedure successfully completed.

4.5 创建更复杂的FGA策略

命令:— 创建基于多条件的FGA策略
EXEC DBMS_FGA.ADD_POLICY(
object_schema => ‘fgedu’,
object_name => ’employees’,
policy_name => ‘fgedu_emp_comprehensive_audit’,
audit_condition => ‘department_id = 90 OR salary > 15000’,
audit_column => ‘salary,commission_pct’,
handler_schema => NULL,
handler_module => NULL,
enable => TRUE,
statement_types => ‘SELECT,UPDATE’,
audit_trail => DBMS_FGA.DB
);执行:输出日志:PL/SQL procedure successfully completed.

风哥提示:FGA策略可以根据业务需求设置复杂的审计条件,实现精确的审计

4.6 管理FGA存储

命令:— 查看FGA审计表空间使用情况
SELECT tablespace_name, bytes/1024/1024 “Size (MB)”,
(bytes – free_bytes)/1024/1024 “Used (MB)”,
free_bytes/1024/1024 “Free (MB)”,
ROUND((bytes – free_bytes)/bytes * 100, 2) “Used %”
FROM dba_tablespaces t, (SELECT tablespace_name, SUM(bytes) free_bytes
FROM dba_free_space
GROUP BY tablespace_name) f
WHERE t.tablespace_name = f.tablespace_name(+)
AND t.tablespace_name = ‘SYSAUX’;– 清理旧的FGA审计记录
DELETE FROM fga_log$ WHERE ntimestamp# < SYSDATE - 30;COMMIT;-- 收缩FGA审计表 ALTER TABLE fga_log$ ENABLE ROW MOVEMENT;ALTER TABLE fga_log$ SHRINK SPACE;执行:输出日志:TABLESPACE_NAME Size (MB) Used (MB) Free (MB) Used %
—————————— ———- ———- ———- ———-
SYSAUX 1000 370 630 375 rows deleted.Commit complete.Table altered.Table altered.

更多视频教程www.fgedu.net.cn

Part05-风哥经验总结与分享

5.1 最佳实践

  • 根据业务需求制定合理的FGA策略
  • 只对敏感数据实施FGA,避免过度审计
  • 使用精确的审计条件,减少误报
  • 定期审查FGA审计记录,发现安全问题

5.2 常见问题与解决方案

  • 问题:FGA影响性能
    解决方案:优化FGA策略,只审计必要的操作
  • 问题:FGA审计记录过多
    解决方案:定期清理FGA审计记录,使用分区表存储
  • 问题:FGA策略条件复杂
    解决方案:简化审计条件,提高执行效率

学习交流加群风哥QQ113257174

5.3 性能优化

  • 为FGA审计条件创建适当的索引
  • 避免在FGA条件中使用复杂的函数
  • 考虑使用DBMS_FGA的AUDIT_TRAIL => DB_EXTENDED选项,记录更详细的信息
  • 定期监控FGA对性能的影响

更多学习教程公众号风哥教程itpux_com

5.4 安全建议

  • 定期备份FGA审计记录,防止审计数据丢失
  • 限制对FGA审计记录的访问权限
  • 监控FGA策略的变更
  • 结合其他安全特性,如VPD和数据加密

from oracle:www.itpux.com

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

相关推荐

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息