已獲授權的資料集
本文說明如何在 BigQuery 中使用授權資料集。您可以透過授權資料集,授權指定資料集中的所有檢視表存取第二個資料集中的資料。使用授權資料集時,您不需要設定個別授權檢視畫面。
總覽
BigQuery 中的檢視區塊是由 SQL 查詢定義的虛擬資料表。舉例來說,檢視區塊的查詢可能只會傳回資料表的部分資料欄,排除包含個人識別資訊 (PII) 的資料欄。如要查詢檢視區塊,使用者必須有權存取檢視區塊查詢所存取的資源。
授權檢視表
如要讓使用者查詢檢視區塊,但不想授予他們檢視區塊參照資源的直接存取權,可以使用已授權檢視區塊。建立授權檢視區時,您可以分享邏輯檢視區或具體化檢視區。授權具體化檢視表後,該檢視表即為授權具體化檢視表。
舉例來說,您可以透過授權檢視表,與特定群組或使用者 (主體) 分享檢視表中的有限資料,而不必授予主體所有基礎資料的存取權。主體可以查看您分享的資料並對其執行查詢,但無法直接存取來源資料集。而是授權檢視表可以存取來源資料。
已獲授權的資料集
如要授予檢視表集合資料集存取權,不必逐一授權每個檢視表,可以將檢視表歸入同一個資料集,然後授予包含檢視表的資料集存取包含資料的資料集。然後視需要授予主體資料集 (含檢視群組) 或資料集內個別檢視的存取權。
可存取其他資料集的資料集稱為「授權資料集」。授權其他資料集存取資料的資料集稱為「共用資料集」。
所需權限和角色
如要授權或撤銷資料集的授權,您必須具備下列身分與存取權管理 (IAM) 權限,才能更新要共用資料集的存取權控管清單。
授權資料集後,您可以在授權資料集中建立或更新檢視表。如要瞭解詳情和必要權限,請參閱「在授權資料集中建立或更新檢視區塊」。
權限 | 資源 |
---|---|
bigquery.datasets.get
|
您要分享的資料集。 |
bigquery.datasets.update
|
您要分享的資料集。 |
下列預先定義的 IAM 角色提供必要權限。
角色 | 說明 |
---|---|
bigquery.dataOwner
|
BigQuery 資料擁有者 |
bigquery.admin
|
BigQuery 管理員 |
配額與限制
已授權的資料集會受到資料集限制。詳情請參閱「資料集限制」一節。
授權資料集
如要授權資料集的現有和未來檢視畫面存取其他資料集,請將要授權的資料集新增至要共用資料集的存取清單,方法如下:
主控台
前往 Google Cloud 控制台的「BigQuery」頁面。
在「Explorer」面板中展開專案,然後選取要共用資料的資料集。
按一下「動作」圖示
,然後選取「開啟」。在隨即顯示的詳細資料窗格中,按一下「共用」,然後選取「授權資料集」選項。
在隨即顯示的「Authorized dataset」(授權資料集) 窗格中,以以下格式輸入要授權的資料集「Dataset ID」(資料集 ID):
PROJECT.AUTHORIZED_DATASET
例如:
myProject.myDataset
按一下「新增授權」,然後點選「關閉」。
bq
開啟 Cloud Shell:
使用
bq show
指令,將要共用資料集的現有中繼資料 (包括存取權控管清單) 寫入 JSON 檔案。bq show --format=prettyjson PROJECT:SHARED_DATASET > FILE_PATH
使用文字編輯器,將要授權的資料集新增至 FILE_PATH 建立的 JSON 檔案現有
access
區段。例如:
"access": [ ... { "dataset": { "dataset": { "project_id": "PROJECT", "dataset_id": "AUTHORIZED_DATASET" }, "target_types": "VIEWS" } } ]
使用
bq update
指令更新共用資料集。例如:bq update --source FILE_PATH PROJECT:SHARED_DATASET
如要確認已新增授權的資料集,請再次輸入
bq show
指令。例如:bq show --format=prettyjson PROJECT:SHARED_DATASET
API
呼叫
datasets.get
方法,取得要共用資料集的目前中繼資料,如下所示:GET https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT/datasets/SHARED_DATASET
回應主體會傳回
Dataset
資源,其中包含資料集的 JSON 中繼資料。將要授權的資料集新增至
Dataset
資源傳回的 JSON 中繼資料access
區段,如下所示:"access": [ ... { "dataset": { "dataset": { "project_id": "PROJECT", "dataset_id": "AUTHORIZED_DATASET" }, "target_types": "VIEWS" } } ]
使用
datasets.update
方法,以新增的授權更新資料集:PUT https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT/datasets/SHARED_DATASET
在要求主體中加入更新後的
Dataset
資源。您可以再次呼叫
datasets.get
方法,確認已新增授權資料集。
撤銷資料集的授權
刪除有權存取其他來源資料集的資料集後,來源資料集的存取控制清單 (ACL) 最多可能需要 24 小時,才能完全反映這項變更。在這段期間:
- 您將無法透過已刪除的資料集存取來源資料。
- 已刪除的資料集可能仍會顯示在來源資料集的存取控制清單中,並計入任何授權資料集限制。在 ACL 更新前,您可能無法建立新的授權資料集。
如要撤銷授權資料集中檢視表的存取權,請從共用資料集的存取清單中移除授權資料集,方法如下:
主控台
前往 Google Cloud 控制台的「BigQuery」頁面。
在「Explorer」面板中展開專案,然後選取共用資料集。
按一下「動作」圖示
,然後選取「開啟」。在隨即顯示的詳細資料窗格中,按一下「共用」,然後選取「授權資料集」選項。
在隨即顯示的「授權資料集」窗格中,找出「目前已授權的資料集」部分中授權資料集的項目。
在要移除的授權資料集旁,按一下刪除圖示,然後按一下「關閉」。
bq
開啟 Cloud Shell:
使用
bq show
指令,將共用資料集的現有中繼資料 (包括存取權控管清單) 寫入 JSON 檔案。bq show --format=prettyjson PROJECT:SHARED_DATASET > FILE_PATH
使用文字編輯器從
access
部分移除授權的資料集,該部分是在 FILE_PATH建立的 JSON 檔案中,如下所示:{ "dataset": { "dataset": { "project_id": "PROJECT", "dataset_id": "AUTHORIZED_DATASET" }, "target_types": "VIEWS" } }
使用
bq update
指令更新共用資料集。例如:bq update --source FILE_PATH PROJECT:SHARED_DATASET
如要確認授權資料集已移除,請再次輸入
bq show
指令。 例如:bq show --format=prettyjson PROJECT:SHARED_DATASET
API
呼叫
datasets.get
方法,取得共用資料集的目前中繼資料,如下所示:GET https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT/datasets/SHARED_DATASET
回應主體會傳回
Dataset
資源,其中包含資料集的 JSON 中繼資料。從
Dataset
資源傳回的 JSONaccess
區段中,移除已授權的資料集,例如:{ "dataset": { "dataset": { "project_id": "PROJECT", "dataset_id": "AUTHORIZED_DATASET" }, "target_types": "VIEWS" } }
使用
datasets.update
方法,更新已移除授權的資料集:PUT https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT/datasets/SHARED_DATASET
在要求主體中加入更新後的
Dataset
資源。您可以再次呼叫
datasets.get
方法,確認授權資料集已移除。
在授權資料集中建立或更新檢視表
如要建立或更新授權資料集中的檢視區塊,除了建立或更新標準資料集檢視區塊所需的權限外,您還必須具備必要權限和角色中列出的共用資料集權限。
下表摘要列出建立或更新授權資料集檢視區塊時,所需的身分與存取權管理 (IAM) 權限:
權限 | 資源 |
---|---|
bigquery.datasets.get
|
您要分享的資料集。 |
bigquery.tables.getData
|
您要建立或更新的新檢視區塊中參照的共用資料集資料表或檢視區塊。 |
bigquery.tables.create
|
您要在其中建立檢視區塊的授權資料集。 |
bigquery.tables.update
|
您要更新檢視表的授權資料集。 |
如要從授權資料集刪除檢視區塊,不需要任何額外權限。
查詢授權資料集中的檢視表
如要查詢授權資料集中的檢視表,使用者必須具備該檢視表的存取權,但不需要共用資料集的存取權。
詳情請參閱「授權檢視表」。
已授權的資料集範例
以下範例說明如何建立及使用授權資料集。
假設您有兩個資料集,分別命名為 private_dataset
和 public_dataset
。
private_dataset
資料集包含名為 private_table
的資料表。public_dataset
資料集包含名為 private_table_filtered
的檢視區塊。private_table_filtered
檢視表是以查詢為基礎,該查詢會傳回 private_table
資料表中的部分欄位,但不會傳回所有欄位。
您可以授予使用者權限,存取 private_table_filtered
檢視表傳回的資料,但無法存取 private_table
資料表中的所有資料,如下所示:
將
bigquery.dataViewer
角色授予使用者,讓他們存取public_dataset
資料集。這個角色包含bigquery.tables.getData
權限,可讓使用者查詢public_dataset
資料集中的檢視區塊。如要瞭解如何授予使用者資料集角色,請參閱控管資料集存取權。使用者現在有權查詢
public_dataset
中的檢視區塊,但仍無法存取private_dataset
中的private_table
資料表。如果使用者嘗試直接查詢private_table
資料表,或嘗試透過查詢private_table_filtered
檢視表間接存取private_table
資料表,會收到類似以下的錯誤訊息:Access Denied: Table PROJECT:private_dataset.private_table: User does not have permission to query table PROJECT:private_dataset.private_table.
在 Google Cloud 控制台的「BigQuery」頁面中,開啟
private_dataset
資料集,依序點選「共用」和「授權資料集」。在隨即顯示的「Authorized dataset」(已授權資料集) 窗格中,於「Dataset ID」(資料集 ID) 欄位輸入
PROJECT.public_dataset
,然後按一下「Add Authorization」(新增授權)。public_dataset
資料集會新增至private_dataset
資料集的存取控制清單,授權public_dataset
資料集中的檢視表查詢private_dataset
資料集中的資料。使用者現在可以查詢
public_dataset
資料集中的private_table_filtered
檢視區塊,間接存取private_dataset
資料集,不必具備直接存取private_dataset
資料集資料的權限。
限制
- 您可以在不同區域建立授權資料集,但 BigQuery 不支援跨區域查詢。因此,建議您在相同區域中建立資料集。