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

Fine-Grained Auditing 在 ABP vNext 的落地

Fine-Grained Auditing 在 ABP vNext 的落地 🚀


📚 目录

  • Fine-Grained Auditing 在 ABP vNext 的落地 🚀
    • 0) 摘要(TL;DR)🧠
    • 1) 问题边界与术语🎯
    • 2) 总体架构 🧩
    • 3) 审计账本 🔐
      • 3.1 数据模型
      • 3.2 并发安全:CAS + 显式锁(FOR UPDATE / UPDLOCK)
    • 4) ABP 集成点(主体/多租户/替换审计)🧩
      • 4.1 模块配置:开启 GET 审计 + DI 注册拦截器
      • 4.2 查询处打 Tag(生产可关闭 CallSite)
      • 4.3 替换 `IAuditingStore`(可靠接管读取审计)
    • 5) EF Core 命令拦截器(异步 + 归一化指纹 + 有界通道)⚙️
      • 5.1 有界通道注册(背压/降级策略)
      • 5.2 拦截器实现(去注释/参数占位/字符串字面量/统一大小写)
    • 6) 后台消费者:**批量事务** + **CAS 条件更新**(PG/SQL Server 双范式)📦
      • 6.1 PostgreSQL 版本(Npgsql)
      • 6.2 SQL Server 版本(System.Data.SqlClient)
    • 7) 数据库审计与“指纹”🔎
      • 7.1 PostgreSQL:pgAudit(含行数)+ queryid
      • 7.2 SQL Server:Audit + query_hash
      • 7.3 会话级上下文(稳妥对齐 TraceId/Tenant)
    • 8) 可回放:还原“当时看到的内容”⏪
      • 8.1 SQL Server Temporal
      • 8.2 回放校验流程(与账本摘要比对)
    • 9) 报表与合规模块 📊
    • 10) 性能与高可用 ⚡
    • 11) 评测方案 🧪
    • 12) 三阶段路线 🛠️
    • 13) 常见坑与规避 🧯
    • 14) Checklist ✅
    • 15) 附:契约与 DTO 📦


0) 摘要(TL;DR)🧠

我们在 ABP vNext 中落地细粒度访问审计:精准记录(用户/租户)在何时访问了何对象(实体/字段/记录/SQL),并能回放“当时看到的内容”验真
三层结构:

  1. 采集层:ABP 审计(含 GET)+ EF Core Query Tag + 异步命令拦截器(去注释/参数归一化得到稳定指纹);数据库侧启用 SQL Server Audit / PostgreSQL pgAudit(含行数)。
  2. 账本层Append-only + 哈希链 + KMS/Key Vault 对“摘要”签名(可轮换/可验签)+ CAS 防断链
  3. 回放层:SQL Server Temporal(或 PG 历史表/有效期区间)时间旅行查询 + 摘要比对。

原则:最小化敏感明文、可验证、可回放、工程可运维(有界队列、采样/白名单、分区归档)。✨


1) 问题边界与术语🎯

  • “谁能看什么”(授权/RLS/DDM)≠ “谁看过什么”(访问审计)。本文聚焦访问审计证据链(防抵赖 + 可回放)。
  • “可回放”= 按账本时间点重建“当时视图”,并以摘要校验一致性。

2) 总体架构 🧩

GET/Query
TryWrite
SQL 注释含 TraceId/Tenant
pgAudit/SQL Audit
哈希链/签名
回放比对
客户端/集成系统
ABP 应用层
AppService/Controller
EF Core 查询
TagWith (+CallSite 可开关)
DbCommand Interceptor
异步采集&归一化指纹
有界 Channel
DropOldest+报警
数据库
原生日志
后台 Worker
批量事务入账
审计账本
Append-only + CAS
Key Vault / KMS
报表/验证
时间旅行数据源
Temporal/历史表

3) 审计账本 🔐

3.1 数据模型

CREATE TABLE audit_ledger (id                BIGSERIAL PRIMARY KEY,time_utc          timestamptz NOT NULL,tenant_id         uuid NULL,user_id           uuid NULL,resource_type     text NOT NULL,resource_key      text NOT NULL,access_type       text NOT NULL,     -- 'READ','EXPORT','SELECT',...field_mask        text NULL,row_count         int NULL,          -- 来自 DB 审计或回放query_fingerprint text NULL,         -- PG queryid / SQL query_hash / 备用哈希data_digest       bytea NULL,        -- 可选:结果摘要/Merkle 叶prev_hash         bytea NOT NULL,hash              bytea NOT NULL,    -- H(record_without_hash || prev_hash)key_version       text NOT NULL,signature         bytea NOT NULL
);-- 链尾单行表(CAS 尾指针)
CREATE TABLE audit_chain_tail (id        int   PRIMARY KEY,last_hash bytea NOT NULL
);
INSERT INTO audit_chain_tail(id, last_hash)
VALUES (1, decode('', 'hex')) ON CONFLICT DO NOTHING;

3.2 并发安全:CAS + 显式锁(FOR UPDATE / UPDLOCK)

http://www.dtcms.com/a/442199.html

相关文章:

  • 新手用PPT百科找模板:简单好用的实操分享!
  • Next.js客户端组件与服务端组件:为什么app路由(App Route)成为新标准?use client、服务端组件嵌套客户端组件
  • 做ppt医学专业图片网站门户网站建设自查整改
  • Product Hunt 每日热榜 | 2025-10-03
  • 监管视角下的大数据信用报告:合规、透明与安全的博弈
  • 7. Pandas 字符串与类别数据处理
  • 【iOS】简单的四则运算
  • Tomcat的CATALINA_BASE
  • 嵌入式 Tomcat 与 Spring MVC 集成
  • MyBatis 进阶
  • 软件设计师-软件工程-软件过程模型
  • 论坛网站方案手机网站建设的趋势
  • LeetCode每日一题——单调数列
  • LeetCode 100题(10题)
  • 后端开发网站做一些什么建设部网站官网 造价鉴定
  • day52-Zabbix(第一部分)
  • 依托Java和百度地图实现长沙市热门道路与景点实时路况检索的实践探索
  • 7-1-查询练习
  • Numpy 手搓线性回归
  • 昆明网站服务器湖北seo推广
  • 医院网站建设怎么样盐城网站建设效果
  • dockerfile理解
  • SpringBoot集成Druid连接池_配置优化与监控实践指南
  • 12380网站建设打算公众号小程序开发公司
  • 高并发场景下的前后端数据同步策略:长轮询、SSE与WebSocket对比分析
  • 网站推广对接北京手机网站搭建费用
  • Raydium
  • 动态Vault
  • 量化交易策略中ATR与波动率的配合
  • 便宜的网站设计企业永久免费自动建站系统