已獲授權的資料集
本文說明如何在 BigQuery 中使用授權資料集。授權資料集可讓您授權指定資料集中的所有檢視表,以便存取第二個資料集中的資料。有了已授權的資料集,您就不需要設定個別已授權的檢視畫面。
總覽
BigQuery 中的檢視表是 SQL 查詢定義的虛擬資料表。舉例來說,檢視畫面的查詢可能只會傳回資料表的部分資料欄,不包含含有個人識別資訊 (PII) 的資料欄。如要查詢檢視區塊,使用者必須能存取檢視區塊查詢所存取的資源。
授權檢視表
如果您希望使用者能夠查詢檢視區塊,但不讓他們直接存取檢視區塊參照的資源,可以使用已授權的檢視區塊。建立授權檢視表時,您可以分享邏輯檢視表或具體化檢視表。授權具體化檢視表後,就會稱為已授權的具體化檢視表。
舉例來說,您可以透過已授權的檢視表,與指定群組或使用者 (主體) 分享較受限制的資料,而不需要讓主體存取所有基礎資料。授權者可以查看您分享的資料,並對資料執行查詢,但無法直接存取來源資料集。相反地,授權的檢視表可以存取來源資料。
已獲授權的資料集
如果您想讓檢視表集合存取資料集,但不必為每個個別檢視表授予權限,可以將檢視表分組成一個資料集,然後讓包含檢視表的資料集存取包含資料的資料集。接著,您可以視需要將資料集的檢視畫面群組或資料集中的個別檢視畫面存取權授予實體。
可存取其他資料集的資料集稱為已授權資料集。授權其他資料集存取其資料的資料集稱為「共用資料集」。
所需權限和角色
如要授權資料集或撤銷資料集的授權,您必須具備下列身分與存取權管理 (IAM) 權限,才能更新共用資料集的存取權控管清單。
授權資料集後,如果您想在已授權的資料集中建立或更新檢視表,就必須具備相同的權限。詳情請參閱「在授權資料集中建立或更新檢視表」。
權限 | 資源 |
---|---|
bigquery.datasets.get
|
你要分享的資料集。 |
bigquery.datasets.update
|
你要分享的資料集。 |
以下是提供必要權限的預先定義 IAM 角色。
角色 | 說明 |
---|---|
bigquery.dataOwner
|
BigQuery 資料擁有者 |
bigquery.admin
|
BigQuery 管理員 |
配額與限制
已授權的資料集須遵守資料集限制。詳情請參閱「資料集限制」。
授權資料集
您可以將要授權的資料集新增至要共用的資料集存取清單,授權資料集的目前和未來檢視畫面存取另一個資料集,如下所示:
主控台
前往 Google Cloud 控制台的「BigQuery」頁面。
在「Explorer」面板中展開專案,然後選取含有要分享資料的資料集。
按一下
「動作」圖示,然後選取「開啟」。在隨即顯示的詳細資料窗格中,按一下「Sharing」,然後選取「Authorize Datasets」選項。
在隨即顯示的「已授權資料集」窗格中,輸入要授權的資料集資料集 ID,格式如下:
PROJECT.AUTHORIZED_DATASET
例如:
myProject.myDataset
按一下「Add Authorization」,然後點選「Close」。
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
方法,確認已新增授權資料集。
撤銷資料集的授權
當您刪除已授權存取其他來源資料集的資料集時,這項變更可能需要最多 24 小時,才能完全反映在來源資料集的存取控制清單 (ACL) 中。在這段期間:
- 您將無法透過已刪除的資料集存取來源資料。
- 已刪除的資料集可能仍會顯示在來源資料集的 ACL 中,並計入任何已授權的資料集限制。這可能會導致您無法建立新的授權資料集,直到更新 ACL 為止。
如要撤銷已授予授權資料集中檢視表的存取權,請按照下列步驟從共用資料集的存取清單中移除已授權的資料集:
主控台
前往 Google Cloud 控制台的「BigQuery」頁面。
在「Explorer」面板中展開專案,然後選取共用資料集。
按一下
「動作」圖示,然後選取「開啟」。在隨即顯示的詳細資料窗格中,按一下「Sharing」,然後選取「Authorize Datasets」選項。
在隨即顯示的「已授權資料集」窗格中,在「目前已授權的資料集」部分找出已授權資料集的項目。
按一下要移除的授權資料集旁的刪除圖示,然後按一下「關閉」。
bq
開啟 Cloud Shell:
使用
bq show
指令,將共用資料集現有的中繼資料 (包括存取權控管清單) 寫入 JSON 檔案。bq show --format=prettyjson PROJECT:SHARED_DATASET > FILE_PATH
使用文字編輯器,從 FILE_PATH 建立的 JSON 檔案
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
部分移除已授權的資料集,例如:{ "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
資料表中的所有資料存取權,如下所示:
為
public_dataset
資料集授予bigquery.dataViewer
角色給使用者。這個角色包含bigquery.tables.getData
權限,可讓使用者查詢public_dataset
資料集中的檢視表。如要進一步瞭解如何為資料集向使用者授予角色,請參閱「控管資料集存取權」。使用者現在有權查詢
public_dataset
中的檢視區塊,但仍無法存取private_dataset
中的private_table
資料表。如果使用者嘗試直接查詢private_table
資料表,或是嘗試間接存取private_table
資料表 (透過查詢private_table_filtered
檢視表),就會收到類似以下的錯誤訊息: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
資料集,按一下「Sharing」(共用),然後選取「Authorize Datasets」(授權資料集)。在隨即顯示的「Authorized dataset」窗格中,在「Dataset ID」欄位中輸入
PROJECT.public_dataset
,然後按一下「Add Authorization」。public_dataset
資料集會新增至private_dataset
資料集的存取控制清單,授權public_dataset
資料集中的檢視表查詢private_dataset
資料集中的資料。使用者現在可以查詢
public_dataset
資料集中的private_table_filtered
檢視區塊,間接存取private_dataset
資料集,而無須具備任何權限即可直接存取private_dataset
資料集中的資料。
限制
- 您可以在不同區域中建立授權資料集,但 BigQuery 不支援跨區域查詢。因此,建議您在相同的區域中建立資料集。