使用 IAM 控制访问权限

本文档介绍了如何在 Dataform 中执行以下操作:

准备工作

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

  7. Enable the BigQuery and Dataform APIs.

    Enable the APIs

向 Dataform 授予所需的访问权限

本部分介绍了如何授予 Dataform 服务账号在 BigQuery 中执行工作流所需的 Identity and Access Management (IAM) 角色。

Dataform 中的服务账号简介

创建第一个 Dataform 仓库时,Dataform 会自动生成一个默认服务账号。Dataform 会使用默认服务账号代表您与 BigQuery 交互。默认情况下,系统不会向默认 Dataform 服务账号授予任何 BigQuery 角色或权限。您必须向默认 Dataform 服务账号授予所需的访问权限。

默认的 Dataform 服务账号 ID 采用以下格式:

service-PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com

PROJECT_NUMBER 替换为您的 Google Cloud 项目的数字 ID。您可以在 Google Cloud 控制台信息中心内找到 Google Cloud 项目 ID。如需了解详情,请参阅识别项目

除了默认的 Dataform 服务账号之外,您还可以使用其他服务账号代表您执行工作流。您可以通过以下方式配置自定义服务账号:

创建 Dataform 代码库或工作流配置时,您可以选择与您的 Google Cloud 项目关联且您有权访问的任何服务账号。您必须为与 Dataform 资源关联的所有服务账号配置所需的权限。

与 Dataform 代码库关联的自定义服务账号仅用于执行该代码库中的工作流。所有其他代码库操作仍由默认 Dataform 服务账号执行。

Dataform 服务账号所需的角色

Dataform 中使用的默认服务账号和自定义服务账号需要具有以下 BigQuery IAM 角色,才能在 BigQuery 中执行工作流:

此外,您还需要向默认 Dataform 服务账号授予 Service Account Token Creator 角色 (roles/iam.serviceAccountTokenCreator),以便该账号可以访问您要在 Dataform 中使用的任何自定义服务账号。

Dataform 服务账号的安全注意事项

向服务账号授予 Dataform 所需的角色时,需要注意以下安全注意事项:

  • 无论 VPC 服务控制功能如何,任何被授予所需角色的服务账号都可能会获得对服务账号所属项目中的 BigQuery 或 Secret Manager 的访问权限。

    如需了解详情,请参阅为 Dataform 配置 VPC Service Controls

  • 拥有 dataform.repositories.create IAM 权限的任何用户都可以使用默认的 Dataform 服务账号和授予该服务账号的所有权限来执行代码。

    如需了解详情,请参阅 Dataform 权限的安全注意事项

如需限制用户或服务账号可以在 BigQuery 中读取或写入的数据,您可以向所选的 BigQuery 数据集或表授予精细的 BigQuery IAM 权限。如需了解详情,请参阅控制对数据集的访问权限控制对表和视图的访问权限

向在 Dataform 中使用的服务账号授予所需的 BigQuery 角色

如需向默认 Dataform 服务账号或您要在 Dataform 中使用的自定义服务账号授予所需的 BigQuery IAM 角色,请按以下步骤操作:

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

    前往 Dataform

  2. 选择或创建代码库

  3. 在 Google Cloud 控制台中,转到 IAM 页面。

    转到 IAM

  4. 点击授予访问权限

  5. 新的主账号字段中,输入服务账号 ID。

  6. 选择角色列表中,选择 BigQuery Job User 角色。

  7. 点击添加其他角色,然后在选择角色列表中选择 BigQuery Data Editor 角色。

  8. 点击添加其他角色,然后在选择角色列表中选择 BigQuery Data Viewer 角色。

  9. 点击保存

向自定义服务账号授予令牌创建权限

如需在 Dataform 中使用自定义服务账号,默认 Dataform 服务账号必须能够访问自定义服务账号。如需授予此访问权限,您需要将默认 Dataform 服务账号作为主账号添加到具有 Service Account Token Creator 角色的自定义服务账号。

如需向默认 Dataform 服务账号授予对自定义服务账号的访问权限,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,依次前往 IAM > 服务账号

    转到“服务账号”

  2. 选择一个项目。

  3. PROJECT_NAME”项目的服务账号页面上,选择您的自定义 Dataform 服务账号。

  4. 前往权限,然后点击授予访问权限

  5. 新的主账号字段中,输入您的默认 Dataform 服务账号 ID。

    默认的 Dataform 服务账号 ID 采用以下格式:

    service-PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com
    
  6. 选择角色列表中,选择 Service Account Token Creator 角色。

  7. 点击保存

使用 IAM 控制对 Dataform 的访问权限

本文档介绍了 Dataform 的访问权限控制选项,并介绍了如何查看和授予 Dataform 角色。Dataform 使用 Identity and Access Management (IAM) 进行访问权限控制。如需详细了解 IAM 中的角色和权限,请参阅了解角色和权限

预定义的 Dataform 角色

下表列出了可让您访问 Dataform 资源的预定义角色:

Role Permissions

(roles/dataform.admin)

Full access to all Dataform resources.

dataform.*

  • dataform.commentThreads.create
  • dataform.commentThreads.delete
  • dataform.commentThreads.get
  • dataform.commentThreads.list
  • dataform.commentThreads.update
  • dataform.comments.create
  • dataform.comments.delete
  • dataform.comments.get
  • dataform.comments.list
  • dataform.comments.update
  • dataform.compilationResults.create
  • dataform.compilationResults.get
  • dataform.compilationResults.list
  • dataform.compilationResults.query
  • dataform.config.get
  • dataform.config.update
  • dataform.locations.get
  • dataform.locations.list
  • dataform.releaseConfigs.create
  • dataform.releaseConfigs.delete
  • dataform.releaseConfigs.get
  • dataform.releaseConfigs.list
  • dataform.releaseConfigs.update
  • dataform.repositories.commit
  • dataform.repositories.computeAccessTokenStatus
  • dataform.repositories.create
  • dataform.repositories.delete
  • dataform.repositories.fetchHistory
  • dataform.repositories.fetchRemoteBranches
  • dataform.repositories.get
  • dataform.repositories.getIamPolicy
  • dataform.repositories.list
  • dataform.repositories.queryDirectoryContents
  • dataform.repositories.readFile
  • dataform.repositories.setIamPolicy
  • dataform.repositories.update
  • dataform.workflowConfigs.create
  • dataform.workflowConfigs.delete
  • dataform.workflowConfigs.get
  • dataform.workflowConfigs.list
  • dataform.workflowConfigs.update
  • dataform.workflowInvocations.cancel
  • dataform.workflowInvocations.create
  • dataform.workflowInvocations.delete
  • dataform.workflowInvocations.get
  • dataform.workflowInvocations.list
  • dataform.workflowInvocations.query
  • dataform.workspaces.commit
  • dataform.workspaces.create
  • dataform.workspaces.delete
  • dataform.workspaces.fetchFileDiff
  • dataform.workspaces.fetchFileGitStatuses
  • dataform.workspaces.fetchGitAheadBehind
  • dataform.workspaces.get
  • dataform.workspaces.getIamPolicy
  • dataform.workspaces.installNpmPackages
  • dataform.workspaces.list
  • dataform.workspaces.makeDirectory
  • dataform.workspaces.moveDirectory
  • dataform.workspaces.moveFile
  • dataform.workspaces.pull
  • dataform.workspaces.push
  • dataform.workspaces.queryDirectoryContents
  • dataform.workspaces.readFile
  • dataform.workspaces.removeDirectory
  • dataform.workspaces.removeFile
  • dataform.workspaces.reset
  • dataform.workspaces.searchFiles
  • dataform.workspaces.setIamPolicy
  • dataform.workspaces.writeFile

resourcemanager.projects.get

resourcemanager.projects.list

(roles/dataform.codeCommenter)

Permissions to comment, at the repository level. Grants CRUD access over commentThread and comment resources.

dataform.commentThreads.*

  • dataform.commentThreads.create
  • dataform.commentThreads.delete
  • dataform.commentThreads.get
  • dataform.commentThreads.list
  • dataform.commentThreads.update

dataform.comments.*

  • dataform.comments.create
  • dataform.comments.delete
  • dataform.comments.get
  • dataform.comments.list
  • dataform.comments.update

(roles/dataform.codeCreator)

Access only to private and shared code resources. The permissions in the Code Creator let you create and list code in Dataform, and access only the code that you created and code that was explicitly shared with you.

dataform.commentThreads.get

dataform.commentThreads.list

dataform.comments.get

dataform.comments.list

dataform.locations.*

  • dataform.locations.get
  • dataform.locations.list

dataform.repositories.create

dataform.repositories.list

resourcemanager.projects.get

resourcemanager.projects.list

(roles/dataform.codeEditor)

Edit access code resources.

dataform.commentThreads.*

  • dataform.commentThreads.create
  • dataform.commentThreads.delete
  • dataform.commentThreads.get
  • dataform.commentThreads.list
  • dataform.commentThreads.update

dataform.comments.*

  • dataform.comments.create
  • dataform.comments.delete
  • dataform.comments.get
  • dataform.comments.list
  • dataform.comments.update

dataform.locations.*

  • dataform.locations.get
  • dataform.locations.list

dataform.repositories.commit

dataform.repositories.computeAccessTokenStatus

dataform.repositories.create

dataform.repositories.fetchHistory

dataform.repositories.fetchRemoteBranches

dataform.repositories.get

dataform.repositories.getIamPolicy

dataform.repositories.list

dataform.repositories.queryDirectoryContents

dataform.repositories.readFile

dataform.workspaces.commit

dataform.workspaces.create

dataform.workspaces.delete

dataform.workspaces.fetchFileDiff

dataform.workspaces.fetchFileGitStatuses

dataform.workspaces.fetchGitAheadBehind

dataform.workspaces.get

dataform.workspaces.getIamPolicy

dataform.workspaces.installNpmPackages

dataform.workspaces.list

dataform.workspaces.makeDirectory

dataform.workspaces.moveDirectory

dataform.workspaces.moveFile

dataform.workspaces.pull

dataform.workspaces.push

dataform.workspaces.queryDirectoryContents

dataform.workspaces.readFile

dataform.workspaces.removeDirectory

dataform.workspaces.removeFile

dataform.workspaces.reset

dataform.workspaces.searchFiles

dataform.workspaces.writeFile

resourcemanager.projects.get

resourcemanager.projects.list

(roles/dataform.codeOwner)

Full access to code resources.

dataform.commentThreads.*

  • dataform.commentThreads.create
  • dataform.commentThreads.delete
  • dataform.commentThreads.get
  • dataform.commentThreads.list
  • dataform.commentThreads.update

dataform.comments.*

  • dataform.comments.create
  • dataform.comments.delete
  • dataform.comments.get
  • dataform.comments.list
  • dataform.comments.update

dataform.locations.*

  • dataform.locations.get
  • dataform.locations.list

dataform.repositories.*

  • dataform.repositories.commit
  • dataform.repositories.computeAccessTokenStatus
  • dataform.repositories.create
  • dataform.repositories.delete
  • dataform.repositories.fetchHistory
  • dataform.repositories.fetchRemoteBranches
  • dataform.repositories.get
  • dataform.repositories.getIamPolicy
  • dataform.repositories.list
  • dataform.repositories.queryDirectoryContents
  • dataform.repositories.readFile
  • dataform.repositories.setIamPolicy
  • dataform.repositories.update

dataform.workspaces.*

  • dataform.workspaces.commit
  • dataform.workspaces.create
  • dataform.workspaces.delete
  • dataform.workspaces.fetchFileDiff
  • dataform.workspaces.fetchFileGitStatuses
  • dataform.workspaces.fetchGitAheadBehind
  • dataform.workspaces.get
  • dataform.workspaces.getIamPolicy
  • dataform.workspaces.installNpmPackages
  • dataform.workspaces.list
  • dataform.workspaces.makeDirectory
  • dataform.workspaces.moveDirectory
  • dataform.workspaces.moveFile
  • dataform.workspaces.pull
  • dataform.workspaces.push
  • dataform.workspaces.queryDirectoryContents
  • dataform.workspaces.readFile
  • dataform.workspaces.removeDirectory
  • dataform.workspaces.removeFile
  • dataform.workspaces.reset
  • dataform.workspaces.searchFiles
  • dataform.workspaces.setIamPolicy
  • dataform.workspaces.writeFile

resourcemanager.projects.get

resourcemanager.projects.list

(roles/dataform.codeViewer)

Read-only access to all code resources.

dataform.locations.*

  • dataform.locations.get
  • dataform.locations.list

dataform.repositories.computeAccessTokenStatus

dataform.repositories.fetchHistory

dataform.repositories.fetchRemoteBranches

dataform.repositories.get

dataform.repositories.getIamPolicy

dataform.repositories.list

dataform.repositories.queryDirectoryContents

dataform.repositories.readFile

dataform.workspaces.fetchFileDiff

dataform.workspaces.fetchFileGitStatuses

dataform.workspaces.fetchGitAheadBehind

dataform.workspaces.get

dataform.workspaces.getIamPolicy

dataform.workspaces.list

dataform.workspaces.queryDirectoryContents

dataform.workspaces.readFile

dataform.workspaces.searchFiles

resourcemanager.projects.get

resourcemanager.projects.list

(roles/dataform.editor)

Edit access to Workspaces and Read-only access to Repositories.

dataform.commentThreads.get

dataform.commentThreads.list

dataform.comments.get

dataform.comments.list

dataform.compilationResults.*

  • dataform.compilationResults.create
  • dataform.compilationResults.get
  • dataform.compilationResults.list
  • dataform.compilationResults.query

dataform.config.get

dataform.locations.*

  • dataform.locations.get
  • dataform.locations.list

dataform.releaseConfigs.get

dataform.releaseConfigs.list

dataform.repositories.computeAccessTokenStatus

dataform.repositories.fetchHistory

dataform.repositories.fetchRemoteBranches

dataform.repositories.get

dataform.repositories.getIamPolicy

dataform.repositories.list

dataform.repositories.queryDirectoryContents

dataform.repositories.readFile

dataform.workflowConfigs.get

dataform.workflowConfigs.list

dataform.workflowInvocations.*

  • dataform.workflowInvocations.cancel
  • dataform.workflowInvocations.create
  • dataform.workflowInvocations.delete
  • dataform.workflowInvocations.get
  • dataform.workflowInvocations.list
  • dataform.workflowInvocations.query

dataform.workspaces.commit

dataform.workspaces.create

dataform.workspaces.delete

dataform.workspaces.fetchFileDiff

dataform.workspaces.fetchFileGitStatuses

dataform.workspaces.fetchGitAheadBehind

dataform.workspaces.get

dataform.workspaces.getIamPolicy

dataform.workspaces.installNpmPackages

dataform.workspaces.list

dataform.workspaces.makeDirectory

dataform.workspaces.moveDirectory

dataform.workspaces.moveFile

dataform.workspaces.pull

dataform.workspaces.push

dataform.workspaces.queryDirectoryContents

dataform.workspaces.readFile

dataform.workspaces.removeDirectory

dataform.workspaces.removeFile

dataform.workspaces.reset

dataform.workspaces.searchFiles

dataform.workspaces.writeFile

resourcemanager.projects.get

resourcemanager.projects.list

(roles/dataform.viewer)

Read-only access to all Dataform resources.

dataform.commentThreads.get

dataform.commentThreads.list

dataform.comments.get

dataform.comments.list

dataform.compilationResults.get

dataform.compilationResults.list

dataform.compilationResults.query

dataform.config.get

dataform.locations.*

  • dataform.locations.get
  • dataform.locations.list

dataform.releaseConfigs.get

dataform.releaseConfigs.list

dataform.repositories.computeAccessTokenStatus

dataform.repositories.fetchHistory

dataform.repositories.fetchRemoteBranches

dataform.repositories.get

dataform.repositories.getIamPolicy

dataform.repositories.list

dataform.repositories.queryDirectoryContents

dataform.repositories.readFile

dataform.workflowConfigs.get

dataform.workflowConfigs.list

dataform.workflowInvocations.get

dataform.workflowInvocations.list

dataform.workflowInvocations.query

dataform.workspaces.fetchFileDiff

dataform.workspaces.fetchFileGitStatuses

dataform.workspaces.fetchGitAheadBehind

dataform.workspaces.get

dataform.workspaces.getIamPolicy

dataform.workspaces.list

dataform.workspaces.queryDirectoryContents

dataform.workspaces.readFile

dataform.workspaces.searchFiles

resourcemanager.projects.get

resourcemanager.projects.list

自定义 Dataform 角色

自定义角色可以包含您指定的任何权限。您可以创建包含执行特定管理操作权限的自定义角色,例如创建开发工作区或在开发工作区中创建文件和目录。如需创建自定义角色,请参阅创建和管理自定义角色

Dataform 权限的安全注意事项

拥有 dataform.repositories.create 权限的任何用户都可以使用默认的 Dataform 服务账号和授予该服务账号的所有权限在 BigQuery 中执行代码。这包括执行 Dataform 工作流

以下 IAM 角色包含 dataform.repositories.create 权限:

如需限制用户或服务账号可以在 BigQuery 中读取或写入的数据,您可以向所选的 BigQuery 数据集或表授予精细的 BigQuery IAM 权限。如需了解详情,请参阅控制对数据集的访问权限控制对表和视图的访问权限

如需详细了解默认的 Dataform 服务账号及其所需的角色和权限,请参阅向 Dataform 授予所需的访问权限

查看 Dataform 角色

在 Google Cloud 控制台中,执行以下步骤:

  1. 依次前往 IAM 和管理 > 角色页面。

    打开“角色”

  2. 过滤条件字段中,选择使用范围,输入 Dataform,然后按 Enter 键。

  3. 点击其中一个列出的角色,即可在右侧窗格中查看该角色的权限。

    例如,Dataform Admin 角色对所有 Dataform 资源拥有完整访问权限。

如需详细了解如何为项目授予角色,请参阅授予角色。您可以通过这种方式授予预定义角色或自定义角色。

控制对单个代码库的访问权限

如需使用精细的权限控制对 Dataform 的访问权限,您可以使用 Dataform API repositories.setIamPolicy 请求在各个代码库上设置 Dataform IAM 角色。

如需在单个 Dataform 代码库上设置 Dataform IAM 角色,请按以下步骤操作:

  1. 在终端中,传递包含访问政策的 Dataform API repositories.setIamPolicy 请求。

  2. 在政策中,将用户、群组、网域或服务账号与所选角色绑定,格式如下:

    {
    "policy":
       {
          "bindings": [
          {
             "role": "roles/ROLE",
             "members": [
                "TYPE:IDENTIFIER",
             ]
          },
          ],
       }
    }
    

    替换以下内容:

    • ROLE:您要为代码库授予的 Dataform IAM 角色。
    • TYPEusergroupdomainserviceAccount
    • IDENTIFIER:您要向其授予角色的用户、群组、网域或服务账号。
  3. 在 IAM 页面中,确保所有用户都可以通过具有 dataform.repositories.list 权限的 Dataform 角色查看 Dataform 代码库的完整列表。

  4. 在 IAM 中,确保仅向需要对所有 Dataform 代码库拥有完整访问权限的用户授予对所有代码库的 Dataform 管理员角色。

以下命令会传递 repositories.setIamPolicy Dataform API 请求,用于向单个用户授予 sales 代码库的 Dataform 编辑者角色:

curl -H "Content-Type: application/json" -X POST -d '{ "policy": { "bindings": [{ "role": "roles/dataform.editor", "members": ["user:sasha@examplepetstore.com"]}] }}' "https://dataform.googleapis.com/v1beta1/projects/examplepetstore/locations/us-central1/repositories/sales:setIamPolicy"

向代码库授予公开访问权限

您可以向 allAuthenticatedUsers 正文授予对 Dataform 代码库的 IAM 角色,从而授予对该代码库的公开访问权限。

allAuthenticatedUsers 正文分配 IAM 角色后,服务账号和已使用 Google 账号进行身份验证的互联网上的所有用户都会获得该角色。这包括未关联到 Google Workspace 账号或 Cloud Identity 网域的账号,如个人 Gmail 账号。不包括未经身份验证的用户,例如匿名访问者。如需了解详情,请参阅所有经过身份验证的用户

例如,如果您向 sales 代码库中的 allAuthenticatedUsers 授予 Dataform Viewer 角色,则互联网上所有已使用 Google 账号进行身份验证的服务账号和用户都将对所有 sales 代码资源拥有只读访问权限。

如需向 Dataform 代码库授予公开访问权限,请按以下步骤操作:

  1. 在终端中,传递包含访问政策的 Dataform API repositories.setIamPolicy 请求。

  2. 在该政策中,将 allAuthenticatedUsers 主账号绑定到所选角色,格式如下:

    {
    "policy":
       {
          "bindings": [
          {
             "role": "roles/ROLE",
             "members": [
                "allAuthenticatedUsers",
             ]
          },
          ],
       }
    }
    

    ROLE 替换为您要授予所有经过身份验证的用户的 Dataform IAM 角色。

以下命令会传递 repositories.setIamPolicy Dataform API 请求,该请求会向 allAuthenticatedUsers 授予 sales 代码库的 Dataform Viewer 角色:

curl -H "Content-Type: application/json" -X POST -d '{ "policy": { "bindings": [{ "role": "roles/dataform.viewer", "members": ["allAuthenticatedUsers"]}] }}' "https://dataform.googleapis.com/v1beta1/projects/examplepetstore/locations/us-central1/repositories/sales:setIamPolicy"

阻止对代码库的公开访问

为确保不向任何 Dataform 代码库授予对公众的访问权限,您可以在项目中限制 allAuthenticatedUsers 正文。

如需在项目中限制 allAuthenticatedUsers,您可以设置 iam.allowedPolicyMemberDomains 政策,并从 allowed_values 列表中移除 allAuthenticatedUsers

当您在 iam.allowedPolicyMemberDomains 政策中限制 allAuthenticatedUsers 时,allAuthenticatedUsers 主账号将无法在项目中的任何 IAM 政策中使用,这会阻止向所有资源(包括 Dataform 代码库)授予公开访问权限。

如需详细了解 iam.allowedPolicyMemberDomains 政策以及设置说明,请参阅按网域限制身份

Dataform 中的员工身份联合

借助员工身份联合,您可以使用外部身份提供方 (IdP) 通过 IAM 对用户进行身份验证和授权,以便用户能够访问 Google Cloud 服务。

Dataform 支持员工身份联合,没有已知限制。

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

本部分介绍了如何为单个 Dataform 表和视图授予和撤消 BigQuery IAM 角色。

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

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

向表或视图授予 BigQuery 角色

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

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

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

如需从所选表或视图中撤消 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 语句。

后续步骤