用户如何证明特定帐户有权访问 BigQuery? (AEAD 加密和授权视图)

Posted

技术标签:

【中文标题】用户如何证明特定帐户有权访问 BigQuery? (AEAD 加密和授权视图)【英文标题】:How can users prove a specific account has access to BigQuery? (AEAD encryption and authorized views) 【发布时间】:2019-10-01 00:49:28 【问题描述】:

我正在举办一个需要多人访问 BigQuery 的活动,我希望他们向我发送他们有权访问的证明:

我想收集可以访问 BigQuery 的参与者的电子邮件地址。 我想要证明他们使用过 BigQuery。

用户如何证明他们的特定电子邮件帐户有权访问 BigQuery?

我想知道我们是否可以构建一个具有授权视图和加密功能的解决方案。

【问题讨论】:

【参考方案1】:

我们将使用授权视图和new AEAD encryption functions。

首先,让我们创建一个只有我可以在我的一个私有数据集中看到的密钥:

CREATE TABLE `secrets.keys`
AS 
SELECT KEYS.NEW_KEYSET('AEAD_AES_GCM_256') key, CURRENT_TIMESTAMP() ts, 'for_a_view' label

现在我可以在公共数据集中创建一个利用 SESSION_USER()AEAD.ENCRYPT() 的视图:

SELECT SESSION_USER() user, ts, key_ts, key_label
  , AEAD.ENCRYPT(key, FORMAT('%s|%t', SESSION_USER(), ts), '') enc_user_ts
  , AEAD.ENCRYPT(key, SESSION_USER(), '') enc_user
  , AEAD.ENCRYPT(key, CAST(ts AS STRING), '') enc_ts

FROM (SELECT CURRENT_TIMESTAMP() ts)
, (SELECT ts key_ts, key, label key_label FROM `fh-bigquery.secrets.keys`  WHERE label='for_a_view')

为了让我的视图和密钥保密,我可以在我的秘密数据集中设置访问这个新的authorized view 以读取密钥:

现在任何人都可以运行以下查询:

SELECT enc_user_ts
FROM `fh-bigquery.public_dump.encrypting_user_view`

返回:

AQElE+8cn+uHouGhZO7895UNjVs3/k05ZJLkEceQ8kszHJjQkbvuB6Vx/miDi3DhFTty7ZifXps1VKWC5OtTrQOkCQqoFFQu+VkDfz9F65R5f3PGPA==

我可以要求用户与我共享该值,我也可以与您共享该值 - 但只有我可以使用我的密钥对其进行解密。

用我的密钥解密:

SELECT AEAD.DECRYPT_STRING(key, FROM_BASE64('AQElE+8cn+uHouGhZO7895UNjVs3/k05ZJLkEceQ8kszHJjQkbvuB6Vx/miDi3DhFTty7ZifXps1VKWC5OtTrQOkCQqoFFQu+VkDfz9F65R5f3PGPA=='), '')
FROM (SELECT key FROM `fh-bigquery.secrets.keys` WHERE label='for_a_view' LIMIT 1)

返回:

⬛⬛⬛⬛⬛⬛⬛⬛e@gmail.com|2019-05-14 03:51:15.047791+00   

请注意,这是他们用于运行查询的确切帐户和时间戳

这就是方法 - 如果我需要证明您告诉我您用于使用 BigQuery 的帐户确实是该帐户,我会要求您运行以下查询并与我分享其结果:

SELECT enc_user_ts
FROM `fh-bigquery.public_dump.encrypting_user_view`

【讨论】:

相关,如何使用加密功能快速删除:medium.com/@pdeyhim/… 我收到 fh-bigquery:secrets.keys 的 403:“拒绝访问:表 fh-bigquery:secrets.keys:用户无权查询表 fh-bigquery:secrets。键。” 这就是重点!由于授权视图,您可以完成加密,但不能完成密钥。

以上是关于用户如何证明特定帐户有权访问 BigQuery? (AEAD 加密和授权视图)的主要内容,如果未能解决你的问题,请参考以下文章

如何在NT帐户无效时恢复SQL Server所有权

如何限制对 phpMyAdmin 中特定数据库用户帐户的访问?

AWS - 如何列出用户有权访问的资源

如何通过服务帐户通过 Google BigQuery External Table 访问 Google Sheets Doc

如何创建仅允许访问 C++ 中的特定用户帐户的手动重置事件?

如何使用 Bigquery 在 Google Bigquery 中进行身份验证,而无需使用服务帐户进行用户输入