授权视图概览
已获授权的视图是表的逻辑视图,可让您对 Bigtable 数据进行精细的访问权限控制。授权视图是表的一部分,您可以将其配置为包含特定的表数据,然后单独授予对该授权视图的访问权限,而不是对表的访问权限。
授权视图适用于多租户表或其他情况下,例如表包含并非所有用户都应能够访问的数据。与其他数据库服务中的视图不同,Bigtable 授权视图可用于控制读取和写入权限。您可以程序化地创建数千个已获授权的视图,就像其他存储系统所称的“可更新视图”或“经过过滤的别名”一样。
本文档介绍了已获授权的视图,并提供了定义文件示例。在阅读本文档之前,您应先熟悉 Bigtable 存储模型。如需了解相关说明,请参阅创建和管理已获授权的视图。
什么是授权视图
创建已获授权的视图时,您可以使用以下参数之一指定要包含在已获授权的视图中的数据,从而定义该视图:
- 行键前缀 - 例如,以
examplepetstore1|
开头的所有行 - 列限定符前缀 - 例如,指定列族中所有限定符以
order#
开头的列 - 列限定符 - 例如,仅指定列族中的
order-examplepetstore
列 - 行键前缀和列限定符的组合
如果多个列族中使用了相同的列限定符,并且您希望在视图中包含具有该限定符的所有列,则必须在定义视图时单独指定列限定符和列族的每个组合。
您用于定义已获授权视图的行键和列限定符值会被视为服务数据。因此,请勿使用包含敏感信息的行键或列限定符值创建授权视图。如需了解服务数据的处理方式,请参阅 Google Cloud 隐私权声明。
包含列族中的列或所有行
如果您想确保将任何列添加到底层表中的列族后,该列也会包含在已获授权的视图中,则应将空字符串 (""
) 指定为列限定符前缀。例如,定义文件会在族子子集中包含以下内容:"qualifierPrefixes": [""]
。
同样,如果您想定义一个包含表中所有行的授权视图,请将空字符串 (""
) 指定为行键前缀。在定义文件中,此值在视图子集中写为 "rowPrefixes": [""]
。
为避免已获授权的视图过于复杂,Bigtable 允许您最多指定 10 个不同的限定符前缀。这意味着,授权视图可以指定一个包含 10 个限定符前缀的列族、10 个包含单个限定符前缀的列族,或介于这两者之间的任何数量,只要限定符总数不超过 10 个即可。
最佳实践是,每个 JSON 对象仅指定一次键。如果您多次指定键(例如列族名称),则键的最终条目会覆盖该键的所有先前条目。
定义文件示例
本部分介绍了 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"]
}
}
}
}
以下是已获授权视图的定义文件示例,其中仅包含 order
列族中的 skus
和 agents
列以及 pet_id
列族中的 dog
、cat
和 bird
列中的数据。
{
"subsetView": {
"rowPrefixes": ["examplepetstore1#"]
"familySubsets": {
"order": {
"qualifiers": ["skus", "agents"]
"pet_id": {
"qualifiers": ["dog", "cat", "bird"]
}
}
}
}
}