小区门口有家“外婆家私房菜”,开了十几年,街坊都爱去。老板老陈有个习惯:每道菜用什么料、料从哪个摊子进的、哪天到货,都记在一个发黄的笔记本上。可最近老陈摊上事了——食安局的检查员上门,说他的招牌梅菜扣肉里有一批猪肉来源存疑,要他三天内说清楚“这块肉从哪来、经了几手、最后进了哪锅”。老陈翻遍笔记,发现那几页恰好被酱油渍糊住了,什么都对不上。他这才明白:菜做得再好吃,讲不清“食材的来源与去向”,就可能被停业整顿。 这个故事,跟数据世界的“血缘合规审计”是一个道理。每一份数据就像一块食材:原始数据从外部系统进来,经过清洗、转换、加工、建模,最后变成报表或AI模型的输入。谁碰过它、怎么变的、传给了谁,这些关系串起来就是“数据血缘”(Data Lineage)。而“血缘合规审计”,就是那位食安检查员——沿着血缘链路逐段核对,看每一环是不是合法合规:来源是否经过授权,敏感信息有没有脱敏,每一步有没有留痕。审计员不是来挑刺的,而是帮你把风险挡在处罚单之前。

岗位关联

学懂血缘合规审计,让你不再是“只会造数据、不会解释数据”的工程师。无论是金融监管、AI模型合规,还是跨部门数据共享,这套能力都是数据工程师与架构师的职业护城河。

目录
  1. 可视化演示
  2. 血缘概念:为什么会摊上“说不清来源”的事
  3. 血缘图建模:把菜单拆成一张有向的食材图谱
  4. 审计方法论:检查员不凭感觉,按规则与流程说话
  5. 工具链实践:把巡检变成自动化流水线
  6. 监管合规:从“自家规矩”到“法律法规”
  7. 责任与安全:后厨分工牌与台账指纹
  8. 演进与挑战:从“事后翻账”到“实时哨兵”
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

动态演示血缘合规审计与监管实践的核心机制,通过架构/数据/状态/性能四种模式展示关键概念与交互流程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

血缘合规审计与监管实践:血缘合规 血缘合规审计的概念与监管驱动 血缘作为审计证据链的法定价值 核心机制可视化 血缘合规审计与监管实践整体架构与关键组件

血缘概念:为什么会摊上“说不清来源”的事

老陈的梅菜扣肉被质疑时,他翻笔记本,发现常用的那几页被酱油渍糊住了。他第一次意识到:记录“食材从哪来、流向哪桌”这件事,不是做给检查员看的,而是保命用的。如果当初每批猪肉都记下供应商、到货日期、用在哪道菜,他就能在十分钟内从“扣肉”反查到“某天某摊的某批肉”,而不是对着烂账本发呆。

数据世界里的“扣肉”就是一张报表、一个AI模型、一条用户画像。数据血缘,是把这份数据从诞生到消费的全过程串起来的一张「溯源图」:它记录了什么表由什么表加工而来、哪个字段经过了怎样的清洗、哪个模型吃了哪些特征。血缘合规审计,则是拿着这张溯源图,沿链路逐环核对——每个来源是否经授权、每段加工是否合规、访问记录是否留痕,就像食安检查员拿台账对实物。

为什么必须审计?因为数据一多,链路一长,凭记忆一定出岔子。审计范围至少覆盖三件事:一是合规性,即数据来源有没有授权、敏感字段有没有脱敏;二是完整性,即血缘链路有没有断点,字段从源头到报表是否能一路追通;三是责任边界,即每一段加工由谁负责、改没改、何时改。把这些信息整理进数据资产目录,相当于老陈把食材档案统一归档,既方便日常管理,也方便检查员随时抽查。

一句话:血缘解决“讲得清”,审计解决“经得起查”。前者是记账,后者是查账。账记不全,查账就无从谈起;只有账实相符,餐馆才敢挂“放心厨房”的牌子。

血缘图建模:把菜单拆成一张有向的食材图谱

老陈要把账记清楚,第一步是把每道菜拆成人人看得懂的图谱:梅菜扣肉 → [梅菜、五花肉、酱油、冰糖],每种配料再追一层 → [产地、供应商、批次]。这跟数据血缘的建模方式一模一样:把一切数据对象看作“节点”,把一次加工、一次复制、一次JOIN看作“边”,整个血缘就变成一张有向图。

形式上,血缘图可以写成:

其中 \(V\) 是数据节点集合(数据表、字段、模型、报表),\(E\) 是有向边集合,边 \(e_{ij}\) 表示从第 \(i\) 个节点流向第 \(j\) 个节点。

有了图,还要解决两件事:边怎么来,以及边怎么保鲜。边来自元数据采集——解析 SQL 里的 SELECT 来源、ETL 任务的输入输出、训练脚本里读取的数据集,把它们自动转成边。保鲜则靠生命周期管理:血缘不是刻在石头上的一次性产物,调度任务每天跑,表结构每周变,血缘图必须跟着调度和元数据事件持续更新。与此同时,还要给敏感字段打标注:客户手机号、身份证号、健康信息这些“高危食材”要在图上标红,审计时优先检查从它们出发的每一条链路。

当这张图建起来、边能自动长出来、敏感字段能一眼看到,血缘审计才真正有了可以下脚的“现场”。

G=(V,E)G = (V, E)
  1. 符号 \(G\)表示整张血缘图:它像老陈贴在厨房的那张大菜单,上面画满配料与去向。
    GG
  2. 集合 \(V\)所有数据节点的集合:每一张表、每一个字段、每一个模型输出,都是图上的一个点。
    VV
  3. 有向边 \(E\)节点间的依赖关系集合:一条边代表“一次加工,从源指到目标”,方向永远由上游指向下游。
    EE
  4. 边 \(e_{ij}\)从节点 \(i\) 指到节点 \(j\) 的一条具体关系:例如“原始订单表 \(\rightarrow\) 订单清洗表”就是一条边。
    eij:i→je_{ij}: i \rightarrow j

审计方法论:检查员不凭感觉,按规则与流程说话

食安检查员老周来老陈店里,从不像顾客那样说“我觉得这道菜不太新鲜”。他有一张检查清单:进货台账有没有、供应商资质齐不齐、每批肉有没有检疫证明、冷藏温度记录是否连续。逐项打钩、逐项拍照、最后出一纸报告。血缘审计的方法论,就是这么一套“清单式执法”。

审计的第一步是定规则。规则是审计员心里的检查单:源表必须有授权记录,敏感字段离开原始区必须经过脱敏,血缘链路中的每一步都要有执行日志。第二步是扫链路——审计引擎从某个目标数据(比如一张报表)出发,反向沿着边追溯到所有上游源头,再正向推演每一步是否触碰规则。第三步是打标记:凡是缺授权、缺脱敏、缺日志的节点和边,标成异常,就像老周在问题批次的检疫栏里画红圈。第四步是出报告:列出违规清单、影响范围与整改建议。

为了让审计有量化抓手,血缘完整性可以浓缩成一个指标——血缘覆盖率。定义:

这套“定规则→扫链路→打标记→出报告”的流程,配合覆盖率指标,让审计从凭感觉变成了可量化、可追踪、可复查的工程活动。老周离开前对老陈说:“不是我把你当坏人,是有了这套检查单,好人坏人都能证明自己。”

C=LTLT+LPC = \frac{L_T}{L_T + L_P}
  1. 分子 \(L_T\)已经登记在册、且能被审计复核通过的血缘链路条数:好比台账上记录齐全、票据对得上的食材批次。
    LTL_T
  2. 分母 \(L_T + L_P\)应登记的全部血缘链路:既有记录齐全的 \(L_T\),也有缺失或失效的 \(L_P\),二者之和就是“应当存在的所有记录”。
    LT+LPL_T + L_P
  3. 覆盖率 \(C\)已登记链路占全部链路的比例:当 \(L_P=0\) 时 \(C=1\),表示血缘完整、链路无断点;当 \(C\) 明显小于 1 时,说明有相当一部分数据“讲不清来源”,必须优先补齐。
    C∈[0,1]C \in [0,1]

工具链实践:把巡检变成自动化流水线

如果老陈的店扩张成连锁,每家店都靠老周上门人工翻台账就不现实了。老陈需要一套打单系统:进货时扫码登记,后厨领料自动扣减,盘点时系统生成差异报告。血缘审计同样需要工具链,把定规则、扫链路、打标记、出报告固化进平台。

工具链的起点是血缘解析器。它像自动扫码枪,监听数据平台的执行日志与 SQL 文本,自动抽取一条条加工关系,写入图数据库——这是血缘图的仓库,专门存节点、边和属性,支持“从报表一路查到原始表”这类深度关系查询。图库之上再挂审计引擎,它定时或触发式地运行规则集,扫描新写的边是否合规。最后是自动化质检:每次任务跑完,系统自动比对血缘图指纹,发现历史血缘被意外改动时立刻告警,防止“有人悄悄改了台账”。

一个典型的审计引擎循环是:抽取元数据 → 构建或更新血缘图 → 运行规则集 → 生成违规报告 → 推送给责任方。整个过程可以由事件驱动:上游表结构变更、新任务发布、权限调整,都会触发一次增量审计。老陈的连锁店因此能在五分钟内把所有门店的进货与销售链路对完账——不是他变成了超人,而是流水线替他做了重复劳动。

当然,工具再聪明,仍需要“人审”兜底:规则需要人来定义,异常需要人来判断。自动化不是取代检查员,而是让检查员把时间花在真正有风险的地方。

监管合规:从“自家规矩”到“法律法规”

连锁店开进大城市后,老陈面对的就不再是老周一个检查员了:市场监管、税务、消防、卫健,各有各的检查表。数据血缘合规也一样,不同行业、不同法域各有硬性条文。血缘审计的价值,正是让技术体系能直接回应监管问题。

GDPR 要求个人数据可被“解释与删除”,如果企业没有血缘图,面对“这个人的数据流进了哪些AI模型”的发问,只能两手一摊。我国《个人信息保护法》(PIPL)强调“最小必要”与“告知同意”,审计时要能证明:你采集的每个字段,都能从血缘上找到对应的授权记录。金融监管(如《数据安全法》配套的金融数据分类分级指引)要求重要数据全链路可审计、日志保留足够久。跨域合规则更加复杂:当一个欧洲子公司的用户数据要传回总部,审计必须展示一条从采集到跨境传输再到存储的完整血缘链,证明每一跳都符合当地法条。

把这些要求映射到工程上,就是一张“监管对照表”:合规主题 → 对应法条 → 血缘证据 → 审计频率。GDPR 的“被遗忘权”对应删除请求的影响范围分析,PIPL 的最小化对应字段级血缘上的敏感字段追踪,金融审计对应不可篡改的审计日志与定期复算。血缘审计于是从最佳实践升格为合规刚需。

责任与安全:后厨分工牌与台账指纹

老陈的厨房为什么没出过大乱子?因为他贴了一张“分工牌”:凉菜归小张、热菜归李姐、采购归王叔,每道出品上注明责任人。检查员问起来,老陈能一句话说出找谁。数据血缘也需要这张“分工牌”,在治理术语里叫 RACI 责任矩阵。

RACI 把血缘对象的具体责任分给角色:R(Responsible)是做完这件事的人——数据工程师负责维护 ETL 血缘;A(Accountable)是最终操心的人——数据治理委员会对全链路合规负总责;C(Consulted)是开工前要问的人——安全团队对敏感字段的使用提出意见;I(Informed)是事后必须告知的人——下游报表负责人要知晓上游结构变更。一张矩阵,让每一个血缘节点都找得到主人。

责任之外是安全。血缘信息本身也是数据,还会被篡改。为此要三管齐下:权限管控——只有授权角色能修改血缘边;修改留痕——每次改动记录操作人、时间与原因;指纹校验——用血缘图的内容计算哈希,定时比对,发现历史记录被悄悄改动就报警。这就像老陈不仅锁台账,还在每页纸上盖骑缝章、每夜对页码。责任到人 + 防篡改,血缘才是可信证据;否则审计用的就只是一份可以造假的账本。

演进与挑战:从“事后翻账”到“实时哨兵”

老陈的店越开越多,他开始意识到:账本是死的,经营是活的。每次等检查员上门才翻账,总有点被动。他想要的是“进货时系统自动报警、领料超额当场拦截”的实时哨兵。血缘审计正在朝这个方向演进。

演进的第一层是成熟度分级:从 L0 无血缘、L1 任务级血缘、L2 字段级血缘,到 L3 自动校准的实时血缘审计。多数组织停留 L1—L2,少数领先者已走向 L3。第二层是实时血缘:血缘不再是每天凌晨批量更新,而是随流式计算每一条日志实时追加,让审计窗口从“月度复盘”缩短到“分钟级发现”。第三层是 AI 辅助审计:用图挖掘算法识别异常链路(比如某个新任务开始大量读取敏感字段),自动生成重点审计清单,减轻规则工程师的负担。

挑战同样清晰:实时血缘要求更高性能的图存储与增量计算,AI 辅助审计需要高质量标注样本,跨组织共享数据时还要解决不同系统间血缘标识的互通问题;而这一切都必须控制成本,让审计从“昂贵的安全感”变成“够得着的日常”。老陈的终极方案是:每家店用同一套打单系统,总部实时看着所有分店的食材流向,任何异常 30 秒内弹到屏幕上。他笑着说:“这不是为了应付检查员,是为了让我自己睡得着觉。”

血缘合规审计,本质是把“讲得清来源、经得起检查”变成数据平台的内建能力——不是出事后的补救,而是运营中的自信。

AI 应用场景

金融机构对账报表的血缘追踪

阶段:数据治理与合规审计

解决的问题:银行的日终对账报表如果出现金额对不上,传统做法是数十个工程师开会“回忆”数据怎么来的,耗时动辄一整天。用血缘图反向追踪,从报表节点一路追溯到流水原始表,分钟级定位到“某个清洗任务在 14:00 改了过滤规则,连带影响下游 3 张表”,同时标记出缺失的授权记录,把“背锅大会”变成“定点修复”。

具体案例:某股份制银行上线了字段级血缘审计平台,监管要求“重要报表必须能在 30 分钟内说清数据来源”。平台自动解析数据仓库中 2 万条 ETL 任务的 SQL,构建血缘图,每次跑批后自动执行合规规则检测。一次月度结算前,系统发现某新增任务未经审批就读取了客户风险等级字段,自动阻断并通知数据负责人,避免了一次监管整改。

AI模型训练数据合规检查

阶段:数据准备与模型风险管理

解决的问题:训练大模型需要海量数据,但哪些文本、哪些用户行为数据具备合法来源?传统做法靠“法务看协议 + 工程师看字段名”,既慢又漏。借助血缘审计,从训练数据集中每个样本反向追踪到采集源头,自动核验授权文档、脱敏记录和同意留痕,任何一条来源不明的高危数据都在训练前被拦截。

具体案例:一家人工智能医疗公司要训练病历理解模型,合规要求“每一位患者的影像与诊断数据都必须有知情同意记录”。血缘审计平台在预处理阶段自动追踪每张影像的来源库与同意状态,发现某合作方导入的历史影像缺少同意字段,立即隔离该批次数据,并生成整改工单,保障模型上线后无合规诉讼风险。

跨部门数据共享平台的权限与合规中枢

阶段:数据安全治理

解决的问题:大型企业里,数据在部门间流转频繁,“用户标签被谁用过、产出传给了哪条业务线”经常说不清。用血缘审计作为数据共享平台的中枢,每次数据申请自动生成血缘子图,标出敏感字段与授权要求,审批通过后才放行;数据被使用后,自动在血缘图上追加“使用记录”。

具体案例:某互联网公司搭建公司级数据血缘审计中心,覆盖 30 多个业务部门的数据资产。当业务方申请使用“用户行为明细”,平台自动展示该数据的所有上游来源与下游消费链条,并提示“包含设备号等敏感字段,需匿名化后使用”。申请一旦获批,血缘图自动生成一条授权链路,审计员可随时按图抽查,防止数据被移作他用。

Python 演示

python112 行
# data_lineage_audit.py# 一个极简的数据血缘追踪与合规审计demofrom collections import defaultdict  class DataNode:    def __init__(self, name, owner, sensitive=False):        self.name = name        self.owner = owner        self.sensitive = sensitive  class Edge:    def __init__(self, source, target, src_tag, approved=False, masked=False):        self.source = source        self.target = target        self.src_tag = src_tag        self.approved = approved        self.masked = masked  class DataLineage:    def __init__(self):        self.nodes = {}        self.edges = []        self.out_edges = defaultdict(list)        self.audit_rules = []     def add_node(self, node):        self.nodes[node.name] = node     def add_edge(self, source, target, src_tag, approved=False, masked=False):        edge = Edge(source, target, src_tag, approved, masked)        self.edges.append(edge)        self.out_edges[source].append(edge)     def add_audit_rule(self, name, func):        self.audit_rules.append({"name": name, "check": func})     def audit(self):        violations = []        for edge in self.edges:            src = self.nodes.get(edge.source)            if src is None:                violations.append((edge, "上游节点缺失"))                continue            if src.sensitive and not edge.masked:                violations.append((edge, "敏感字段未脱敏"))            if not edge.approved:                violations.append((edge, "缺少源授权"))            if not edge.src_tag:                violations.append((edge, "来源标签为空"))            for rule in self.audit_rules:                if not rule["check"](edge):                    violations.append((edge, rule["name"]))        return violations     def find_sources(self):        has_in = {edge.source for edge in self.edges}        for edge in self.edges:            has_in.discard(edge.target)        return sorted(has_in)  def build_demo_lineage():    dl = DataLineage()    dl.add_node(DataNode("raw_orders", "dpi", sensitive=True))    dl.add_node(DataNode("raw_users", "dpi", sensitive=True))    dl.add_node(DataNode("clean_orders", "etl_team"))    dl.add_node(DataNode("feature_table", "feature_team"))    dl.add_node(DataNode("report", "bi_team"))     dl.add_edge("raw_orders", "clean_orders", "TAG_FRESH", approved=True, masked=True)    dl.add_edge("raw_users", "clean_orders", "TAG_PII", approved=True, masked=True)    dl.add_edge("clean_orders", "feature_table", "TAG_CLEAN", approved=True, masked=True)    dl.add_edge("raw_orders", "feature_table", "TAG_FRESH", approved=False, masked=False)    dl.add_edge("feature_table", "report", "TAG_FEAT", approved=True, masked=True)     dl.add_audit_rule("下游必须有可见标识", lambda e: e.src_tag.startswith("TAG_"))    return dl  def main():    dl = build_demo_lineage()     print("血缘链路(边):")    for edge in dl.edges:        print(f"  {edge.source} -> {edge.target} 授权={edge.approved} 脱敏={edge.masked}")     sources = dl.find_sources()    print("\n数据源头:", ", ".join(sources))     print("\n血缘合规审计报告:")    bad = dl.audit()    if not bad:        print("  全部通过,链路清晰。")        return     for edge, reason in bad:        print(f"  [违规] {edge.source} -> {edge.target}: {reason}")     impact = set()    for edge in dl.edges:        for _, reason in bad:            if edge is _:                impact.add(edge.target)    print("需整改的表:", ", ".join(sorted(impact)))    print("覆盖率: %.0f%%" % ((len(dl.edges) - len(bad)) / len(dl.edges) * 100))  if __name__ == "__main__":    main()
目的:实现一个 30 行核心逻辑的血缘追踪器,自动从有向边构建血缘图、识别数据源头、执行多条审计规则,最后输出违规边与血缘覆盖率。
  1. dl.add_node(DataNode("raw_orders", "dpi", sensitive=True))注册一个数据节点,sensitive=True 表示该表含敏感字段,类似“猪肉批次的检疫标注”。
  2. dl.add_edge("raw_orders", "clean_orders", "TAG_FRESH", approved=True, masked=True)登记一条血缘边:原始订单表经授权且已脱敏后流向清洗表。
  3. dl.add_edge("raw_orders", "feature_table", "TAG_FRESH", approved=False, masked=False)故意制造一条违规边:绕过清洗直接流向特征表,模拟“无授权 + 未脱敏”的链路。
  4. dl.add_audit_rule("下游必须有可见标识", lambda e: e.src_tag.startswith("TAG_"))注册一条自定义审计规则,规则是审计员的检查清单。
  5. sources = dl.find_sources()通过“入度为零”找出血缘图的源头节点,即“最上游的食材供应商”。
  6. bad = dl.audit()执行全量审计,返回所有违规边与原因,就像检查员逐项打钩。
  7. print("覆盖率: %.0f%%" % ...)用“合规边 / 总边数”折算出血缘覆盖率,呼应正文中的覆盖率公式。

常见误区

误区很多初学者以为把血缘图画出来、领导看一眼觉得很炫,审计工作就结束了。结果上线后发现别人问“这条链路合不合规”,完全答不上来。

正解血缘图只是“台账”,审计是“查账”。查账要基于规则清单逐项核对:源有无授权、敏感字段有无脱敏、每一步有无留痕。只画图不核对,等于老陈拍了张食材照片却从没对过检疫票。

为何常见:因为血缘可视化最直观、最容易出成果,而规则核对这些细活既枯燥又难展示,所以人本能地停在“画图”这一步。

误区有人把血缘图当无向图看,追溯问题时上下游乱跳。问“这个报表的数据哪来的”,他往下游找了半天。

正解血缘是有向图,方向代表数据流向:下游永远依赖上游。找“来源”要反向沿着边往上游走,评估“影响”才顺着下游走。方向一乱,审计就会把“肇事者”和“受害者”搞反。

为何常见:因为图一密集,视觉上就像一团网,人容易忽略方向标记;而 SQL 血缘抽取有难度,边常被抽丢,更让人想“看个大概就行”。

误区初学者以为血缘解析器像魔法,只要平台跑着,图就一定准。某天发现一条边明显指向错误的表,还很困惑“工具不是自动的吗”。

正解自动解析只能覆盖“能被解析到的加工逻辑”,动态 SQL、存储过程嵌套、非结构化代码都可能漏抽或错抽。血缘必须配人工校准与指纹校验:定期比对历史血缘,发现异常改动要告警。老陈的打单系统再智能,也得每月对一次实物库存。

为何常见:因为工具链宣传时常强调“自动化”,让人误以为准确率 100%,忽略了血缘本质上需要持续运营维护。

误区为了表现“高度重视合规”,有人把每一条执行过的 SQL、每一次字段读取都塞进审计库,磁盘暴涨、查询极慢,最后被运维投诉。

正解审计留痕讲究“按风险配置”:高风险敏感字段做字段级全量留痕,低风险内部聚合只做任务级摘要。过度留痕不是安全,是噪音,还会拖垮数据平台。就像老陈不可能给每根葱都拍视频,但每批猪肉一定留检疫票。

为何常见:因为“留痕越多越安全”听起来很合理,忽略了合规成本与性能约束,缺少风险分级意识。

误区有人觉得血缘审计就是“事后追责工具”,平时用不上,只有监管来了或数据出错才翻出来看。

正解血缘审计更大的价值在于事前的“风险拦截”和事中的“异常发现”:建表时自动检测无授权敏感列引用、发布任务时扫描下游影响、跑批后校验链路指纹。老陈装打单系统不是为应付检查,是为每天打烊前就能发现账实不符,而不是等周六凌晨市场局敲门。

为何常见:因为“审计”这个词天然带着追溯色彩,让人只想到事后;实际上成熟的审计体系是嵌入开发生命周期的前置动作。

面试题

Q1. 数据血缘最主要解决什么问题?

单选题 · easy

  • A.提升SQL查询性能
  • B.让数据来源与去向讲得清← 正确答案
  • C.自动修复数据质量问题
  • D.替代数据备份机制

答案:B。血缘记录数据从哪里来到哪里去,核心价值是“讲得清来源”。性能优化靠索引与查询改写,质量修复靠监控与清洗规则,备份靠快照机制,都属于数据工程其他能力,与血缘的定位不同。

Q2. 血缘合规审计中,常见的检查项有哪些?

多选题 · easy

  • A.数据源是否经过授权← 正确答案
  • B.敏感字段是否脱敏← 正确答案
  • C.数据库服务器温度
  • D.加工步骤是否留痕← 正确答案

答案:ABD。源授权、敏感字段脱敏、加工留痕都是审计清单的典型项目。服务器温度属于基础设施运维指标,与“这条数据合不合规”没有直接关系。

Q3. 某血缘图有 20 条应登记的链路,其中 4 条缺失记录。按覆盖率公式,血缘覆盖率是多少?

单选题 · mid

  • A.60%
  • B.70%
  • C.80%← 正确答案
  • D.90%

答案:C。覆盖率 \(C=L_T/(L_T+L_P)\)。\(L_T=16\)(已登记),\(L_P=4\)(缺失),所以 \(C=16/20=80\%\)。分母是“全部应登记链路”,不是 20 减 4 后单独看,也不是去掉 4 条后再除 20。

Q4. 血缘图中,边 \(A \rightarrow B\) 表示什么?

单选题 · easy

  • A.A 与 B 数据完全相同
  • B.B 的数据来源于 A← 正确答案
  • C.A 删除后 B 不受影响
  • D.B 是 A 的历史备份

答案:B。有向边 \(A \rightarrow B\) 表示数据从 A 流到 B,所以 B 依赖 A。若 A 被删除或结构变化,B 很可能受影响。血缘方向永远是“上游指向下游”,审查询问“来源”时要往反方向追。

Q5. 血缘审计中,为什么需要数据资产目录?

多选题 · mid

  • A.登记字段的敏感级别← 正确答案
  • B.记录数据的授权与有效期← 正确答案
  • C.替代数据库索引优化
  • D.统一管理血缘元数据← 正确答案

答案:ABD。资产目录登记敏感级别、授权状态、有效期等血缘元数据,审计时能快速判断风险。它不负责查询性能优化,索引是数据库引擎的事,两者职责不同。

Q6. 关于血缘生命周期管理,正确的做法是?

单选题 · mid

  • A.建一次后永远不变
  • B.跟随调度与元数据事件持续更新← 正确答案
  • C.只在年度大盘点更新一次
  • D.由下游使用者自行修改

答案:B。表结构、调度任务、加工逻辑都在变,血缘必须随之增量更新。建一次不变或年更都会导致链路失真;让使用者乱改则会导致责任混乱,破坏审计可信性。

Q7. 血缘审计工具链中,“审计引擎”主要负责什么?

单选题 · mid

  • A.解析 SQL 生成计划
  • B.运行规则集并输出违规报告← 正确答案
  • C.存储海量业务数据
  • D.可视化展示报表

答案:B。审计引擎像一个自动检查员,定期或触发式地运行规则集,扫描血缘图并生成违规报告。SQL 解析是血缘解析器的事,业务数据存储是数据仓库的事,可视化是前端展示层的事。

Q8. 在 RACI 责任矩阵中,以下描述正确的是?

多选题 · hard

  • A.R 角色负责把血缘建设工作做完← 正确答案
  • B.A 角色对合规结果负最终责任← 正确答案
  • C.C 角色在开工前提供专业意见← 正确答案
  • D.I 角色需要审批每一条血缘边

答案:ABC。R 是具体执行者,A 是最终负责人,C 是开工前征求意见的顾问。I 只是“被告知”,不需要审批。把 I 误当审批者是常见责任混淆,会让流程僵化且权责错位。

Q9. 合规评分 \(S = 1 - F/R\) 中,当 \(F\)(违规条数)为 0 时,评分是多少?

单选题 · easy

  • A.1← 正确答案
  • B.0
  • C.0.5
  • D.取决于规则总数

答案:A。直接把 \(F=0\) 代入 \(S = 1 - F/R\) 得 \(S=1\),即全合规满分。违规条数越多分数越低,规则总数 \(R\) 只影响扣分幅度,不影响 \(F=0\) 时的结果。

Q10. 某合规建设覆盖率目标为 95%,当前 \(L_T=95\)、\(L_P=10\),审计需要优先做什么?

单选题 · hard

  • A.降低目标至 85%
  • B.补齐 5 条缺失的血缘记录← 正确答案
  • C.删除 5 条下游链路
  • D.提高规则数量

答案:B。当前覆盖率 \(C=95/105≈90.5\%\),离 95% 还差约 4.5 个百分点,对应约 5 条链路的缺口。审计行动应是补录缺失记录,而不是降低目标、删链路或堆规则数。降低目标是无原则,删除链路是掩盖问题,加规则不直接提升覆盖率。