审核¶
介绍¶
DHIS2 支持基于_Apache ActiveMQ Artemis_ 的新审计服务。Artemis 被 DHIS2 用作异步消息传递系统。
实体保存到数据库后,将创建一条审计消息,并发送到 Artemis 消息消费者服务。然后,该信息将在不同的线程中处理。
可从 DHIS2 数据库检索审计日志。目前还没有可用的用户界面或 API 端点来检索审计条目。
有关审计系统结构的详细说明,请参阅 此处。
我们记录的内容{ #what_we_log }¶
这是我们作为审计系统一部分而记录的操作列表:
- 对用户账户进行操作(如但不限于创建和编辑个人资料)
- 对用户角色、组和权限组的操作
- 对元数据对象(如但不限于类别、组织单位、报告)进行操作
- 对跟踪对象(如但不限于跟踪实体)进行操作
- 工作配置
- 打破玻璃操作
单审核表¶
所有审计条目(与跟踪实体相关的条目除外)都将保存到一个名为 "审计 "的表中
| 柱 | 类型 | 描述 |
|---|---|---|
| 受审核者 | 整数 | 主键。 |
| 审核类型 | 文本 | 读取,创建,更新,删除,搜索 |
| 审计范围 | 文本 | 元数据,汇总,跟踪器 |
| 克拉斯 | 文本 | 审计实体 Java 类名。 |
| 属性 | jsonb | 包含已审核对象属性的 JSON 字符串。示例:{"valueType": "TEXT", "categoryCombo": "SWQW313FQY", "domainType": "TRACKER"}. |
| 数据 | 比蒂亚 | 审计实体的字节数组格式压缩 JSON 字符串(非人工可读)。 |
| 创建于 | 没有时区的时间戳 | 创建时间 |
| 由...制作 | 文本 | 执行审计操作的用户的用户名。 |
| storedByDataValue | 文本 | 被审计对象的 UID。 |
| 码 | 文本 | 被审计对象的代码。 |
审计服务使用了两个新概念:审计范围_和审计类型_。
审核范围¶
审计范围是可以审计的应用项目的逻辑区域。目前有三种审计范围。
| 范围 | 键 | 审计对象 |
|---|---|---|
| 追踪器 | 跟踪器 | 跟踪实体、注册、事件。 |
| 元数据 | 元数据 | 所有元数据对象(如数据元素、组织单位)。 |
| 总计 | 总计 | 汇总数据值。 |
审核类型¶
审计类型是触发审计操作的操作。目前,我们支持以下四种类型。
| 名称 | 键 | 描述 |
|---|---|---|
| 阅读 | 阅读 | 目标已宣读。 |
false | 创建 | 对象已创建。 |
| 如果为 "true",它将跳过运行导入的任何项目规则 | 更新 | 对象已更新。 |
| 删除 | 删除 | 对象已删除。 |
| 残疾 | 禁用 | 禁用审计。 |
注意事项
READ 审计类型可能会在数据库中生成大量数据,并可能影响性能。
跟踪实体审计{ #tracked-entity-audits }¶
对跟踪实体的操作存储在 "trackedentityaudit "表中。
跟踪审计{ #trackedentityaudit }¶
| 柱 | 类型 | 描述 |
|---|---|---|
| 追踪的审计编号 | 整数 | 主键。 |
| 跟踪身份 | 文本 | 跟踪实体名称。 |
| GET /api/metadata/proposals?filter=status:eq:ACCEPTED | 没有时区的时间戳 | 创建时间 |
| 访问 | 文本 | 执行审计操作的用户的用户名。 |
| 审核类型 | 文本 | 读取,创建,更新,删除,搜索 |
| 描述 | 文本 | 被审计对象的代码。 |
可通过 [API](#webapi_tracked_entity_audits)检索这些数据。
打破玻璃¶
打破玻璃功能允许在特殊情况下访问 DHIS2 用户无权访问的记录。因此,用户必须输入理由才能访问这些记录。
在我们的 Youtube 频道 此处 中可以找到解释其工作原理的视频。
打碎玻璃事件存储在 "programtempownershipaudit "表中,如下所述:
| 柱 | 类型 | 描述 |
|---|---|---|
| 项目编号 | 整数 | 主键。 |
| programid | 整数 | 被跟踪实体所属的计划 ID。 |
| trackedentityid | 整数 | 属性值所属的跟踪实体 ID。 |
| GET /api/metadata/proposals?filter=status:eq:ACCEPTED | 没有时区的时间戳 | 创建时间 |
| 访问 | 文本 | 执行审计操作的用户的用户名。 |
| 提案的唯一标识符 | 文本 | 对话框中插入的原因。 |
设定¶
以下范围和类型默认启用审计系统。
范围(区分大小写):
- 阅读
- 项目阶段标识方案
- 更新
- 删除
- 搜索
- 已禁用
类型
- 数据数据
- 跟踪器
- AGGREGATE
这意味着**无需任何操作**即可启用默认审计系统。默认设置相当于以下 dhis.conf 配置。
audit.metadata = 创建;更新;删除
audit.tracker = 创建;更新;删除
audit.aggregate = 创建;更新;删除
可以使用_审计矩阵_配置审计。审计矩阵表示范围和类型的有效组合,并在dhis.conf 配置文件中使用以下属性定义。每个属性都接受以分号 (;) 分隔的审计类型列表。
- 审核元数据
audit.tracker- 审计汇总
Artemis{ #artemis }¶
Apache ActiveMQ Artemis是一个开源项目,旨在构建一个多协议、可嵌入、高性能、集群、异步的消息传递系统。自 2.31 版起,它已成为 DHIS2 的一部分,并被用作消耗审计日志的系统。
默认情况下,DHIS2 将启动一个嵌入式 Artemis 服务器,该服务器由应用项目内部使用,用于存储和访问审计事件。
但是,如果您已经有了一个 Artemis 服务器,您可以从 DHIS2 连接到它来发送审计事件,如我们的[官方文档](#webapi_amqp_configuration)所述:在这种设置下,审计事件将从 DHIS2 流向外部 Artemis 系统。
log4j2{ #log4j2 }¶
log4j2 是用于处理输出消息的默认 DHIS2 日志库。它用于控制在哪个文件中记录哪些事件。
应用项目会发送一个log4j2 默认配置文件,其中指示要记录哪些信息以及在哪里记录(控制台)。然后,DHIS2 会按照log4j 配置类 中的说明导入该文件并指示日志记录,即把输出从控制台重定向到文件。
从 2.36 到 2.38,审计日志文件 dhis-audit.log 每天午夜 被轮换。
这里]()提供了一个自定义 log4j2 配置的示例:它展示了如何配置 DHIS2 将所有日志保存到外部存储位置,每周轮换并保留 30 天。请阅读 应用项目日志部分 了解如何使用。
例子¶
本节演示如何在 dhis.conf 中配置审计系统。
仅对元数据和跟踪器的创建和更新进行审计:
属性 audit.metadata = 创建;更新 audit.tracker = 创建;更新 audit.aggregate = 禁用
只审核跟踪器相关对象的创建和删除:
```属性
audit.metadata = 禁用
audit.tracker = 创建;删除
audit.aggregate = 禁用
要完全禁用所有作用域的审计:
audit.metadata = 禁用
audit.tracker = 禁用
audit.aggregate = 禁用
我们建议按照 2.38 版的默认设置将审计跟踪保存到文件中。对于旧版本,以下配置可将审计日志保存到 $DHIS2_HOME/logs/dhis-audit.log 文件中:
属性 audit.database = 关闭 audit.logger = on
要将审计数据存储到数据库中,请在 `dhis.conf` 文件中添加以下内容(2.38 版之前为默认值):
属性
audit.database = 开
audit.logger = 关闭
要从 "审计 "表中提取日志,可以在运行 DHIS2 的系统中使用dhis2-audit-data-extractor:
$ python extract_audit.py extract
请阅读文件了解详情。
要解析日志文件中的条目,可以使用下面的 python 脚本:
$ grep "auditType" dhis-audit.log | python extract_audit.py 解析
或使用 jq 如下:
$ grep "auditType" dhis-audit.log | jq -r .
要选择特定日期内的事件,可以使用下面的 jq(在本例中,我们选择 2022 年 1 月至 2022 年 6 月底之间发生的所有事件):
$ grep "auditType" dhis-audit.log | jq -r '.[] | select ( (.datetime >="2022-01-01") and (.datetime <="2022-06-30") )'
与 extract_audit 相同:
$ python3 extract_audit.py extract -m stdout -f JSON | jq -r '.[] | select ( (.datetime >="2022-01-01") and (.datetime <="2022-06-30") )'