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

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

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

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

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

准备工作

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  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. Verify that billing is enabled for your Google Cloud project.

  7. Enable the BigQuery and Dataform APIs.

    Enable the APIs

向表或视图授予 BigQuery 角色

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

如需向所选表或视图授予 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 角色列表。

    • 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 角色

如需从表或视图中撤消 BigQuery 角色,请将包含 REVOKE DCL 语句post_operations 块添加到所选表或视图的 .sqlx 定义文件中。

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

  1. 在 Google Cloud 控制台中,进入 Dataform 页面。

    前往 Dataform 页面

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

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

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

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

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

    替换以下内容:

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

  7. 可选:点击格式

  8. 执行表或视图。

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

以下代码示例展示了从表中某个用户撤消 BigQuery 查看者角色:

config { type: "table" }

SELECT ...

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

集中管理表和视图的 BigQuery 角色

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

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

  1. 在 Google Cloud 控制台中,进入 Dataform 页面。

    前往 Dataform 页面

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

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

  4. 点击创建文件

  5. Add a file path 字段中,在 definitions/ 后面输入文件名称,后跟 .sqlx。例如 definitions/table-access.sqlx

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

  6. 点击创建文件

  7. 文件窗格中,展开 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_TYPETABLEVIEW
    • RESOURCE_NAME:表或视图的名称。
    • USER_LIST:为其授予或撤消角色的以英文逗号分隔的用户列表。如需查看有效格式的列表,请参阅 user_list
  9. 根据需要添加 GRANTREVOKE 语句。

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

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

  10. 可选:点击格式

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

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

后续步骤