google-bigquery - Python Big Query - 能够检查源数据集中是否存在授权视图以及如何删除它
问题描述
我正在编写一个 python 脚本,它从 SQL 脚本创建/更新数据集中的视图。
我想知道是否可以检查数据集中是否已创建授权视图。如果是这样并且我希望删除它,是否有这样做的 python 方法?
解决方案
对于授权视图,我们需要创建一个单独的数据集并授予对它的访问权限。下一步是在该数据集中创建视图,并且有权访问数据集的每个人都可以访问该视图。
我可以看到以下删除授权视图的可能性:
- 从数据集中删除
AccessEntry
。 - 从数据集中删除视图。
- 删除具有所有视图和访问权限的整个数据集。
让我们看一下官方文档,您可以在其中找到 Python 示例。我们需要执行两个操作。首先取消对视图的授权以删除对源数据集的访问权限,然后删除对包含该视图的数据集的访问控制。我们需要使用remove()
方法:
# Unauthorize the view to access the source dataset
access_entries = source_dataset.access_entries
access_entries.remove(
bigquery.AccessEntry(None, 'view', view.reference.to_api_repr())
)
source_dataset.access_entries = access_entries
source_dataset = client.update_dataset(
source_dataset, ['access_entries'])
# Remove access controls to the dataset containing the view
analyst_group_email = 'data_analysts@example.com'
access_entries = shared_dataset.access_entries
access_entries.remove(
bigquery.AccessEntry('READER', 'groupByEmail', analyst_group_email)
)
shared_dataset.access_entries = access_entries
shared_dataset = client.update_dataset(
shared_dataset, ['access_entries'])
此外,在这里您可以找到多行 for 循环示例,该示例删除了访问:
source_dataset = bigquery_client.get_dataset(dataset_id)
access_entries = source_dataset.access_entries
for access_entry_data in access_entries:
dict_auth = access_entry_data.entity_id
if isinstance(dict_auth, dict):
if dict_auth['tableId'] == resource:
idx = access_entries.index(access_entry_data)
access_entries.pop(access_entries.index(access_entry_data))
source_dataset.access_entries = access_entries
source_dataset = bigquery_client.update_dataset(source_dataset, ['access_entries'])
要了解更多信息AccessEntry
,请访问官方文档。
推荐阅读
- c# - 通过按钮单击更改页面
- elasticsearch - Logstash 从 Kafka 创建管道不起作用
- javascript - 如何从有角度的 fullCalendar 模板中更改视图?
- node.js - Express.js - TypeError:无法读取未定义的属性“渲染”
- python - 将两个列表的元素保存在文件的列中
- django - 在请求中将模型对象 ID 作为参数传递有多安全?
- javascript - Vue:v-for 将不匹配的项目存储到不同的容器
- ssh - 当我在 `ddev auth ssh` 之后尝试在 DDEV Web 容器中使用 ssh 时,ssh 密钥似乎不起作用,“身份验证失败太多”
- regex - 是否有替代正则表达式语法来避免错误“不支持环视,包括前瞻和后视”?
- java - 如何在 Spring 应用程序中实现安全性?