我目前正在尝试限制我的视图可能返回的列,但保留用户过滤它的可能性,例如:
表格
{f_name:string,l_name:string,ssn:string}
查看
{f_name:string,l_name:string}
但允许这样的查询:SELECT * FROM view WHERE ssn ='1234567890'
我很确定有更好的方法,但我太深刻了,不能看到它。)
答案 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;