使用 IAM 控制对各个表的访问权限

本文档介绍如何针对各个 Dataform 表和视图授予和撤消 BigQuery Identity and Access Management (IAM) 角色。

Dataform 和 BigQuery 使用 IAM 进行访问权限控制。如需详细了解 IAM 中的 Dataform 角色和权限,请参阅使用 IAM 控制访问权限

Dataform 在执行表或视图时,会在 BigQuery 中创建资源。在 Dataform 中进行开发期间,您可以向各个表和视图授予 BigQuery 角色,以便在执行后控制其在 BigQuery 中的访问权限。

如需详细了解如何授予和撤消对资源的访问权限,请参阅授予对资源的访问权限

准备工作

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  3. 确保您的 Google Cloud 项目已启用结算功能

  4. 启用 BigQuery and Dataform API。

    启用 API

  5. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  6. 确保您的 Google Cloud 项目已启用结算功能

  7. 启用 BigQuery and Dataform API。

    启用 API

向表或视图授予 BigQuery 角色

您可以向 Dataform 中的表或视图授予 BigQuery 角色,只需将包含 GRANT DCL 语句post_operations 块添加到所选表或视图的 .sqlx 定义文件即可。

如需向所选表或视图授予 BigQuery 角色,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,转到 Dataform 页面。

    转到 Dataform 页面

  2. 选择代码库,然后选择工作区。

  3. Files 窗格中,展开 definitions/ 目录。

  4. 选择要授予访问权限的表或视图的 .sqlx 定义文件。

  5. 在文件中输入以下代码段:

    post_operations {
        GRANT "ROLE_LIST"
        ON ${self()}
        TO "USER_LIST"
    }
    

    替换以下内容:

    • ROLE_LIST:您要授予的 BigQuery 角色或以英文逗号分隔的 BigQuery 角色列表
    • USER_LIST:授予角色的用户的逗号分隔列表

      如需查看有效格式的列表,请参阅 user_list

  6. 可选:点击格式

  7. 执行表或视图。

  8. 如果您授予对增量表的访问权限,请在首次执行后从表定义文件中移除 GRANT 语句。

以下代码示例展示了针对表向用户授予的 BigQuery Viewer 角色:

config { type: "table" }

SELECT ...

post_operations {
  GRANT `roles/bigquery.dataViewer` ON ${self()} TO "user:222larabrown@gmail.com"
}

从表或视图中撤消 BigQuery 角色

您可以从表或视图撤消 BigQuery 角色,方法是向所选表或视图的 .sqlx 定义文件添加包含 REVOKE DCL 语句post_operations 块。

如需从所选表或视图撤消 BigQuery 角色,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,转到 Dataform 页面。

    转到 Dataform 页面

  2. 选择代码库,然后选择工作区。

  3. Files 窗格中,展开 definitions/ 目录。

  4. 选择要撤消其访问权限的表或视图的 .sqlx 定义文件。

  5. post_operations 代码块中,输入以下 REVOKE 语句:

        REVOKE "ROLE_LIST"
        ON ${self()}
        TO "USER_LIST"
    

    替换以下内容:

    • ROLE_LIST:您要撤消的 BigQuery 角色或以英文逗号分隔的 BigQuery 角色列表。
    • USER_LIST:撤消角色的用户的列表(以英文逗号分隔)。如需查看有效格式的列表,请参阅 user_list
  6. 如需撤消在文件的 GRANT 语句中授予的访问权限,请将 GRANT 语句替换为 REVOKE 语句。

    Removing the `GRANT` statement without adding the `REVOKE` statement
    does not revoke access.
    
  7. 可选:点击格式

  8. 执行表或视图。

  9. 如果您撤消了对增量表的访问权限,请在首次执行后从表定义文件中移除 REVOKE 语句。

以下代码示例展示了针对表的用户撤消的 BigQuery Viewer 角色:

config { type: "table" }

SELECT ...

post_operations {
  REVOKE `roles/bigquery.dataViewer` ON ${self()} FROM "user:222larabrown@gmail.com"
}

统一管理表和视图的 BigQuery 角色

如需控制 BigQuery 对单个位置中的各个表和视图的访问权限,您可以使用 GRANTREVOKE DCL 语句创建专用 type: "operations" 文件。

如需在单个 type: "operations" 文件中管理 BigQuery 表访问权限,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,转到 Dataform 页面。

    转到 Dataform 页面

  2. 选择代码库,然后选择工作区。

  3. Files 窗格的 definitions/ 旁边,点击 More 菜单。

  4. 点击创建文件

  5. 添加文件路径字段中,输入文件的名称,在 definitions/ 后面加上 .sqlx。例如 definitions/table-access.sqlx

    文件名只能包含数字、字母、连字符和下划线。

  6. 点击创建文件

  7. Files 窗格中,展开 definitions/ 目录,然后选择新创建的文件。

  8. 在文件中输入以下代码段:

      config { type: "operations" }
    
      GRANT "ROLE_LIST" ON RESOURCE_TYPE RESOURCE_NAME TO "USER_LIST"
    
      REVOKE "ROLE_LIST" ON { "<var>" }}RESOURCE_TYPE RESOURCE_NAME TO "USER_LIST"
    

    替换以下内容:

    • ROLE_LIST:您要授予或撤消的 BigQuery 角色或以英文逗号分隔的 BigQuery 角色列表。
    • RESOURCE_TYPE:资源的类型,即 TABLEVIEW
    • RESOURCE_NAME:表或视图的名称。
    • USER_LIST:授予或撤消角色的用户的逗号分隔列表。如需查看有效格式的列表,请参阅 user_list
  9. 根据需要添加 GRANTREVOKE 语句。

    1. 如需撤消在文件的 GRANT 语句中授予的访问权限,请将 GRANT 语句替换为 REVOKE 语句。

      在不添加 REVOKE 语句的情况下移除 GRANT 语句不会撤消访问权限。

  10. 可选:点击格式

  11. 每次更新后执行该文件。

    1. 如果您授予或撤消了对增量表的访问权限,请在首次执行语句之后,从文件中移除 GRANTREVOKE 语句。

后续步骤