如何为用户提供对BigQuery列的特定访问权限?

时间:2017-10-12 12:11:59

标签: google-bigquery

我目前正在尝试限制我的视图可能返回的列,但保留用户过滤它的可能性,例如:

表格

{f_name:string,l_name:string,ssn:string}

查看

{f_name:string,l_name:string}

但允许这样的查询:SELECT * FROM view WHERE ssn ='1234567890'

我很确定有更好的方法,但我太深刻了,不能看到它。)

2 个答案:

答案 0 :(得分:2)

以下是您的高级想法 这适用于BigQuery Standard SQL

   
#standardSQL
WITH `yourTable` AS (
  SELECT 'a' f_name, 'x' l_name, '1234567890' ssn UNION ALL
  SELECT 'b', 'y', '2234567890' UNION ALL
  SELECT 'c', 'z', '3234567890' UNION ALL
  SELECT 'd', 'v', '4234567890' UNION ALL
  SELECT 'r', 'w', '5234567890' 
),
`yourView`AS (
  SELECT f_name, l_name, FARM_FINGERPRINT(ssn) ssn
  FROM `yourTable`
)
SELECT *
FROM `yourView`
WHERE ssn = FARM_FINGERPRINT('3234567890')  

以下是实施纲要:
1.为yourTable数据集单独创建ViewView视图 2. authorize yourView View作为您的表格数据集的读者 3.现在,任何有权访问您视图的用户都可以在下面运行 4.当然,请确保您的用户无权访问您的桌面数据集

#standardSQL
SELECT *
FROM `yourView`
WHERE ssn = FARM_FINGERPRINT('3234567890')  

即使ssn可见,也不是真的

答案 1 :(得分:0)

如果存在过滤器,则无法仅公开列的子集,但允许访问所有列。例如,过滤器是ssn = ssn怎么办?除非ssn为空,否则总是如此。但是,您可以设置具有不同权限的不同数据集,并创建显示其中某些列子集的视图。在BigQuery文档中有一个关于creating authorized views的好教程。

例如,您可以:

  • restricted_dataset:只有您团队/组织中的某些人可以查询或管理此数据集中的表格和视图。包含一个名为all_info的表,其中包含所有数据。
  • open_dataset:您的团队/组织中的任何人都可以查询此数据集中的表格/视图。包含一个名为filtered_info的视图,例如:如SELECT f_name, l_name FROM all_info;