BI数据隐私防火墙的内在情况

2022-09-09 16:00:22 浏览数 (1)

它是什么?

数据隐私防火墙的用途很简单:存在以防止Power Query无意中在源之间泄露数据。

为什么需要这一点? 我是说,你当然可以创作一些 M,它将SQL值传递给 OData 源。 但这将是有意的数据泄露。 混搭作者会 (,或者至少应该) 知道他们这样做。 为什么需要防止意外数据泄露?

答案? 折叠。

折叠?

折叠是指在 M ((例如筛选器、重命名、联接等)中) 将表达式转换为对原始数据源 ((如 SQL、OData) 等)的操作的术语。 Power Query功能的重要组成部分来自 PQ 可以通过用户界面将用户执行的操作转换为复杂的SQL或其他后端数据源语言,而无需用户知道上述语言。 用户可获得本机数据源操作的性能优势,并轻松使用 UI,其中所有数据源都可以使用一组通用命令进行转换。

作为折叠的一部分,PQ 有时可能确定执行给定混合的最有效方法是从一个源获取数据并将其传递给另一个源。 例如,如果要将小型 CSV 文件联接到大型SQL表,则可能不希望 PQ 读取 CSV 文件、读取整个SQL表,然后将它们联接在本地计算机上。 你可能希望 PQ 将 CSV 数据内联到 SQL 语句中,并要求SQL数据库执行联接。

这是意外数据泄漏发生的方式。

Imagine如果你正在联接包含员工社会安全号码和外部 OData 源结果的SQL数据,则你突然发现SQL的社保号码正在发送到 OData 服务。 坏消息, 对吗?

这是防火墙旨在防止的方案。

它是如何工作的?

防火墙存在,以防止从一个源的数据无意中发送到另一个源。 足够简单。

那么,它如何完成这个任务?

它通过将 M 查询划分为称为分区的内容,然后强制实施以下规则来执行此操作:

  • 分区可以访问兼容的数据源,也可以引用其他分区,但不能同时引用这两个分区。

简单。。。然而令人困惑。 什么是分区? 是什么使两个数据源“兼容”? 为什么防火墙应该关心分区是否想要访问数据源并引用分区?

让我们来分解一下,一次一条地查看上述规则。

什么是分区?

在最基本的级别,分区只是一个或多个查询步骤的集合。 至少在当前实现) 中可能 (最精细的分区是一个步骤。 最大分区有时可以包含多个查询。 稍后 (更多内容。)

如果不熟悉步骤,可以在“应用步骤”窗格中选择查询后,在Power Query 编辑器窗口右侧查看它们。 步骤可跟踪将数据转换为最终形状所做的一切。

引用其他分区的分区

使用防火墙对查询进行评估时,防火墙会将查询及其所有依赖项划分为分区 (,即步骤组) 。 每当一个分区引用另一个分区中的内容时,防火墙会将引用替换为对调用的特殊函数的 Value.Firewall调用。 换句话说,防火墙不允许分区随机访问对方。 修改所有引用以通过防火墙。 将防火墙视为守门员。 引用另一个分区的分区必须获取防火墙的权限才能执行此操作,防火墙控制是否允许引用的数据进入分区。

这一切都可能看起来相当抽象,因此让我们看看一个示例。

假设你有一个名为 Employees 的查询,该查询从SQL数据库中拉取一些数据。 假设你还有另一个查询 (EmployeesReference) ,它只是引用 Employees。

复制

代码语言:javascript复制
shared Employees = let
    Source = Sql.Database(…),
    EmployeesTable = …
in
    EmployeesTable;

shared EmployeesReference = let
    Source = Employees
in
    Source;

这些查询最终分为两个分区:一个用于 Employees 查询,一个用于 EmployeesReference 查询 (,这将引用 Employees 分区) 。 使用防火墙进行评估时,这些查询将被重写,如下所示:

复制

代码语言:javascript复制
shared Employees = let
    Source = Sql.Database(…),
    EmployeesTable = …
in
    EmployeesTable;

shared EmployeesReference = let
    Source = Value.Firewall("Section1/Employees")
in
    Source;

请注意,对 Employees 查询的简单引用已替换为对 Employees 查询的调用,该调用 Value.Firewall提供 Employees 查询的全名。

评估 EmployeesReference 时,防火墙截获了对 Value.Firewall("Section1/Employees") 的调用,现在有机会控制 (以及请求的数据如何) 流入 EmployeesReference 分区。 它可以执行任意数量的操作:拒绝请求、缓冲所请求的数据 (,从而阻止其原始数据源发生进一步折叠) 等。

这是防火墙如何控制分区之间的数据流。

0 人点赞