为行级安全性创建数据策略
使用数据策略将行级安全性应用于虚拟连接中的一个或多个表。数据策略筛选数据,确保用户只看到他们应该看到的数据。数据策略适用于实时连接和数据提取连接。
关于数据策略
数据策略有三个主要组成部分:
- 应用该策略的表称为策略表。这些表是经过筛选的表。
- 定义表之间(例如,权利表和事实表之间)以及表列和策略列之间关系的映射字段。策略列是用于筛选数据的列。
- 策略条件,它是在查询时针对每一行进行计算的表达式或计算。如果策略条件为 TRUE,则该行将显示在查询中。
创建数据策略时,您需要一个可用于筛选数据的列。此列称为策略列。数据由策略条件筛选,通常使用用户函数,例如 USERNAME() 或 FULLNAME()。
如果您的策略表包含您可以筛选的列,则将该列用作策略列。
如果策略表不包含此类列,请使用包含可用于筛选数据的列的权利表。权利表是一个表,其中包含可用于筛选滤策略表的策略列和可关联(映射)到策略表中的列的另一列(如上面的数据策略示例图像所示)。
使用策略表中的策略列进行筛选
筛选数据的最常见方法是使用表中包含要筛选的数据的列。将该列用作策略列,然后将适当的表列映射到策略列。
若要使用策略列筛选数据,首先,从左窗格向策略添加表。若要添加表,请执行以下操作之一:
- 双击表名称。
- 单击表名称附近的下拉箭头,并选择“使用策略管理表”。
- 或者,将该表拖到右侧并将其放在“添加为策略表”上。
将表添加到策略后,盾牌图标 将出现在左侧窗格中表名的右侧,表明它是一个策略表。
接下来,映射列以在表中的列名和策略列名称之间创建关系。使用数据策略条件中的策略列名称来控制用户的行级数据访问权限:
- 单击“+添加要映射的列”添加将用于筛选数据的一列或多列。
- 为策略列命名。您将在策略条件中使用此名称。
- 对于策略适用的每个表,使用下拉菜单选择映射到策略列的表列。
- 为要在策略条件中使用的尽可能多的策略列重复此过程。
提示:您可以不使用“+添加要映射的列”按钮,而是开始在策略条件区域中键入计算并使用自动完成功能来选择列名称,该名称随后将填充步骤 1 下的策略列信息。
使用策略表中的策略列的示例
- “Sales”(销售额)表有一个“[Salesperson]”(销售人员)列,“Region”(区域)表有一个“[SalesRep]”(销售代表)列。“Salesperson”(销售人员)和“SalesRep”(销售代理)数据与您站点上的 Tableau 用户的全名相匹配。
- 您希望按“Salesperson”(销售人员)筛选“Sales”(销售额)和“Region”(区域)数据,因此将策略列命名为“Salesperson”(销售人员),然后将“Sales”(销售额)中的“Salesperson”(销售人员)列和“Region”(区域)中“SalesRep”列映射到“Salesperson”(销售人员)策略列。
- 然后编写策略条件来筛选两个表。使用“[Salesperson]”(销售人员)策略列和 FULLNAME() 用户函数,以便每个用户只能看到自己的数据。
使用权利表中的策略列进行筛选
当策略表不包含您可以筛选的列时,将使用权利表。您可以使用权利表将数据表中的列映射到权利表中的列。注意以下各项:
- 确保包括权利表作为虚拟连接中的一个表。您可以将来自任何连接或数据库的表用作中央权利表,以保护许多其他数据库中的表。在某些情况下,与您要保护的表位于同一数据库中的权利表可能存在潜在的安全风险,因为它可能会泄露员工数据。在不同的数据库中拥有一个权利表可以更容易地控制权限,例如,授予某人访问数据库的权限。
- 如果您不希望虚拟连接用户看到授权表,您可以切换“表”选项卡上“可见性”列中的设置以隐藏它。隐藏后,权利表仍可用于策略筛选,但不能在可视化项或工作簿数据源中使用。
注意:权利表不支持直接连接到流程输出(.hyper 文件)。流程输出必须直接写入数据库。
使用权利表筛选数据:
- 首添加要应用数据策略的数据表。执行以下操作之一:
- 双击表名称。
- 单击表名称附近的下拉箭头,并选择“使用策略管理表”。
- 或者,将该表拖到右侧并将其放在“添加为策略表”上。
- 将表添加到策略后,盾牌图标 将出现在左侧窗格中表名的右侧,表明它是一个策略表。
- 选择权利表,然后:
- 单击下拉箭头,并选择“用作权利表”表。
- 或者,将该表拖到右侧并将其放在“添加为权利表”上。
- 对于策略应用到的每个表,单击下拉菜单并选择列以将策略表映射到权利表。
使用权利表中的策略列的示例
- 您要筛选的数据具有“EMP_ID”列,但没有员工姓名列。但是,您有另一个表,其中包含“EMP_ID”和员工的“FULL NAME”(全名)列。并且,员工“FULL NAME”(全名)列中的值与您站点上 Tableau 用户的全名相匹配。
- 您可以将“Employees”(员工)表作为权利表添加到策略中,然后将策略表列名称“EMP_ID”映射到每个表的权利列名称“EMP_ID”。
- 然后在您的策略条件中使用 FULLNAME() 函数将 Tableau Server 用户的全名与权利表的“[FULL NAME]”(全名)列(即策略列)匹配,以便每个用户只能看到他们自己的数据。
编写策略条件
创建数据策略的最后一步是编写策略条件,它是用于定义行级访问权限的计算或表达式。策略条件通常用于通过用户函数限制对用户或组的访问。
一个策略条件:
- 在数据策略中是必需的。
- 评估结果必须为真或假。
- 当策略条件为真时显示行。
当您关闭策略选项卡时,它不会放弃您的工作。
策略条件示例
仅显示“Region”(区域)列值为“North”(北部)的行:
[Region] = "North"
使登录用户能够查看用户名与“EmployeeName”(员工姓名)中的值匹配的行:
FULLNAME() = [EmployeeName]
使“Managers”(经理)组的成员能够查看所有行,而用户只能看到其用户名与“employee_name”(员工姓名)列中的值匹配的行:
ISMEMBEROF('Managers') OR USERNAME() = [employee_name]
策略条件中支持的 Tableau 函数
策略条件支持 Tableau 函数的子集:
- 逻辑(与 null 相关的除外)
- 字符串
- 用户
- 日期
- 数字:MIN、MID、MAX
若要查看支持哪些特定函数,请在虚拟连接编辑器中的“数据策略”选项卡上,查看右侧的“参考”面板。
注意:如果虚拟连接具有包含用户函数(链接在新窗口中打开)(例如,USERNAME()
)的数据策略,并且您从工作簿或数据源连接到它并在那里创建数据提取,则数据提取将仅包含与创建数据提取时的虚拟连接数据策略匹配的行。若要利用数据策略中包含用户函数的虚拟连接,请使用从工作簿或数据源到虚拟连接的实时连接,而不是数据提取。
谁可以执行此操作
若要创建数据策略,您必须
- 拥有虚拟连接所连接到的数据库的凭据,并且
- 是服务器或站点管理员,或是 Creator。
后续步骤
创建数据策略后,下一步是验证它是否按预期方式工作。请参见使用“以用户身份预览”测试行级安全性。或者,如果您准备与他人共享虚拟连接及其数据策略,请参见发布虚拟连接并设置权限。
资源
有关计算的详细信息,请参见 Tableau Desktop 和 Web 制作帮助中的了解 Tableau 中的计算(链接在新窗口中打开)。
有关用户函数的详细信息,请参见 Tableau Desktop 和 Web 制作帮助中的用户函数(链接在新窗口中打开)。
有关 Tableau 中其他行级别安全性选项的信息,请参见 Tableau Server 帮助中的 Tableau 中的行级安全性选项概述(链接在新窗口中打开)。