创建和管理授权视图

本文档介绍了如何定义、创建和执行 使用 Google Cloud CLI 对授权视图执行各种操作。在您之前 请先熟悉概览 授权视图的总数

所需的角色

要获得所需权限,请执行以下操作: 对授权视图执行管理操作 , 请让管理员授予您 Bigtable Admin (roles/bigtable.admin) IAM 角色 底层表 ,了解所有最新动态。 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

此预定义角色包含 必须具备 对授权视图执行管理操作 ,了解所有最新动态。如需查看所需的确切权限,请展开所需权限部分:

所需权限

必须具备以下权限才能 对授权视图执行管理操作 :

  • bigtable.authorizedViews.get
  • bigtable.authorizedViews.list
  • bigtable.authorizedViews.create
  • bigtable.authorizedViews.update
  • bigtable.authorizedViews.delete
  • bigtable.authorizedViews.getIamPolicy
  • bigtable.authorizedViews.setIamPolicy
  • bigtable.authorizedViews.readRows
  • bigtable.authorizedViews.sampleRowKeys
  • bigtable.authorizedViews.mutateRows

您也可以使用自定义角色或其他预定义角色来获取这些权限。

了解如何在已获授权的视图中管理 Bigtable IAM 角色 请参阅已获授权的视图级 IAM 管理

创建授权视图

创建已获授权的视图时,请考虑将 运行。读取、写入和删除发送到 授权视图只能引用 授权视图。例如,如果您尝试读取 某行的数据包含在您的表中未包含在 则请求将失败。

避免对授权视图的数据请求失败的情况 因为添加到表格中不在此列中的列 已获授权的视图中,则可以指定一个空列限定符前缀“" 。

您可以为每个授权视图指定最多 100 个定义参数。

gcloud

运行 bigtable authorized-views create 命令。

gcloud bigtable authorized-views create AUTHORIZED_VIEW_ID \
  --instance=INSTANCE_ID \
  --table=TABLE_ID \
  --definition-file=DEFINITION_FILE_PATH

替换以下内容:

  • AUTHORIZED_VIEW_ID: 尚未用于表的授权视图
  • INSTANCE_ID:实例的永久性标识符 包含表
  • TABLE_ID:您要访问的表的永久标识符 为其创建已获授权的视图
  • DEFINITION_FILE_PATH:有效 JSON 格式的路径 授权视图的表示形式。有关正确 格式的定义文件,请参阅定义文件 示例

您也可以在不提供定义文件的情况下运行该命令。在本课中, gcloud CLI 会打开一个编辑器并提示您输入值。

如需确认是否已创建已获授权的视图 获取表的授权视图列表

Java

如需了解如何安装和使用 Bigtable 客户端库,请参阅 Bigtable 客户端库

如需向 Bigtable 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证

try {
  CreateAuthorizedViewRequest request =
      CreateAuthorizedViewRequest.of(tableId, authorizedViewId)
          .setAuthorizedViewType(
              SubsetView.create()
                  .addRowPrefix("")
                  .setFamilySubsets(
                      COLUMN_FAMILY,
                      FamilySubsets.create().addQualifierPrefix(COLUMN_QUALIFIER_NAME)));
  AuthorizedView authorizedView = adminClient.createAuthorizedView(request);
  System.out.printf("AuthorizedView: %s created successfully%n", authorizedView.getId());
} catch (NotFoundException e) {
  System.err.println(
      "Failed to create an authorized view from a non-existent table: " + e.getMessage());
}

修改已获授权的视图

gcloud

使用 bigtable authorized-views update 命令修改已获授权的视图。

gcloud bigtable authorized-views update AUTHORIZED_VIEW_ID \
  --instance=INSTANCE_ID \
  --table=TABLE_ID \
  --definition-file=DEFINITION_FILE_PATH

替换以下内容:

  • AUTHORIZED_VIEW_ID: 已获授权的视图
  • INSTANCE_ID:实例的永久性标识符
  • TABLE_ID:源表的永久标识符
  • DEFINITION_FILE_PATH:有效 JSON 格式的路径 授权视图的表示形式。有关正确 格式的定义文件,请参阅定义文件 示例

您也可以在不提供定义文件的情况下运行该命令。在本课中, gcloud CLI 会打开一个编辑器并提示您输入值。

可选:防止 gcloud CLI 显示确认消息 显示当前授权视图与 结构,并且在提交更新后,附加 --no-interactive 标志 。

Java

如需了解如何安装和使用 Bigtable 客户端库,请参阅 Bigtable 客户端库

如需向 Bigtable 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证

try {
  // Update to an authorized view permitting everything.
  UpdateAuthorizedViewRequest request =
      UpdateAuthorizedViewRequest.of(tableId, authorizedViewId)
          .setAuthorizedViewType(
              SubsetView.create()
                  .addRowPrefix("")
                  .setFamilySubsets(
                      COLUMN_FAMILY, FamilySubsets.create().addQualifierPrefix("")));
  AuthorizedView authorizedView = adminClient.updateAuthorizedView(request);
  System.out.printf("AuthorizedView: %s updated successfully%n", authorizedView.getId());
} catch (NotFoundException e) {
  System.err.println("Failed to modify a non-existent authorized view: " + e.getMessage());
}

启用或停用删除保护

要为已获授权的视图启用删除保护,请将 --deletion-protection 用于更新命令。

要停用删除保护,请将 no-deletion-protection 用于更新命令。

删除已获授权的视图

如果您删除某个表,则该表的所有授权视图也将被删除。

如果您删除了已获授权的视图,则无法恢复删除。但是,如果您 删除一个表,然后恢复删除的表 将随其一起恢复然后,您必须重新配置 IAM 授权视图和表有关详情,请参阅恢复删除的内容 表格

gcloud

使用 bigtable instances tables authorized-views delete 命令删除已获授权的视图。

gcloud bigtable authorized-views delete AUTHORIZED_VIEW_ID \
  --instance=INSTANCE_ID \
  --table=TABLE_ID

替换以下内容:

  • AUTHORIZED_VIEW_ID: 已获授权的视图
  • INSTANCE_ID:实例的永久性标识符
  • TABLE_ID:源表的永久标识符

可选:防止 gcloud CLI 显示确认消息 要求您确认或取消删除的提示,请将 --nointeractive 标志。

Java

如需了解如何安装和使用 Bigtable 客户端库,请参阅 Bigtable 客户端库

如需向 Bigtable 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证

try {
  adminClient.deleteAuthorizedView(tableId, authorizedViewId);
  System.out.printf("AuthorizedView: %s deleted successfully%n", authorizedViewId);
} catch (NotFoundException e) {
  System.err.println("Failed to delete a non-existent authorized view: " + e.getMessage());
}

获取表的授权视图列表

gcloud

运行 bigtable authorized-views list 命令:

gcloud bigtable authorized-views list \
  --instance=INSTANCE_ID \
  --table=TABLE_ID

替换以下内容:

  • INSTANCE_ID:实例的永久性标识符
  • TABLE_ID:表的永久标识符

Java

如需了解如何安装和使用 Bigtable 客户端库,请参阅 Bigtable 客户端库

如需向 Bigtable 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证

List<String> authorizedViewIds = new ArrayList<>();
try {
  authorizedViewIds = adminClient.listAuthorizedViews(tableId);
  for (String authorizedViewId : authorizedViewIds) {
    System.out.println(authorizedViewId);
  }
} catch (NotFoundException e) {
  System.err.println(
      "Failed to list authorized views from a non-existent table: " + e.getMessage());
}

查看授权视图的相关详情

gcloud

如需获取有关授权视图的详细信息,请运行 bigtable instances tables authorized-views describe 命令:

gcloud bigtable authorized-views describe \
–-instance=INSTANCE_ID \
–-table=TABLE_ID \
–-view=AUTHORIZED_VIEW_ID

替换以下内容:

  • INSTANCE_ID:实例的永久性标识符
  • TABLE_ID:表的永久标识符
  • AUTHORIZED_VIEW_ID: 已获授权的视图

Java

如需了解如何安装和使用 Bigtable 客户端库,请参阅 Bigtable 客户端库

如需向 Bigtable 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证

AuthorizedView authorizedView = null;
try {
  authorizedView = adminClient.getAuthorizedView(tableId, authorizedViewId);
  SubsetView subsetView = (SubsetView) authorizedView.getAuthorizedViewType();

  for (ByteString rowPrefix : subsetView.getRowPrefixes()) {
    System.out.printf("Row Prefix: %s%n", rowPrefix.toStringUtf8());
  }
  for (Map.Entry<String, FamilySubsets> entry : subsetView.getFamilySubsets().entrySet()) {
    for (ByteString qualifierPrefix : entry.getValue().getQualifierPrefixes()) {
      System.out.printf(
          "Column Family: %s, Qualifier Prefix: %s%n",
          entry.getKey(), qualifierPrefix.toStringUtf8());
    }
    for (ByteString qualifier : entry.getValue().getQualifiers()) {
      System.out.printf(
          "Column Family: %s, Qualifier: %s%n", entry.getKey(), qualifier.toStringUtf8());
    }
  }
} catch (NotFoundException e) {
  System.err.println(
      "Failed to retrieve metadata from a non-existent authorized view: " + e.getMessage());
}

后续步骤