已获授权的视图概览

授权视图是表的逻辑视图,可让您对 Bigtable 数据进行精细的访问权限控制。授权视图是您配置为包含特定表数据的表的子集。然后,您可以单独授予对授权视图的访问权限和对表的访问权限。

如果您的表包含并非所有用户都能够访问的数据,授权视图对于多租户表或其他情况非常有用。与其他数据库服务中的视图不同,Bigtable 授权视图可用于控制读写访问。您可以通过编程方式创建数千个已获授权的视图,就像使用其他存储系统称为“可更新视图”或“过滤后的别名”一样。

本文档介绍了已获授权的视图,并提供了定义文件的示例。在阅读本文档之前,您应该先熟悉 Bigtable 存储模型。有关说明,请参阅创建和管理已获授权的视图

授权视图的定义

创建授权视图时,您可以使用以下参数之一指定要包含在授权视图中的数据来进行定义:

  • 行键前缀 - 例如,以 examplepetstore1| 开头的所有行
  • 列限定符前缀 - 例如,指定列族中限定符以 order# 开头的所有列
  • 列限定符 - 例如,仅限指定列族中的 order-examplepetstore
  • 行键前缀和列限定符的组合

如果多个列族使用了同一列限定符,并且您希望在视图中包含带有该限定符的所有列,则必须在定义视图时单独指定列限定符和列族的每个组合

您用于定义已获授权的视图的行键和列限定符值被视为服务数据。因此,请勿使用包含敏感信息的行键或列限定符值创建授权视图。如需了解服务数据的处理方式,请参阅 Google Cloud 隐私权声明

在族中包含列或包含所有行

如果要确保添加到底层表中的列族的任何列也包含在授权视图中,则应指定空字符串 ("") 作为列限定符前缀。例如,定义文件会在系列子集中包含以下内容:"qualifierPrefixes": [""]

同样,如果要定义包含表中所有行的授权视图,请将空字符串 ("") 指定为行键前缀。在定义文件中,这被写为视图子集中的 "rowPrefixes": [""]

定义文件示例

本部分介绍了已获授权的视图定义文件的 JSON 格式示例。

以下是已获授权的视图的定义文件的示例,该视图包含行键前缀为 examplepetstore1# 的所有行。

    {
      "subsetView":
      {
        "rowPrefixes": ["examplestore1#"],
        "familySubsets":
        {
          "customer":
          {
            "qualifiers":["address"],
            "qualifierPrefixes":["tel"]
          }
        }
      },
      "deletionProtection": true
    }

以下是授权视图的定义文件的示例,该视图在 order 列族中包含 skus 列,在 customer 列族中包含所有列。

"subsetView": {
 "familySubsets": {
  "order": {
     "qualifiers": ["skus"]
  }
}
  "familySubsets": {
    "key": "customer"
    "qualifierPrefixes": [""]
  }
}

以下是授权视图的定义文件的示例,该视图仅包含行键前缀为 examplepetstore1# 的行的 order 列族的 skus 列中的数据。

"subsetView": {
  "rowPrefixes": ["examplepetstore1#"]
  "familySubsets": {
    "order": {
      "qualifiers": ["skus"]
    }
  }
}

后续步骤