

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用采用基于用户的规则的行级别安全性限制对数据集的访问
使用基于用户的规则


|  | 
| --- |
|  适用于：企业版  | 

在 Amazon Quick 的企业版中，您可以通过配置行级安全 (RLS) 来限制对数据集的访问。在共享数据集之前或之后，您可以执行该操作。当您使用 RLS 与数据集所有者共享数据集时，他们仍然可以看到所有数据。但是，当您与读者共享该数据集时，他们只能看到受权限数据集规则限制的数据。通过添加行级别安全性，您可以进一步控制其访问权限。

**注意**  
将 SPICE 数据集应用于行级别安全性时，数据集中的每个字段最多可以包含 2,047 个 Unicode 字符。如果字段包含的内容超过该限额，则会在摄取过程中被截断。要了解有关 SPICE 数据限额的更多信息，请参阅[导入数据的 SPICE 限额](data-source-limits.md#spice-limits)。

为此，您需要创建一个查询或文件，其中包含一列用于标识用户或群组。你可以使用`UserName`和`GroupName`，也可以使用`UserARN`和`GroupARN`。您可以将这看作是为该用户或组*添加规则*。然后您可以为要授予或限制访问权限的每个字段向查询或文件添加一个列。对于您添加的每个用户名或组名，请添加每个字段的值。您可以使用 NULL (没有值) 表示所有值。要查看示例数据集规则，请参阅[为行级别安全性创建数据集规则](#create-data-set-rules-for-row-level-security)。

要应用数据集规则，请将规则作为权限数据集添加到您的数据集。请记住以下几点：
+ 权限数据集不能包含重复值。评估如何应用规则时，将忽略重复项。
+ 指定的每个用户或组只能看到*匹配*数据集规则中字段值的行。
+ 如果为某个用户或组添加规则，并将其余列保留为“没有值”（NULL），则表示您向其授予访问所有数据的权限。
+ 如果不为用户或组添加规则，则该用户或组无法看到任何数据。
+ 应用于每个用户的完整规则记录集不得超过 999 个。此限制适用于直接分配给用户名的规则总数以及通过组名称分配给用户的任何规则。
+ 如果字段包含逗号 (,)，Amazon Quick 会将每个用逗号分隔的单词视为筛选器中的单个值。例如，在 `('AWS', 'INC')` 中，`AWS,INC` 被视为两个字符串：`AWS` 和 `INC`。要使用 `AWS,INC` 筛选，请在权限数据集中用双引号将字符串包装起来。

  如果受限数据集是一个 SPICE 数据集，则每个用户对每个受限字段应用的筛选值数量不能超过 19.2 万个。这适用于直接分配给用户名的筛选条件值总数以及通过组名称分配给用户的任何筛选条件值。

  如果受限数据集是直接查询数据集，则每个用户应用的筛选值数量因数据来源而异。

  超过筛选值限制可能会导致视觉渲染失败。我们建议您在受限数据集中添加一个附加列，以便根据原始受限列将行分成几组，从而缩短筛选条件列表。

Amazon Quick 将空格视为文字值。如果您限制的字段中有一个空格，则数据集规则适用于这些行。Amazon Quick 将两个 NULLs 空白（空字符串 “”）都视为 “无值”。NULL 是一个空字段值。

根据数据集的具体数据来源，您可以配置直接查询来访问权限表。以空格分隔的词不需要用引号分隔。如果您使用直接查询，您可以轻松更改原始数据来源中的查询。

您也可以从文本文件或电子表格中上传数据集规则。如果您使用的是逗号分隔值 (CSV) 文件，请不要在给定的行中包含任何空格。以空格分隔的词需要用引号分隔。如果使用基于文件的数据集规则，请通过在数据集的权限设置中覆盖现有规则来应用任何更改。

在 “数据” 屏幕中，受限制**的数据**集标有 “**受**限制” 一词。

从已激活 RLS 规则的父数据集创建的子数据集，将保留与父数据集相同的 RLS 规则。您可以向子数据集添加更多 RLS 规则，但不能移除该数据集继承自父数据集的 RLS 规则。

只有通过直接查询，才能创建从已激活 RLS 规则的父数据集创建的子数据集。SPICE 不支持继承父数据集的 RLS 规则的子数据集。

行级别安全性仅适用于包含文本数据（string、char、varchar 等）的字段。它目前不适用于日期或数字字段。使用行级别安全性（RLS）的数据集不支持异常检测。

## 为行级别安全性创建数据集规则


要创建权限文件或查询用作数据集规则，请按照以下过程操作。

**创建权限文件或查询用作数据集规则**

1. 创建一个文件或查询，其中包含适用于行级别安全性的数据集规则（权限）。

   字段顺序至关紧要。不过，所有字段区分大小写。确保它们与字段名称和值完全匹配。

   结构应类似于下列项目之一。确保您至少具有一个标识用户或组的字段。您可以包含两者，但只需要一个，并且一次只使用一个。您可以为用户或组所用的字段选择任意名称。
**注意**  
如果您要指定群组，请仅使用 Amazon Quick 群组或 Microsoft AD 群组。

   以下示例显示了一个包含组的表。    
[\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/quick/latest/userguide/restrict-access-to-a-data-set-using-row-level-security.html)

   以下示例演示了一个包含用户名的表。    
[\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/quick/latest/userguide/restrict-access-to-a-data-set-using-row-level-security.html)

   以下示例显示了一个包含用户和群组 Amazon 资源名称 (ARNs) 的表。    
[\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/quick/latest/userguide/restrict-access-to-a-data-set-using-row-level-security.html)

   如果您使用 .csv 文件，结构应与以下某个示例相似。

   ```
   UserName,SalesRegion,Segment
   AlejandroRosalez,EMEA,"Enterprise,SMB,Startup"
   MarthaRivera,US,Enterprise
   NikhilJayashankars,US,SMB
   PauloSantos,US,Startup
   SaanviSarkar,APAC,"SMB,Startup"
   sales-tps@example.com,"",""
   ZhangWei,APAC-Sales,"Enterprise,Startup"
   ```

   ```
   GroupName,SalesRegion,Segment
   EMEA-Sales,EMEA,"Enterprise,SMB,Startup"
   US-Sales,US,Enterprise
   US-Sales,US,SMB
   US-Sales,US,Startup
   APAC-Sales,APAC,"SMB,Startup"
   Corporate-Reporting,"",""
   APAC-Sales,APAC,"Enterprise,Startup"
   ```

   ```
   UserARN,GroupARN,SalesRegion
   arn:aws:quicksight:us-east-1:123456789012:user/Bob,arn:aws:quicksight:us-east-1:123456789012:group/group-1,APAC
   arn:aws:quicksight:us-east-1:123456789012:user/Sam,arn:aws:quicksight:us-east-1:123456789012:group/group-2,US
   ```

   以下是一个 SQL 示例。

   ```
   /* for users*/
   	select User as UserName, SalesRegion, Segment
   	from tps-permissions;
   
   	/* for groups*/
   	select Group as GroupName, SalesRegion, Segment
   	from tps-permissions;
   ```

1. 根据数据集规则创建数据集。要确保您可以轻松找到该数据集，请为其指定有意义的名称，例如 **Permissions-Sales-Pipeline**。

## 标记行级别安全性的规则数据集


使用以下过程将数据集适当地标记为规则数据集。

规则数据集是一个标志，用于区分用于行级别安全性的权限数据集和常规数据集。如果权限数据集在 2025 年 3 月 31 日之前应用于常规数据集，则它将在**数据集**登录页面中具有规则数据集标志。

如果权限数据集在 2025 年 3 月 31 日之前未应用于常规数据集，则它将被归类为常规数据集。要将其用作规则数据集，请复制权限数据集并在创建数据集时在控制台上将其标记为规则数据集。选择 “编辑数据集”，然后在选项下选择 “按规则重复数据集”。

要成功将其复制为规则数据集，请确保原始数据集具有：1. 必需的用户元数据或组元数据列；2. 仅字符串类型的列。

要在控制台上创建新的规则数据集，请在“新建数据集”下拉列表中选择“新建规则数据集”。以编程方式创建规则数据集时，请添加以下参数：[UseAs: RLS\$1R](https://docs.amazonaws.cn/quicksight/latest/APIReference/API_CreateDataSet.html#API_CreateDataSet_RequestSyntax) ULES。这是一个可选参数，仅用于创建规则数据集。一旦通过控制台或以编程方式创建了数据集，并将其标记为规则数据集或常规数据集，就无法更改。

一旦数据集被标记为规则数据集，Amazon Quick 就会对其应用严格的 SPICE 摄取规则。为了确保数据完整性，如果存在无效行或单元格超过长度限制，规则数据集的 SPICE 摄取将会失败。您必须修复摄取问题才能重新启动成功的摄取。严格的摄取规则仅适用于规则数据集。当出现跳过行或字符串截断的情况时，常规数据集不会出现数据集摄取失败。

## 应用行级别安全性


要通过将文件或查询用作包含权限规则的数据集来应用行级别安全性（RLS），请按照以下过程操作。

**使用文件或查询应用行级别安全性**

1. 确认已将您的规则添加为新数据集。如果添加了这些规则，但在数据集列表中看不到这些规则，请刷新屏幕。

1. 在**数据**页面上，选择数据集

1. 在打开的数据集详细信息页面上，为**行级别安全性**选择**设置**。

1. 在打开的**设置行级别安全性**页面上，选择**基于用户的规则**。

1. 从显示的数据集列表中选择自己的权限数据集。

   如果该屏幕上未显示您的权限数据集，请返回到自己的数据集，然后刷新该页面。

1. 对于**权限策略**，选择**授予对数据集的访问权限**。每个数据集仅具有一个活动权限数据集。如果您尝试添加第二个权限数据集，它将覆盖现有的数据集。
**重要**  
在使用行级别安全性时，某些限制适用于 NULL 和空字符串值：  
如果您的数据集在受限制的字段中具有 NULL 值或空字符串（“”），在应用限制后，将忽略这些行。
在权限数据集中，NULL 值和空字符串以相同方式处理。有关更多信息，请参阅下表。
为了防止意外泄露敏感信息，Amazon Quick 跳过了向所有人授予访问权限的空白 RLS 规则。当一行的所有列都没有值时，就会出现*空 RLS 规则*。Quick RLS 将 NULL、空字符串 (“”) 或逗号分隔的空字符串（例如 “、、、”）视为无值。  
跳过空规则后，其他非空 RLS 规则仍然适用。
如果权限数据集只有空规则且所有空规则都被跳过，则任何人都无法访问受此权限数据集限制的任何数据。    
[\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/quick/latest/userguide/restrict-access-to-a-data-set-using-row-level-security.html)

   您与之共享控制面板的任何用户都可以查看其中的所有数据，除非数据集规则限制数据集。

1. 要保存更改，请选择**应用数据集**。然后，在**保存数据集规则？**页面上选择**应用并激活**。权限更改将立即应用于现有用户。

1. （可选）要删除权限，请先从数据集中删除数据集规则。

   确保已删除数据集规则。接下来，选择权限数据集，然后选择**删除数据集**。

   要覆盖权限，请选择新的权限数据集，然后应用该数据集。您可以重复使用相同的数据集名称。但是，请务必在**权限**屏幕中应用新权限来激活这些权限。SQL 查询会动态更新，因此可以在 Amazon Quick 之外对其进行管理。对于查询，权限会在自动刷新直接查询缓存时更新。

从目标数据集中删除基于文件的权限数据集之前，如果已删除该数据集，则受限制的用户无法访问该数据集。在数据集处于该状态时，它仍标记为**受限**。不过，在查看该数据集的**权限**时，您可以看到该数据集没有选择的数据集规则。

要解决该问题，应指定新的数据集规则。创建具有相同名称的数据集不足以解决该问题。您必须在**权限**屏幕中选择新权限数据集。该限制不适用于直接 SQL 查询。