当前位置: 首页 > news >正文

瀚高数据库安全版审计查询方法

文章目录

  • 环境
  • 文档用途
  • 详细信息

环境

系统平台:N/A
版本:4.5.8

文档用途

本文档基于HGDB-see-4.5.8,适用于全平台。

文档用途:

  1. 如何导入审计日志

  2. 如何查询对应的审计记录

(不包含审计参数详解、以及如何配置对应审计策略等)

详细信息

一 审计的作用
1.1 开启审计有什么意义?
发现安全问题:可以有效发现未经授权的访问、数据泄露、数据篡改等安全问题。

辅助安全管理:数据库审计能够评估和优化安全策略,发现并修补访问权限等漏洞,监督员工的安全意识和行为,从而提高整体的安全水平。

合规性审计:许多行业监管机构要求企业按照相关的法规和标准对数据库进行审计。

追溯与审计追踪:记录和追踪数据库操作的历史记录对于审计数据的变更历史、完整性和解决纠纷具有重要意义。

防止数据进一步泄露:通过审计数据库,可以及时进行数据泄露事件的事后追查,保护敏感信息和客户数据。

1.2 日常使用场景

  1. 满足合规性要求,现场测试审计功能是否可用

  2. 数据遭到错误修改,需要排查修改原因或修改人员

  3. 数据遭到泄露,需要追查某一时间段访问该数据库的请求信息

1.3 本文档示例中的开启审计步骤
(注意:本文档不进行开启审计日志以及审计相关参数的解释)

  1. 开启审计
select set_audit_param('hg_audit','on');

2.重启数据库

pg_ctl restart
  1. 对数据库添加审计策略:
audit all by all;

二 审计日志的查询步骤
2.1 明确日期范围
实际情况中,一般会将审计日志保留几个月到几年不等,

  1. 假如需要查询审计记录的日期较为久远,则无法查询。

  2. 假如查询的时间跨度较大,需要导入的审计日志文件较多,则需要评估数据库读取审计占用的时间和硬盘空间等,假如条件允许,建议搭建相同版本测试环境,并将审计日志导入测试环境进行查询,避免影响主库性能。

2.2 明确审计对象
审计对象一般会细化到某张表,某种操作等,最常见的场景例如:追查谁删了某张表的数据、批量更新了某个字段等。常见于开发商和客户的要求。

有时也会根据实际情况追溯某个IP、客户端等对数据库做哪些操作等,但是此种情况较少,常见于安全部门在漏洞发现后对事态的弥补。

2.3 导入审计日志

hgaudit_imp -f hgaudit-2023-12-19-161119.log,hgaudit-2023-12-19-162003.log

请注意:

  1. hgaudit_imp默认会查找$PGDATA/hgaudit目录下的文件,假如审计文件在其他位置,请使用绝对路径。

  2. 支持指定多个文件,多个文件用逗号分隔,假如不使用-f指定,会将当前$PGDATA/hgaudit下的所有审计记录都导入,包括未写完的审计记录。

  3. 导入审计文件会先truncate审计日志表再写入,所以假如发现审计日志导入不全,只能全量导入,无法增量。

  4. 假如我们担心查询审计日志影响到正常业务运行,可以临时在其他服务器上搭建相同版本的数据库环境,将审计日志传输过去后进行导入。这也是较推荐的方案。

2.4 审计日志表结构详解
审计日志表结构如下,我们需要根据实际情况来选择日志查询范围。

     Column       |           Type           | 描述 --------------------+--------------------------+-----------log_time           | timestamp with time zone |日志记录时间risklevel          | "char"                   |风险等级audittype          | text                     |审计类型:包含system(系统审计事件),statement(语句审计事件),object(对象审计事件),mandatory(强制审计事件)oper_opts          | text                     |审计语句的类型username           | text                     |用户名rolename           | text                     |角色名dbname             | text                     |数据库名objtype            | text                     |对象类型schemaname         | text                     |模式名objectname         | text                     |对象名colname            | text                     |列名privlevel          | text                     |权限等级:包含SYSTEM,DATABASE,SCHEMAOBJECT,INSTACEprocpid            | integer                  |进程idsession_start_time | timestamp with time zone |会话开始时间action_start_time  | timestamp with time zone |操作开始时间tansaction_id      | integer                  |事务idclient_mac         | text                     |客户端mac地址client_ip          | text                     |客户端IPclient_port        | text                     |客户端portapplication_name   | text                     |客户端应用名server_mac         | text                     |服务器macserver_ip          | text                     |服务器IPserver_port        | text                     |服务器端口command            | text                     |执行的命令affect_rows        | integer                  |命令影响的行数return_row         | integer                  |命令返回的行数duration           | double precision         |命令持续时间result             | text                     |命令执行结果(成功或失败)

由于操作类型:oper_opts 字段较为常用,且类型较多,特此说明该字段的所有取值,对于不同的操作可以按照如下清单来查询。

CREATE ROLECREATE DOMAINCREATE PROCEDURECREATE INDEXCREATE SCHEMACREATE SEQUENCECREATE TABLECREATE TABLE ASCREATE TRIGGERCREATE USERCREATE VIEWCREATE EXTENSIONCREATE DATABASEALTER ROLEALTER DOMAINALTER PROCEDUREALTER INDEXALTER SYSTEMALTER SCHEMAALTER SEQUENCEALTER TABLEALTER TRIGGERALTER USERALTER VIEWALTER EXTENSIONALTER DATABASEDROP DOMAINDROP PROCEDUREDROP ROLEDROP INDEXDROP SCHEMADROP SEQUENCEDROP TABLEDROP TRIGGERDROP USERDROP VIEWDROP DATABASEDROP EXTENSIONSELECTSELECT INTOINSERTUPDATEDELETEGRANTREVOKECOMMENTRESETSETTRUNCATECOPY TOCOPY FROMREINDEXLOCKCALL

2.5 常见审计查询场景
示例1:查询2024-02-19 12:00 - 2024-02-19 19:00 期间,清空了库db_test1中表public.t11的操作明细

select * from hg_t_audit_log where log_time > '2024-02-19 12:00:00' and log_time < '2024-02-19 19:00:00' and dbname = 'db_test1'and schemaname = 'public' and objectname = 't11' and oper_opts in ('DELETE','TRUNCATE');

示例2:查询2024-02-19 12:00 - 2024-02-19 19:00 期间,查找谁删除了库db_test1中表public.t11

select * from hg_t_audit_log where log_time > '2024-02-19 12:00:00' and log_time < '2024-02-19 19:00:00' and dbname = 'db_test1'           --注意:删除对象时,不会记录对象的模式名和对象名,不能用对象名来查找对应表and oper_opts = 'DROP TABLE';

示例3:查询2024-02-21 08:00 - 2024-02-21 12:00,谁查询了表 public.t12

请注意:对于类似join表查询,只能记录到主表的表名,假如要查询的表是作为副表,那么只能对command列进行模糊查询,需要耗费的时空复杂度经常无法接受。

测试的SQL语句示例:

select t12.id,t11.name from t12left join t11 on t11.id = t12.id;

导入后查询:

select * from hg_t_audit_log where log_time > '2024-02-21 08:00:00' and log_time < '2024-02-21 12:00:00' and dbname = 'db_test1'and schemaname = 'public' and objectname = 't12' and oper_opts in ('SELECT');

2.6 其他提示
查询审计日志时,有时会发生无结果的情况,则将条件适当放开,特别是对象名、操作类型等,多试几次,实际应用系统运行的SQL并不像我们实验环境中那么简单和明确,检索审计日志需要耐心。

http://www.xdnf.cn/news/546157.html

相关文章:

  • vue3前端后端地址可配置方案
  • Spark大数据分析案例(pycharm)
  • Rocketmq broker 是主从架构还是集群架构,可以故障自动转移吗
  • 深度解析 HDFS与Hive的关系
  • C#中使用SharpSvn和TortoiseSVN操作SVN版本控制系统的完整指南
  • FreeSWITCH 纯内网配置
  • 实现图片自动压缩算法,canvas压缩图片方法
  • Java 单元测试框架比较:JUnit、TestNG 哪个更适合你?
  • pycharm无法正常调试问题
  • 【蓝桥杯真题精讲】第 16 届 Python A 组(省赛)
  • 使用 GitHub Pages 部署单页面应用教程
  • ISCC 2025决赛 wp
  • 《深入解析 Django ORM 复杂查询优化:如何提升 SQL 执行效率》
  • 多通道振弦式数据采集仪MCU安装指南
  • SymPy | 获取表达式自由变量方法与因式分解
  • 王树森推荐系统公开课 排序04:视频播放建模
  • 代码随想录算法训练营第60期第四十二天打卡
  • 多类型RFID电子标签定制 助力行业精准化管理
  • Matplotlib imsave() 方法详解
  • 使用 ARCore 和 Kotlin 开发 Android 增强现实应用入门指南
  • STM32之定时器
  • 深入浅出IIC协议 - 从总线原理到FPGA实战开发 -- 第三篇:Verilog实现I2C Master核
  • vscode 常用调试
  • 进程间通信(IPC): POSIX 消息队列
  • 【解决】SSH 远程失败之路由配置问题
  • CNBC专访CertiK联创顾荣辉:从形式化验证到AI赋能,持续拓展Web3.0信任边界
  • 2025 高级 Java 面试宝典 [特殊字符](先放题目后放答案)
  • Unity3D仿星露谷物语开发46之种植/砍伐橡树
  • 使用注解动态映射:根据实体List列表动态生成Excel文件
  • 音视频之H.265/HEVC速率控制