授權檢視表

本文說明如何在 BigQuery 中建立授權檢視表和授權具體化檢視表。

總覽

資料管理員可以建立授權檢視區塊,與特定使用者和群組 (主體) 分享資料集中的部分資料。主體可以查看您分享的資料並對其執行查詢,但無法直接存取來源資料集。

查看類型

邏輯檢視表是 BigQuery 的預設檢視表類型,而具體化檢視表是預先運算的檢視表,會定期快取查詢結果,以提高效能和效率。

邏輯檢視表的授權檢視表稱為授權檢視表,但具體化檢視表的授權檢視表稱為授權具體化檢視表

如果邏輯檢視區塊依賴大型或運算成本高昂的查詢,則可以改為建立具體化檢視區塊。不過,您通常可以只查詢部分資料或使用其他技術來提升效能,不必建立具體化檢視區塊。

詳情請參閱下列資源:

建立授權檢視表的高階步驟

如要建立及共用檢視區塊,請參閱下列高階步驟,這些步驟適用於授權邏輯檢視區塊和授權具體化檢視區塊。

  • 建立資料集來存放來源資料。
  • 執行查詢,將資料載入來源資料集中的目的地資料表。
  • 建立資料集來存放授權檢視表。
  • 透過 SQL 查詢建立授權檢視表,限制資料分析師可在查詢結果中查看的資料欄。
  • 授予資料分析師執行查詢工作的權限。
  • 授予資料分析師對內含授權檢視表的資料集存取權。
  • 授予授權檢視表來源資料集的存取權。

替代方案

雖然授權檢視畫面具有彈性且可擴充,但下列其中一種方法可能更適合您的用途:

  • 在表格中設定資料列層級政策。
  • 在表格中設定資料欄層級政策。
  • 將資料儲存在不同的資料表中。
  • 分享資料集中的所有檢視表 (已授權資料集)。

使用資料列層級或資料欄層級安全性,或使用不同的資料表

資料管理員可以在資料表上設定資料列層級的存取權政策,或建立個別資料表來存放機密資料,藉此限制使用者查看該資料的權限。將資料儲存在獨立的資料表中會隔離資料,並移除查看資料表中有多少資料列的功能。

此外,資料管理員可以建立及套用政策代碼,限制使用者查看資料表中的資料欄。

將資料儲存在獨立資料表中是最安全的方法,但彈性最低。設定資料列層級政策既彈性又安全,而共用授權檢視畫面則彈性十足,且效能最佳。

如要詳細比較這些方法,請參閱下列資源:

共用資料集中的所有檢視畫面

如要授予檢視表集合資料集的存取權,不必逐一授權每個檢視表,可以將檢視表歸入同一個資料集,然後授予包含檢視表的資料集,存取包含資料的資料集。

然後視需要授予主體權限,存取含有檢視群組的資料集,或資料集中的個別檢視畫面。可存取其他資料集的資料集稱為「授權資料集」。授權其他資料集存取資料的資料集稱為「共用資料集」

詳情請參閱「授權資料集」和「授權資料集」一文。

限制

  • 在其他資料集中建立授權檢視表或授權具體化檢視表時,來源資料集和授權檢視表資料集必須位於相同的區域位置
  • 刪除授權檢視表後,系統最多可能需要 24 小時,才會從檢視表清單中移除該授權檢視表。這段期間您無法存取已授權的檢視表,但已刪除的已授權檢視表可能會出現在檢視表清單中,並計入已授權檢視表上限。如果新的授權檢視區塊會超出這項限制,系統就會禁止建立。

事前準備

授予身分與存取權管理 (IAM) 角色,讓使用者具備必要權限,可查詢您共用的授權檢視區塊或授權具體化檢視區塊。

必要的角色

如要建立或更新授權的檢視表,您必須具備該檢視表所屬資料集的權限,以及提供該檢視表存取權的資料集的權限。

此外,您還需要授予使用者或群組檢視表所屬專案和資料集的存取權。

包含檢視表的資料集管理員權限

BigQuery 會將檢視表視為資料表資源,因此建立檢視表需要的權限和建立資料表相同。您還需擁有檢視表 SQL 查詢所參照的資料表查詢權限。

如要建立資料檢視,您需要 bigquery.tables.create IAM 權限。roles/bigquery.dataEditor 這個預先定義的 IAM 角色具備建立檢視區塊所需的權限。

此外,如果您具備 bigquery.datasets.create 權限,可以在您建立的資料集中建立檢視區塊。如要為不屬於您的資料建立檢視區塊,您必須具備該資料表的 bigquery.tables.getData 權限。

如要進一步瞭解 BigQuery 中的 IAM 角色和權限,請參閱預先定義的角色和權限

提供檢視表存取權的第二個資料集管理員權限

如要更新資料集屬性,您需要下列 IAM 權限:

  • bigquery.datasets.update
  • bigquery.datasets.setIamPolicy (僅在 Google Cloud 控制台中更新資料集存取權控管設定時需要)

roles/bigquery.dataOwner 預先定義的 IAM 角色包含更新資料集屬性所需的權限。

此外,如果您具備 bigquery.datasets.create 權限,可以更新所建立資料集的屬性。

如要進一步瞭解 BigQuery 中的 IAM 角色和權限,請參閱預先定義的角色與權限一文。

檢視專案和資料集的使用者權限

如要與使用者或群組共用授權檢視畫面,您必須授予使用者或群組下列 IAM 權限:

  • 專案的 roles/bigquery.user IAM 角色,其中包含授權檢視畫面。
  • 授權檢視表所屬資料集的 roles/bigquery.dataViewer IAM 角色。

使用授權檢視表

以下各節說明如何使用授權檢視區塊和授權具體化檢視區塊。

建立授權檢視表

如要建立授權檢視區塊,請選擇下列其中一個選項。如需授權、共用及刪除授權檢視表的完整步驟,請參閱「建立授權檢視表」教學課程。

主控台

  1. 前往「BigQuery」頁面

    前往 BigQuery

  2. 在查詢編輯器中,輸入要用來建立授權檢視區塊的查詢。

  3. 依序點按「儲存」>「儲存檢視畫面」

  4. 在「Save view」(儲存檢視表) 對話方塊中,執行下列操作:

    1. 在「Project」(專案) 部分,輸入要儲存檢視表的專案。

    2. 在「Dataset」(資料集) 部分,輸入要儲存檢視表的資料集。這個資料集必須與來源查詢中使用的資料集不同。

    3. 在「Table」(資料表) 部分,輸入檢視表的名稱。

    4. 按一下 [儲存]

  5. 必要權限授予可使用授權檢視畫面的使用者。

  6. 在「Explorer」窗格中,選取來源查詢中使用的資料集。

  7. 在「詳細資料」窗格中,依序點選「共用」>「授權檢視」

  8. 在「Authorized views」(已授權檢視表) 窗格中,為「Authorized view」(已授權檢視表) 輸入檢視表的完整名稱,格式為 PROJECT_ID.DATASET_ID.VIEW_NAME

  9. 按一下「新增授權」

Terraform

如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。

# Creates an authorized view.

# Create a dataset to contain the view.
resource "google_bigquery_dataset" "view_dataset" {
  dataset_id  = "view_dataset"
  description = "Dataset that contains the view"
  location    = "us-west1"
}

# Create the view to authorize.
resource "google_bigquery_table" "movie_view" {
  project     = google_bigquery_dataset.view_dataset.project
  dataset_id  = google_bigquery_dataset.view_dataset.dataset_id
  table_id    = "movie_view"
  description = "View to authorize"

  view {
    query          = "SELECT item_id, avg(rating) FROM `movie_project.movie_dataset.movie_ratings` GROUP BY item_id ORDER BY item_id;"
    use_legacy_sql = false
  }
}


# Authorize the view to access the dataset
# that the query data originates from.
resource "google_bigquery_dataset_access" "view_authorization" {
  project    = "movie_project"
  dataset_id = "movie_dataset"

  view {
    project_id = google_bigquery_table.movie_view.project
    dataset_id = google_bigquery_table.movie_view.dataset_id
    table_id   = google_bigquery_table.movie_view.table_id
  }
}

# Specify the IAM policy for principals that can access
# the authorized view. These users should already
# have the roles/bigqueryUser role at the project level.
data "google_iam_policy" "principals_policy" {
  binding {
    role = "roles/bigquery.dataViewer"
    members = [
      "group:example-group@example.com",
    ]
  }
}

# Set the IAM policy on the authorized  view.
resource "google_bigquery_table_iam_policy" "authorized_view_policy" {
  project     = google_bigquery_table.movie_view.project
  dataset_id  = google_bigquery_table.movie_view.dataset_id
  table_id    = google_bigquery_table.movie_view.table_id
  policy_data = data.google_iam_policy.principals_policy.policy_data
}

如要在 Google Cloud 專案中套用 Terraform 設定,請完成下列各節的步驟。

準備 Cloud Shell

  1. 啟動 Cloud Shell
  2. 設定要套用 Terraform 設定的預設 Google Cloud 專案。

    每項專案只需要執行一次這個指令,且可以在任何目錄中執行。

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    如果您在 Terraform 設定檔中設定明確值,環境變數就會遭到覆寫。

準備目錄

每個 Terraform 設定檔都必須有自己的目錄 (也稱為根模組)。

  1. Cloud Shell 中建立目錄,並在該目錄中建立新檔案。檔案名稱的副檔名必須是 .tf,例如 main.tf。在本教學課程中,這個檔案稱為 main.tf
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 如果您正在學習教學課程,可以複製每個章節或步驟中的範例程式碼。

    將範例程式碼複製到新建立的 main.tf

    視需要從 GitHub 複製程式碼。如果 Terraform 程式碼片段是端對端解決方案的一部分,建議您使用這個方法。

  3. 查看並修改範例參數,套用至您的環境。
  4. 儲存變更。
  5. 初始化 Terraform。每個目錄只需執行一次這項操作。
    terraform init

    如要使用最新版 Google 供應商,請加入 -upgrade 選項:

    terraform init -upgrade

套用變更

  1. 檢查設定,確認 Terraform 即將建立或更新的資源符合您的預期:
    terraform plan

    視需要修正設定。

  2. 執行下列指令,並在提示中輸入 yes,即可套用 Terraform 設定:
    terraform apply

    等待 Terraform 顯示「Apply complete!」訊息。

  3. 開啟 Google Cloud 專案即可查看結果。在 Google Cloud 控制台中,前往 UI 中的資源,確認 Terraform 已建立或更新這些資源。

管理授權檢視畫面的使用者或群組

授權檢視畫面後,您可以對資料集、資料表或檢視畫面完成下列工作,維持存取權:

  • 查看存取權政策。
  • 授予存取權。
  • 撤銷存取權。
  • 拒絕存取。

詳情請參閱「使用 IAM 控管資源存取權」。

移除檢視區塊的授權

如要移除檢視區塊的授權,請選取下列其中一個選項:

主控台

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

    前往 BigQuery

  2. 在「Explorer」窗格中展開專案並選取資料集。

  3. 依序按一下「共用」>「授權檢視」

  4. 按一下 即可移除授權

  5. 按一下 [關閉]

bq

如要移除檢視區塊的授權,請使用 bq rm 指令。輸入要移除授權的檢視表 table_id

    bq rm \
    project_id:dataset:table_id
    

API

呼叫 tables.delete 方法,並使用 projectIDdatasetIDtableID 屬性移除資料集的授權檢視區塊。詳情請參閱「資料表」。

配額與限制

  • 授權檢視表會受到資料集限制。詳情請參閱「資料集限制」一節。
  • 移除授權檢視後,系統最多可能需要 24 小時,才會移除所有檢視參照。為避免發生錯誤,請等待 24 小時再重新使用已移除檢視區塊的名稱,或是為檢視區塊建立專屬名稱。

進階主題

以下各節說明授權檢視區塊的進階使用方法。

結合資料列層級安全防護機制與授權檢視畫面

系統會根據基礎來源資料表的資料列層級存取政策,篩選邏輯檢視或具體化檢視中顯示的資料。

如要瞭解資料列層級安全防護機制與具體化檢視表的互動方式,請參閱將資料列層級的安全性與其他 BigQuery 功能搭配使用

結合資料欄層級安全防護機制與授權檢視畫面

資料欄層級安全性對檢視區的影響,與檢視區是否為授權檢視區無關。

如要詳細瞭解權限的套用方式,請參閱「查詢檢視區塊」一文,瞭解資料欄層級的安全性。

使用 BigQuery 共用功能和授權檢視表

BigQuery sharing (舊稱 Analytics Hub) 是資料交換平台,提供下列功能:

  • 讓您跨機構疆界大規模分享資料和洞察資訊。
  • 採用完善的安全性和隱私權架構。
  • 支援將 BigQuery 資料集 (稱為共用資料集) 及其相關聯的授權檢視表和授權資料集發布給一組訂閱者。

連結的資料集是唯讀 BigQuery 資料集,做為共用資料集的指標或參照。訂閱「共用」清單會在專案中建立連結的資料集,但不會複製資料集,因此訂閱者可以讀取資料,但無法在其中新增或更新物件。

系統不支援參照連結資料集中資料表的具體化檢視表。

詳情請參閱「共用簡介」。

後續步驟