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

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

Dataform 和 BigQuery 均使用 IAM 以实现访问权限控制如需详细了解 Dataform 角色和 权限,请参阅 使用 IAM 控制访问权限

当 Dataform 执行表或视图时,它会在 BigQuery。在 Dataform 中进行开发期间,您可以授予 对各个表和视图拥有 BigQuery 角色,以控制其访问权限 在 BigQuery 中运行。

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

准备工作

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

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

  4. Enable the BigQuery and Dataform APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

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

  7. Enable the BigQuery and Dataform APIs.

    Enable the APIs

为表或视图授予 BigQuery 角色

您可以通过以下方式向 Dataform 中的表或视图授予 BigQuery 角色: 添加一个 post_operations 代码块, GRANT DCL 语句 添加到所选表或视图的 .sqlx 定义文件。

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

  1. 在 Google Cloud 控制台中,前往 Dataform 页面。

    转到 Dataform 页面

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

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

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

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

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

    替换以下内容:

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

    • RESOURCE_TYPETABLEVIEW

    • USER_LIST:以逗号分隔的用户列表, 角色。

      有关有效格式的列表,请参阅 user_list

  6. 可选:点击格式

  7. 执行表或视图。

  8. 如果您授予对增量表的访问权限,请移除 GRANT 语句 从表定义文件中导入。

以下代码示例显示了 BigQuery Viewer 授予用户的表:

config { type: "table" }

SELECT ...

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

撤消表或视图中的 BigQuery 角色

您可以通过向表或视图添加 post_operationsREVOKE DCL 语句。 添加到所选表或视图的 .sqlx 定义文件。

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

  1. 在 Google Cloud 控制台中,前往 Dataform 页面。

    转到 Dataform 页面

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

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

  4. 选择表或视图的 .sqlx 定义文件 您要撤消访问权限的组织部门。

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

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

    替换以下内容:

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

    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 TABLE ${self()}
  FROM "user:222larabrown@gmail.com"
}

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

控制 BigQuery 对单个表和视图的访问权限 您可以使用以下命令创建一个专用的 type: "operations" 文件: GRANTREVOKE DCL 语句。

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

  1. 在 Google Cloud 控制台中,前往 Dataform 页面。

    转到 Dataform 页面

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

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

  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 角色列表 您要授予或撤消的 BigQuery 角色。
    • RESOURCE_TYPETABLEVIEW
    • RESOURCE_NAME:表或视图的名称。
    • USER_LIST:以逗号分隔的用户列表, 被授予或撤消的角色。有关有效格式的列表,请参阅 user_list
  9. 根据需要添加 GRANTREVOKE 语句。

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

      移除 GRANT 语句,但不添加 REVOKE 语句 不会撤消访问权限。

  10. 可选:点击格式

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

    1. 如果您授予或撤消了增量表的访问权限,请移除GRANTREVOKE 语句。

后续步骤