授权视图概览

借助 Bigtable 中的授权视图,您可以单独授予对特定表数据子集的精细访问权限,而不是对底层表的访问权限。

您可以使用这些视图来隔离多租户表中的数据,并控制读取和写入访问权限。您还可以以编程方式创建数千个视图,类似于其他存储系统中的可更新视图或过滤后的别名。

在开始之前,请确保您熟悉 Bigtable 存储模型。如需了解设置说明,请参阅创建和管理授权视图。

授权视图的定义

创建授权视图时,您可以使用以下某个参数指定要包含在授权视图中的数据,从而定义授权视图:

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

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

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

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

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

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

为避免授权视图过于复杂,Bigtable 允许您最多指定 10 个不同的限定符前缀。这意味着,授权视图可以指定一个包含 10 个限定符前缀的列族、10 个包含单个限定符前缀的列族,或者介于两者之间的任意组合,只要限定符总数不超过 10 个即可。

最佳实践是,每个 JSON 对象只指定一次键。如果您多次指定某个键(例如列族名称),则该键的最终条目会覆盖该键的任何先前条目。

定义文件示例

本部分展示了授权视图定义文件的 JSON 格式示例。

以下是一个授权视图的定义文件示例,该视图包含 customer 列族的 address 列,以及行键前缀为 examplepetstore1# 的行中以 tel 开头的列。

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

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

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

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

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

以下是授权视图的定义文件示例,该视图仅包含 order 列族中 skus 和 agents 列的数据,以及 pet_id 列族中 dog、cat 和 bird 列的数据。

    {
      "subsetView": {
        "rowPrefixes": [""]
        "familySubsets": {
          "order": {
            "qualifiers": ["skus", "agents"]
          "pet_id": {
            "qualifiers": ["dog", "cat", "bird"]
          }
          }
        }
      }
    }

后续步骤