使用 AWS Glue Data Catalog 视图
该功能为预览版,可能会发生变化。有关更多信息,请参阅 AWS 服务条款 |
当您想跨 AWS 服务(例如 Amazon Athena 和 Amazon Redshift)使用单一通用视图时,请使用 AWS Glue Data Catalog 视图。在 Data Catalog 视图中,访问权限由创建视图的用户(而不是查询视图的用户)定义。这种授权方法称为定义程序语义。
以下使用案例展示如何使用 Data Catalog 视图。
-
优化访问控制 – 您可以创建视图,根据用户所需的权限级别来限制数据访问。例如,您可以使用 Data Catalog 视图来防止非人力资源(HR)部门的员工查看个人身份信息。
-
确保记录完整 – 通过对 Data Catalog 视图应用某些筛选器,您可以确保 Data Catalog 视图中的数据记录始终完整。
-
增强安全性 – 在 Data Catalog 视图中,用于创建视图的查询定义必须完好无损,才能创建视图。这样的话,Data Catalog 视图不易受到恶意行为者的 SQL 命令的影响。
-
防止访问基础表 – 定义程序语义允许用户访问视图,而无需向他们提供基础表。只有定义视图的用户才需要访问表。
Data Catalog 视图定义存储于 AWS Glue Data Catalog。这意味着,您可以使用 AWS Lake Formation 通过资源授权、列授权或基于标签的访问控制来授予访问权限。有关在 Lake Formation 中授予和撤消访问权限的更多信息,请参阅《AWS Lake Formation Developer Guide》中的 Granting and revoking permissions on Data Catalog resources。
权限
Data Catalog 视图需要三个角色:Lake Formation Admin
、Definer
和 Invoker
。
-
Lake Formation Admin
– 有权配置所有 Lake Formation 权限。 -
Definer
– 创建 Data Catalog 视图。Definer
角色必须对视图定义引用的所有基础表具有完全的可授予SELECT
权限。 -
Invoker
– 可以查询 Data Catalog 视图或检查其元数据。若要显示查询的调用者,可以使用invoker_principal()
DML 函数。有关更多信息,请参阅 invoker_principal()。
Definer
角色的信任关系必须允许 AWS Glue 和 Lake Formation 服务主体采取 sts:AssumeRole
操作,如以下示例所示。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "glue.amazonaws.com", "lakeformation.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
还需要针对 Athena 访问的 IAM 权限。有关更多信息,请参阅 Amazon Athena 的 AWS 托管策略。
限制
-
Data Catalog 视图不能引用其他视图。
-
在视图定义中,您最多可以引用 10 个表。
-
基础表必须使用 Lake Formation 注册。
-
DEFINER
主体只能是 IAM 角色。 -
DEFINER
角色必须对基础表具有完全的SELECT
(可授予)权限。 -
不支持
UNPROTECTED
Data Catalog 视图。 -
视图定义中不支持用户定义的函数(UDF)。
-
Athena 联合数据来源不能用于 Data Catalog 视图。
-
外部 Hive 元存储不支持 Data Catalog 视图。
-
Athena 在检测到过时视图时会显示错误消息。发生以下一种情况时,会报告过时的视图:
-
视图引用了不存在的表或数据库。
-
在引用的表中进行了架构或元数据更改。
-
删除了引用的表并使用不同的架构或配置重新创建。
-
创建 Data Catalog 视图
以下示例语法展示 Definer
角色的用户如何创建 orders_by_date
Data Catalog 视图。该示例假设 Definer
角色对 default
数据库中的 orders
表具有完全 SELECT
权限。
CREATE PROTECTED MULTI DIALECT VIEW orders_by_date SECURITY DEFINER AS SELECT orderdate, sum(totalprice) AS price FROM orders WHERE order_city = 'SEATTLE' GROUP BY orderdate
查询 Data Catalog 视图
视图创建后,Lake Formation
Admin
可以向 Invoker
主体授予对 Data Catalog 视图的 SELECT
权限。然后,Invoker
主体无需访问视图所引用的基础基表,即可查询视图。以下是 Invoker
查询示例。
SELECT * from orders_by_date where price > 5000
更新 Data Catalog 视图
Lake Formation Admin
或 Definer
可以使用 ALTER VIEW
UPDATE DIALECT
语法来更新视图定义。以下示例修改视图定义,从 returns
表(而不是 orders
表)中选择列。
ALTER VIEW orders_by_date UPDATE DIALECT AS SELECT return_date, sum(totalprice) AS price FROM returns WHERE order_city = 'SEATTLE' GROUP BY orderdate
有关用于创建和管理 Data Catalog 视图的语法的更多信息,请参阅 Glue Data Catalog 视图语法。