

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

# 的已知问题 AWS Lake Formation
<a name="limitations"></a>

请查看这些已知问题 AWS Lake Formation。

**Topics**
+ [对表元数据筛选的限制](#issue-table-metadata-avro)
+ [重命名排除列时出现问题](#issue-rename-column)
+ [删除 CSV 表中的列时出现问题](#issue-csv-schema)
+ [必须在公共路径下添加表分区](#issue-table-partitions)
+ [在工作流创建期间创建数据库时出现问题](#issue-create-table-permission)
+ [删除然后重新创建用户时出现问题](#issue-recreate-user)
+ [数据目录 API 操作不会更新 `IsRegisteredWithLakeFormation` 参数的值](#issue-get-tables-parameter)
+ [Lake Formation 操作不支持 AWS Glue 架构注册表](#not-support-GlueSchemaRegistry.title)

## 对表元数据筛选的限制
<a name="issue-table-metadata-avro"></a>

AWS Lake Formation 列级权限可用于限制对表中特定列的访问权限。当用户使用控制台或 API（如 `glue:GetTable`）检索有关表的元数据时，表对象中的列列表仅包含他们有权访问的字段。请务必要了解这种元数据筛选的相关限制。

尽管 Lake Formation 为集成服务提供了有关列权限的元数据，但实际筛选查询响应中的列是相关集成服务的责任。支持列级筛选的 Lake Formation 客户端（包括 Amazon Athena、Amazon Redshift Spectrum 和 Amazon EMR）根据向 Lake Formation 注册的列权限筛选数据。用户将无法读取他们不应访问的任何数据。目前，AWS Glue ETL 不支持列筛选。

**注意**  
 EMR 集群并非完全由 AWS管理。因此，EMR 管理员有责任妥善保护集群，以避免未经授权的数据访问。

某些应用程序或格式可能会将其他元数据（包括列名和类型）作为表属性存储在 `Parameters` 映射中。这些属性将未经修改返回，并且可由对任何列具有 `SELECT` 权限的任何用户访问。

例如，[Avro](https://docs.aws.amazon.com/athena/latest/ug/supported-serdes.html) 将表架构的 JSON 表示形式SerDe存储在名为的表属性中`avro.schema.literal`，该属性可供所有有权访问该表的用户使用。建议避免在表属性中存储敏感信息，并注意用户可以了解 Avro 格式表的完整架构。此限制特定于表的元数据。

AWS Lake Formation 如果调用者对表中的所有列都没有`SELECT`权限，则删除以响应`glue:GetTable`或类似请求`spark.sql.sources.schema`时开头的所有表属性。这样可以防止用户访问有关使用 Apache Spark 创建的表的其他元数据。在 Amazon EMR 上运行时，Apache Spark 应用程序仍然可以读取这些表，但可能不会应用某些优化，并且不支持区分大小写的列名。如果用户有权访问表中的所有列，则 Lake Formation 将返回未修改的表以及所有表属性。

## 重命名排除列时出现问题
<a name="issue-rename-column"></a>

如果使用列级权限排除列，然后重命名该列，则该列将不再被排除在查询之外，例如 `SELECT *`。

## 删除 CSV 表中的列时出现问题
<a name="issue-csv-schema"></a>

如果您使用 CSV 格式创建数据目录表，然后从架构中删除列，则查询可能会返回错误数据，并且可能无法遵守列级权限。

解决方法：改为创建新表。

## 必须在公共路径下添加表分区
<a name="issue-table-partitions"></a>

Lake Formation 期望表的所有分区都位于表的位置字段中设置的公共路径下。当您使用爬网程序将分区添加到目录时，这会无缝工作。但是，如果手动添加分区，并且这些分区不在父表中设置的位置下，则无法访问数据。

## 在工作流创建期间创建数据库时出现问题
<a name="issue-create-table-permission"></a>

使用 Lake Formation 控制台从蓝图创建工作流时，您可以创建目标数据库（如果该数据库不存在）。执行此操作时，登录的用户将获得对所创建数据库的 `CREATE_TABLE` 权限。但是，工作流生成的爬网程序在尝试创建表时会承担工作流的角色。由于该角色不具有对数据库的 `CREATE_TABLE` 权限，因此此操作会失败。

解决方法：如果您在工作流设置期间通过控制台创建数据库，则在运行工作流之前，必须向与工作流关联的角色授予对刚刚创建的数据库的 `CREATE_TABLE` 权限。

## 删除然后重新创建用户时出现问题
<a name="issue-recreate-user"></a>

以下情况会导致 `lakeformation:ListPermissions` 返回错误的 Lake Formation 权限：

1. 创建用户并授予 Lake Formation 权限。

1. 删除用户。

1. 重新创建具有相同名称的用户。

`ListPermissions` 返回两个条目，一个用于旧用户，一个用于新用户。如果您尝试撤销授予旧用户的权限，则系统会撤消新用户的权限。

## 数据目录 API 操作不会更新 `IsRegisteredWithLakeFormation` 参数的值
<a name="issue-get-tables-parameter"></a>

存在一个已知限制，即数据目录 API 操作（如 `GetTables` 和 `SearchTables`）不会更新 `IsRegisteredWithLakeFormation` 参数的值，并返回默认值 false。建议使用 `GetTable` API 查看 `IsRegisteredWithLakeFormation` 参数的正确值。

## Lake Formation 操作不支持 AWS Glue 架构注册表
<a name="not-support-GlueSchemaRegistry.title"></a>

Lake Formation 操作不支持包含`SchemaReference`在[架构注册 AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/schema-registry.html)表中使用的表。`StorageDescriptor`