已獲授權的資料集

在 BigQuery 中,您可以透過授權資料集,授權指定資料集中的所有檢視表存取第二個資料集中的資料。有了已授權資料集,您就不必設定個別授權檢視表。

總覽

BigQuery 中的檢視表是由 SQL 查詢定義的虛擬資料表。舉例來說,檢視表的查詢可能只會傳回資料表的部分資料欄,不含含有個人識別資訊 (PII) 的資料欄。如要查詢檢視表,使用者必須有權存取檢視表查詢所存取的資源。

授權檢視表

如要讓使用者查詢檢視表,但不直接授予檢視表參照資源的存取權,可以使用授權檢視表。建立授權 view 時,您可以共用邏輯 view 或 materialized view。授權的 materialized view 稱為「授權 materialized view」。

舉例來說,授權檢視表可讓您與指定群組或使用者 (主體) 共用檢視表中較有限的資料,而不必授予主體所有基礎資料的存取權。主體可以查看您分享的資料並執行查詢,但無法直接存取來源資料集。而是由授權檢視表存取來源資料。

已獲授權的資料集

如要將資料集的存取權授予一組檢視表,而不必個別授權,可以將檢視表分組到資料集,然後將含有資料的資料集存取權授予含有檢視表的資料集。接著,您可以視需要將資料集與檢視表群組的存取權,或資料集中個別檢視表的存取權,授予主體。

可存取其他資料集的資料集稱為「已授權資料集」。授權其他資料集存取其資料的資料集稱為「共用資料集」。

所需權限和角色

如要授權資料集或撤銷資料集的授權,您必須具備下列 Identity and Access Management (IAM) 權限,才能更新共用資料集的存取控管清單。

權限 資源
bigquery.datasets.get 您要共用的資料集。
bigquery.datasets.update 您要共用的資料集。

下列預先定義的 IAM 角色提供必要權限。

角色 說明
bigquery.dataOwner BigQuery 資料擁有者
bigquery.admin BigQuery 管理員

資料集獲得授權後,您可以在授權資料集中建立或更新檢視表。如要進一步瞭解相關資訊和必要權限,請參閱「在授權資料集中建立或更新檢視表」。

配額與限制

已授權的資料集受資料集限制。詳情請參閱「資料集限制」。

資料集的存取控制清單最多可有 2,500 項授權資源,包括授權檢視表、授權資料集和授權函式。 如果授權檢視表數量過多而超過這項限制,建議您將檢視表分組為授權資料集。 最佳做法是在設計新的 BigQuery 架構 (尤其是多租戶架構) 時,將相關檢視表分組到授權資料集。

授權資料集

如要授權資料集目前和未來的檢視表存取其他資料集,請將要授權的資料集新增至要共用的資料集存取清單,如下所示:

控制台

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往「BigQuery」

  2. 點選左側窗格中的 「Explorer」。

    醒目顯示的「Explorer」窗格按鈕。

    如果沒有看到左側窗格,請按一下 「Expand left pane」(展開左側窗格),開啟窗格。

  3. 在「Explorer」窗格中展開專案,依序點選「Datasets」(資料集) 和資料集。

  4. 在隨即顯示的詳細資料窗格中,按一下「Sharing」(共用),然後選取「Authorize Datasets」(授權資料集) 選項。

  5. 在顯示的「Authorized dataset」(授權資料集) 窗格中,輸入要授權的資料集「Dataset ID」(資料集 ID),格式如下:

    PROJECT.AUTHORIZED_DATASET

    例如:

    myProject.myDataset

  6. 依序點選「新增授權」和「關閉」。

bq

  1. 使用 bq show 指令,將要共用的資料集現有中繼資料 (包括存取控制清單) 寫入 JSON 檔案。

    bq show --format=prettyjson PROJECT:SHARED_DATASET > FILE_PATH
  2. 使用文字編輯器,將要授權的資料集新增至 FILE_PATH 建立的 JSON 檔案中現有的 access 區段。

    例如:

    "access": [
     ...
     {
       "dataset": {
         "dataset": {
           "project_id": "PROJECT",
           "dataset_id": "AUTHORIZED_DATASET"
         },
         "target_types": "VIEWS"
       }
     }
    ]

  3. 使用 bq update 指令更新共用資料集。例如:

    bq update --source FILE_PATH PROJECT:SHARED_DATASET
  4. 如要確認已新增授權資料集,請再次輸入 bq show 指令。例如:

    bq show --format=prettyjson PROJECT:SHARED_DATASET

API

  1. 呼叫 datasets.get 方法,取得要共用的資料集目前中繼資料,如下所示:

    GET https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT/datasets/SHARED_DATASET

    回應主體會傳回 Dataset 資源,其中包含資料集的 JSON 中繼資料。

  2. 將要授權的資料集新增至 Dataset 資源中傳回的 JSON 中繼資料 access 部分,如下所示:

    "access": [
     ...
     {
       "dataset": {
         "dataset": {
           "project_id": "PROJECT",
           "dataset_id": "AUTHORIZED_DATASET"
         },
         "target_types": "VIEWS"
       }
     }
    ]
  3. 使用 datasets.update 方法,以新增的授權更新資料集:

    PUT https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT/datasets/SHARED_DATASET

    在要求主體中加入更新後的 Dataset 資源。

  4. 您可以再次呼叫 datasets.get 方法,確認已新增授權資料集。

撤銷資料集授權

刪除有權存取其他來源資料集的資料集後,來源資料集的存取控制清單 (ACL) 最多可能需要 24 小時才會完全反映這項變更。在這段期間:

  • 您將無法透過已刪除的資料集存取來源資料。
  • 已刪除的資料集可能仍會顯示在來源資料集的 ACL 中,並計入已授權資料集的限制。在 ACL 更新前,您可能無法建立新的授權資料集。

如要撤銷已授權資料集中授予檢視表的存取權,請從共用資料集的存取清單中移除已授權資料集,步驟如下:

控制台

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往「BigQuery」

  2. 點選左側窗格中的 「Explorer」。

    醒目顯示的「Explorer」窗格按鈕。

  3. 在「Explorer」窗格中展開專案,依序點選「Datasets」(資料集) 和資料集。

  4. 在隨即顯示的詳細資料窗格中,按一下「Sharing」(共用),然後選取「Authorize Datasets」(授權資料集) 選項。

  5. 在顯示的「Authorized dataset」(已授權資料集) 窗格中,找出「Currently authorized datasets」(目前已授權資料集) 部分中的已授權資料集項目。

  6. 按一下要移除的授權資料集旁的刪除圖示,然後按一下「Close」(關閉)。

bq

  1. 使用 bq show 指令,將共用資料集的現有中繼資料 (包括存取控制清單) 寫入 JSON 檔案。

    bq show --format=prettyjson PROJECT:SHARED_DATASET > FILE_PATH
  2. 使用文字編輯器,從 FILE_PATH 建立的 JSON 檔案 access 部分中移除授權資料集,如下所示:

      {
        "dataset": {
          "dataset": {
            "project_id": "PROJECT",
            "dataset_id": "AUTHORIZED_DATASET"
          },
          "target_types": "VIEWS"
        }
      }
  3. 使用 bq update 指令更新共用資料集。例如:

    bq update --source FILE_PATH PROJECT:SHARED_DATASET
  4. 如要確認已移除授權資料集,請再次輸入 bq show 指令。例如:

    bq show --format=prettyjson PROJECT:SHARED_DATASET

API

  1. 呼叫 datasets.get 方法,取得共用資料集目前的中繼資料,如下所示:

    GET https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT/datasets/SHARED_DATASET

    回應主體會傳回 Dataset 資源,其中包含資料集的 JSON 中繼資料。

  2. 從 Dataset 資源傳回的 JSON access 區段中移除已授權資料集,例如:

     {
       "dataset": {
         "dataset": {
           "project_id": "PROJECT",
           "dataset_id": "AUTHORIZED_DATASET"
         },
         "target_types": "VIEWS"
       }
     }
  3. 使用 datasets.update 方法更新資料集,移除授權:

    PUT https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT/datasets/SHARED_DATASET

    在要求主體中加入更新後的 Dataset 資源。

  4. 您可以再次呼叫 datasets.get 方法,確認已移除授權資料集。

在已授權資料集中建立或更新檢視表

如要建立或更新已授權資料集中的檢視表,除了建立或更新標準資料集檢視表所需的權限外,您還必須具備「必要權限和角色」中列出的共用資料集權限。

下表摘要說明建立或更新授權資料集中的檢視表,所需具備的 Identity and Access Management (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 資料表中的所有資料存取權,如下所示:

  1. 將 public_dataset 資料集的 bigquery.dataViewer 角色授予使用者。這個角色具備 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.

  2. 在 Google Cloud 控制台的「BigQuery」頁面中,開啟private_dataset資料集,按一下「Sharing」(共用),然後選取「Authorize Datasets」(授權資料集)。

  3. 在顯示的「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 不支援跨區域查詢。因此,建議您在相同區域建立資料集。
  • 您無法在次要副本中建立授權資料集。詳情請參閱「資料集複製中的資源行為」。

後續步驟

  • 如要瞭解如何授權個別檢視表存取資料集中的資料,請參閱「授權檢視表」。

  • 如要瞭解如何授權資料表函式或 user-defined function 存取資料集中的資料,請參閱「授權函式」。