2017-10-12 19 views
1

私は現在、私の見解を返すことが列を制限しようとしているが、例えば、それをフィルタリングするために、ユーザーに可能性を保っています:BigQuery列へのユーザー固有のアクセス方法を教えてください。

{F_NAME:文字列、L_NAME:文字列、SSN :文字列}

表示

{F_NAME:文字列、L_NAME:文字列}

しかし、このようなクエリが可能:公開する方法はありませんWHERE SSNは=「1234567890」

私はより良いアプローチがあることをかなり確信しているが、私はそれを見て、あまりにも深い思います:)

答えて

2

としては、これは以下のBigQuery標準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データセットに対して個別にyourViewビューを作成
2.Tableのデータセットの読者としてauthorize yourView View
3.これで、viにアクセスできるすべてのユーザーEWユーザーがyourTableのデータセット

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

へのアクセス権を持っていないとSSNが表示されている場合でも、それが良いかもしれない

+2

本物ではないことを確認し、当然の
4.下に実行することができますセキュリティが重要な場合にハッシュの衝突を避けるために、この種のユースケースに 'SHA256'または' SHA512'を使用してください。 –

+0

これを追加してくれてありがとう。 OPの正しいアイディアにもっと集中しました –

0

ビューSELECT * FROMフィルタが存在する場合は列のサブセットのみにアクセスし、それらのすべてにアクセスできるようにします。たとえば、フィルタがssn = ssnの場合はどうなりますか? ssnがnullでない限り、それは常に真実になります。ただし、異なる権限で異なるデータセットを設定し、それらの列の一部のサブセットを公開するビューを作成することができます。 BigQueryのドキュメントには、creating authorized viewsに関する良いチュートリアルがあります。例えば

、あなたが持っている可能性があり:

  • restricted_dataset:あなたのチーム/組織内の特定の人だけがこのデータセット内のテーブルやビューを照会したり、管理することができます。すべてのデータを含むall_infoという名前のテーブルが含まれています。
  • open_dataset:チーム/組織内の誰でも、このデータセット内のテーブル/ビューをクエリできます。例えば、filtered_infoという名前のビューが含まれています。以下はSELECT f_name, l_name FROM all_info;
関連する問題