如何通过 API(补丁)授予对 BigQuery 数据集的新视图访问权限
Posted
技术标签:
【中文标题】如何通过 API(补丁)授予对 BigQuery 数据集的新视图访问权限【英文标题】:How give a new view access to a BigQuery dataset via API (patch) 【发布时间】:2016-06-03 11:38:21 【问题描述】:我在 BigQuery 中有一个数据集,其中包含一些视图权限。
通过 API,我想为该数据集授予新视图权限。使用patch 方法:
...
#permission the view
dataset_ref = 'datasetId': 'dataset_b', 'projectId': 'foo'
update = 'access': [
"view":
"projectId": 'foo',
"datasetId": 'dataset_b',
"tableId": 'v_test'
]
datasets = service.datasets()
datasets.patch(body=update, **dataset_ref).execute()
但是,它不是将新视图添加到许可视图列表中,而是将它们全部替换。我以为只有update 方法可以做到这一点。来自 update 文档:
警告:指定的访问列表完全覆盖现有的 访问列表。如果您指定一个空的访问列表,您将撤销 访问除您自己以外的所有人;您不能从中删除所有所有者 一个数据集。
来自补丁文档:
更新现有数据集中的信息。更新方法替换 整个数据集资源,而补丁方法仅替换 提交的数据集资源中提供的字段。这 方法支持补丁语义。
是否可以使用 patch 方法添加新视图?
(我知道可以在补丁请求中提供多个视图,但这意味着必须首先查询数据集以获取其所有现有权限,然后添加新权限 - 混乱)
【问题讨论】:
【参考方案1】:update 方法替换整个数据集资源,而 patch 方法仅替换提交的数据集资源中提供的字段。
上面的关键是 - 补丁方法只替换提供的字段 这意味着访问属性将被替换 - 整个访问属性(提供空列表的情况除外 - 因为任何时候都必须至少有一个所有者存在)
因此,不幸的是,您需要通过首先检索当前 acl 并向其添加新条目来提供整个 acl 列表
【讨论】:
无赖。我想知道是否值得请求该功能。必须进行额外的调用以获取所有 ACL,然后追加,然后将它们全部发回,这真的很尴尬。 考虑一下您可以一次性做出多少不同的更改。更改访问权限、撤销访问权限、添加新访问权限以及多个项目的所有权限。我认为当前的方法使它变得简单-您加载现有的acl-您进行所有需要的更改并提交回新的acl。这对我来说很有意义(就像现在一样) 同时 - 有趣 - 存储团队以不同的方式处理这个问题 - cloud.google.com/storage/docs/json_api/v1/bucketAccessControls - 这可能是有原因的 当然可以,但是如果我只想添加一个新的 ACL 怎么办。然后是一个额外的网络请求,首先获取现有的 ACL,修改然后修补。对我来说感觉有些笨拙。 GCS 的好地方! 当然 - 理解 - 在设计 api 时总要考虑这个和那个之间的平衡。这很可能是谷歌团队考虑的。在我的实践中,acl 不像其他以数据为中心的 api 那样频繁,所以我从来没有感觉到这种特殊需求【参考方案2】:我刚刚遇到了同样的问题,并花了一些时间寻找有关如何更新访问条目的答案,因为我收到了“无法从数据集中删除所有所有者”消息。
这并不能回答您的补丁问题,但可以解决该错误并希望为其他人节省一些时间。
updating-datasets 文档解决了我的问题,但是是的,它会抓取所有附加条目并全部更新。
【讨论】:
以上是关于如何通过 API(补丁)授予对 BigQuery 数据集的新视图访问权限的主要内容,如果未能解决你的问题,请参考以下文章
Microsoft Graph API - 如何通过 API 向特定用户授予对我的收件箱的访问权限
在 Google 表格中使用 BigQuery,如何授予其他用户按“刷新”的权限?
如何授予查看者从 Data Studio 更改 BigQuery 参数的权限