将行级安全性与其他 BigQuery 功能搭配使用
本文档介绍如何将行级访问权限安全性与其他 BigQuery 功能搭配使用。
在阅读本文档之前,请先阅读以下内容以熟悉行级安全性:BigQuery 行级安全性简介和使用行级安全性。
TRUE
过滤条件
行级访问权限政策可以过滤您在运行查询时看到的结果数据。如需运行非查询操作(例如 DML),您需要对表中的所有行具有完整访问权限。通过使用行访问政策并将过滤条件表达式设置为 TRUE
来授予完整访问权限。此行级访问权限政策称为 TRUE
过滤条件。
任何用户都可以被授予 TRUE
过滤条件访问权限,包括服务账号。
非查询操作的示例如下:
- 其他 BigQuery API,例如 BigQuery Storage Read API。
- 某些
bq
命令行工具命令,例如bq head
命令。 - 复制表
示例
创建 TRUE
过滤条件
CREATE ROW ACCESS POLICY all_access ON project.dataset.table1
GRANT TO ("group:all-rows-access@example.com")
FILTER USING (TRUE);
可与 TRUE
过滤条件搭配使用的功能
复制作业
如需复制表(该表具有一个或多个行级访问权限政策),您必须先获得授予对源表的 TRUE
过滤条件访问权限。源表的所有行级访问权限政策也会复制到新的目标表。如果您将没有行级访问权限政策的源表复制到具有行级访问权限政策的目标表,则系统会从目标表中移除行级访问权限政策(除非使用了 --append_table
标志或设置了 "writeDisposition": "WRITE_APPEND"
)。
允许跨区域复制,并复制所有政策。如果查询在子查询政策中包含无效的表引用,则在复制完成后,后续查询可能会中断。
表的行级访问权限政策必须具有唯一名称。如果在复制期间行级访问权限政策名称发生冲突,将导致无效的输入错误。
复制具有行级访问权限政策的表所需的权限
如需复制具有一个或多个行级访问策略的表,除了复制没有行级访问策略的表所需的权限之外,您还必须具有以下权限。
权限 | 资源 |
---|---|
bigquery.rowAccessPolicies.list
|
源表。 |
bigquery.rowAccessPolicies.getIamPolicy
|
源表。 |
TRUE 过滤条件 |
源表。 |
bigquery.rowAccessPolicies.create
|
目标表。 |
bigquery.rowAccessPolicies.setIamPolicy
|
目标表。 |
BigQuery API 中的 Tabledata.list
您需要拥有 TRUE
过滤条件访问权限,才能在具有行级访问权限政策的表上使用 BigQuery API 中的 tabledata.list
方法。
DML
如需执行更新具有行级访问权限政策的表的 DML 语句,您需要具有该表的 TRUE
过滤条件。
特别是,MERGE
语句会按如下方式与行级访问权限政策搭配使用:
- 如果目标表包含行级访问权限政策,则您需要对目标表具备
TRUE
过滤条件访问权限。 - 如果源表包含行级访问权限政策,则
MERGE
语句仅对用户可见的行执行操作。
表快照
表快照支持行级安全性。在复制具有行级访问权限政策的表时所需的权限中介绍了基表(源表)和表快照(目标表)所需的权限。
包含 JSON 列的 BigQuery 表
无法对 JSON 列应用行级访问权限政策。如需详细了解行级安全性的限制,请参阅限制。
提取作业
如果表具有行级访问权限政策,则在运行提取作业时,只有您可以查看的数据会导出到 Cloud Storage。
分区表和聚簇表
行级安全性不参与查询剪枝 (pruning),这是分区表的一项功能。
虽然行级安全性与分区表和聚簇表兼容,但在剪除分区期间系统不会应用过滤行数据的行级访问权限政策。您仍然可以通过指定对分区列执行操作的 WHERE
子句,对使用行级安全性的表执行分区剪除操作。同样,行级访问权限政策本身不会为针对聚簇表的查询带来任何性能优势,不过,这些政策也不会干扰您应用的其他过滤。
查询删减是在行级访问权限政策执行期间结合使用过滤条件和政策来执行的。
重命名表
您无需使用 TRUE
过滤条件访问权限来重命名设有一个或多个行访问权限政策的表。您可以使用 DDL 语句重命名表。
作为替代方法,您还可以复制表并为目标表指定另一名称。如果源表具有行级访问权限政策,请参阅本页面上的表复制作业以了解详情。
流式传输更新
如需使用变更数据捕获执行流式传输表 UPDATE
或 DELETE
操作,您必须拥有 TRUE
过滤条件访问权限。
时间旅行
只有表管理员才能访问具有或以前具有行级访问政策的表的历史数据。如果其他用户对具有行级访问权限的表使用时间旅行修饰器,则会收到 access
denied
错误。如需了解详情,请参阅时间旅行和行级访问权限。
视图和物化视图
视图或物化视图中显示的数据会根据底层源表的行级访问权限政策进行过滤。
此外,当具体化视图派生自具有行级访问政策的底层表时,查询性能与直接查询源表相同。换句话说,如果源表具有行级安全性,您将看不到查询物化视图相较于查询源表的典型性能优势。
您不能在行级访问权限政策中引用视图或具体化视图。
通配符查询
对具有行级访问权限政策的表进行通配符查询将会失败,并显示 INVALID_INPUT
错误。
后续步骤
- 如需了解行级访问权限政策的最佳做法,请参阅 BigQuery 中行级安全性的最佳做法。