存取權控管

本頁面提供 BigQuery 和 BigQuery 資料移轉服務中可用存取權控管的詳盡參考。

如需 BigQuery ML 中存取權控管的相關資訊,請參閱 BigQuery ML 說明文件中的存取權控管

總覽

BigQuery 使用身分與存取權管理 (IAM) 來管理各項資源的存取權限。BigQuery 中的三種可用資源類型為機構、專案和資料集。在 IAM 政策階層中,資料集是專案的子項資源。資料表和視圖是資料集的子項資源,會繼承父項資料集的權限。

如要授予資源的存取權,請將一或多個角色指派給使用者、群組或服務帳戶。機構和專案角色會影響執行工作或管理專案資源的能力,而資料集角色會影響存取或修改特定資料集內資料的能力。

身分與存取權管理提供兩種角色類型:預先定義角色和原始角色。當您同時指派預先定義和原始角色給使用者時,授予的權限是每個角色的權限聯集。

權限與角色

預先定義的角色比較表

您可以指派下列 BigQuery 預先定義的角色。

功能 dataViewer dataEditor dataOwner metadataViewer user jobUser admin
列出/取得專案
列出資料表
取得資料表中繼資料
取得資料表資料
建立資料表
修改/刪除表格
取得資料集中繼資料
建立新資料集
修改/刪除資料集 自建
資料集
建立工作/查詢
取得工作 自建
工作
任何工作
列出工作 任何工作 (其他使用者的工作會被改寫) 任何工作
取消工作 自建
工作
自建
工作
任何工作
取得/列出儲存的查詢
建立/更新/刪除儲存的查詢
透過 BigQuery Storage API 建立讀取工作階段
取得轉移
建立/更新/刪除轉移

BigQuery 權限

下表說明 BigQuery 中的可用權限。

權限 說明
bigquery.jobs.create 建立新工作。
bigquery.jobs.listAll 列出所有工作,並擷取任何使用者所提交之任何工作的中繼資料。*
bigquery.jobs.list 列出所有工作,並擷取任何使用者所提交之任何工作的中繼資料。* 對於其他使用者提交的工作,則會遮蓋詳細資料和中繼資料。
bigquery.jobs.get 取得任何工作的資料和中繼資料。*
bigquery.jobs.update 取消任何工作。*
bigquery.datasets.create 建立新的空資料集。
bigquery.datasets.delete 刪除資料集。
bigquery.datasets.get 取得有關資料集的中繼資料。
bigquery.datasets.update 更新資料集的中繼資料。
bigquery.tables.create 建立新表格。
bigquery.tables.list 列出表格及表格的中繼資料。
bigquery.tables.delete 刪除表格
bigquery.tables.get 取得表格中繼資料。
如要取得表格資料,您需要 bigquery.tables.getData
bigquery.tables.getData 取得表格資料。
如要取得表格中繼資料,您需要 bigquery.tables.get
bigquery.tables.export 從 BigQuery 匯出表格資料。
bigquery.tables.update

更新表格中繼資料。
如要更新表格資料,您需要 bigquery.tables.updateData

bigquery.tables.updateData

更新表格資料。
如要更新表格中繼資料,您需要 bigquery.tables.update

bigquery.transfers.get 取得轉移中繼資料。
bigquery.transfers.update 建立、更新及刪除轉移。
bigquery.savedqueries.create 建立儲存的查詢。
bigquery.savedqueries.get 取得儲存查詢的中繼資料。
bigquery.savedqueries.list 列出儲存的查詢。
bigquery.savedqueries.update 更新儲存的查詢。
bigquery.savedqueries.delete 刪除儲存的查詢。
bigquery.readsessions.create 透過 BigQuery Storage API 建立新的讀取工作階段。

* 對於您建立的任何工作,您會自動取得該工作中 bigquery.jobs.getbigquery.jobs.update 權限的相等權限。

呼叫各個方法時需要的權限

下表列出了呼叫每個方法時必須具備的權限:

方法 所需權限
datasets.delete bigquery.datasets.delete
如果目標資料集不是空的,您還需要 bigquery.tables.delete
datasets.get bigquery.datasets.get
datasets.insert bigquery.datasets.create
datasets.list 使用 bigquery.datasets.get 來檢查回傳資料集的權限。
datasets.patch bigquery.datasets.update
datasets.update bigquery.datasets.update
jobs.cancel bigquery.jobs.update
您可以取消您自己的工作而無需此權限。
jobs.get bigquery.jobs.get
您可以取得您自己的工作而無需此權限。
jobs.getQueryResults bigquery.jobs.get
如要取得工作結果,您需要 bigquery.jobs.get 權限,或您必須是工作擁有者。此外,您還必須是寫入工作結果的表格擁有者。
jobs.insert bigquery.jobs.create 可以啟動工作
可能需要其他權限才能完成工作。
jobs.list bigquery.jobs.list 會顯示所有使用者的全部工作。其他使用者提交工作的詳細資料和中繼資料會經過遮蓋。bigquery.jobs.listAll 搭配使用 allUsers=true 參數可以顯示所有使用者提交之全部工作的完整詳細資料。
jobs.query bigquery.jobs.create 可以啟動工作
可能需要其他權限才能完成工作。
projects.list resourcemanager.projects.get
tabledata.insertAll bigquery.tables.updateData
tabledata.list bigquery.tables.getData
tables.delete bigquery.tables.delete
tables.get bigquery.tables.get
tables.insert bigquery.tables.create
如果使用此方法建立視圖,則還需要該視圖參照的所有表格的 bigquery.tables.getData 權限。
tables.list bigquery.tables.list
tables.patch bigquery.tables.update
tables.update bigquery.tables.update
如果使用此方法更新視圖,則還需要該視圖參照的所有表格的 bigquery.tables.getData 權限。如果已在資料集中授權視圖,則此方法還需要表格相關聯的所有資料集的 bigquery.datasets.update 權限。
projects.transferConfigs.create bigquery.transfers.update
projects.transferConfigs.get bigquery.transfers.get
projects.transferConfigs.patch bigquery.transfers.update

角色

下表列出 Google BigQuery API IAM 角色,以及各角色具備的所有權限對應清單。請注意,每個權限只適用於特定資源類型。

角色 具備的權限: 適用的資源類型:
roles/bigquery.metadataViewer
resourcemanager.projects.get 機構
resourcemanager.projects.list 機構
bigquery.datasets.get 資料集
bigquery.tables.list 資料集
bigquery.tables.get 資料集
roles/bigquery.dataViewer
上述所有權限,以及下列權限:
bigquery.tables.getData 資料集
bigquery.tables.export 資料集
roles/bigquery.dataEditor
上述所有權限,以及下列權限:
bigquery.datasets.create 專案
bigquery.tables.create 資料集
bigquery.tables.delete 資料集
bigquery.tables.update 資料集
bigquery.tables.updateData 資料集
roles/bigquery.dataOwner
上述所有權限,以及下列權限:
bigquery.datasets.delete 專案
bigquery.datasets.update 資料集
roles/bigquery.user
resourcemanager.projects.get 機構
resourcemanager.projects.list 機構
bigquery.jobs.create 專案
bigquery.jobs.list 專案
bigquery.datasets.create 專案
bigquery.datasets.get 專案
bigquery.tables.list 專案
bigquery.transfers.get 專案
bigquery.savedqueries.get 專案
bigquery.savedqueries.list 專案
bigquery.readsessions.create 專案
roles/bigquery.jobUser
resourcemanager.projects.get 機構
bigquery.jobs.create 專案
roles/bigquery.readSessionUser
resourcemanager.projects.get 機構
resourcemanager.projects.list 機構
bigquery.readsessions.create 專案
roles/bigquery.admin
其他角色的所有權限,以及下列權限:
bigquery.jobs.get 專案
bigquery.jobs.listAll 專案
bigquery.jobs.update 專案
bigquery.savedqueries.create 專案
bigquery.savedqueries.delete 專案
bigquery.savedqueries.update 專案
bigquery.transfers.update 專案

預先定義的角色詳細資料

預先定義的角色詳細資料

roles/bigquery.
user

在專案中執行工作 (包括查詢) 的權限。企業中的大部分個體 (數據資料學家/分析師) 應該都是使用者。使用者角色可以列舉各自的工作、取消自己的工作,以及列舉專案中的資料集。此外,還可以在專案中建立新的資料集;系統會將這些新資料集的 bigquery.dataOwner 角色授予給建立者。

理由:此角色可以區隔資料存取權和在專案中執行工作的權限,這在小組成員查詢多個專案的資料時非常有用。此角色還可以列舉資料集和表格,能夠協助使用者探索潛在的資料來源。

資源類型:

  • 機構
  • 專案

roles/bigquery.
jobUser

在專案中執行工作 (包括查詢) 的權限。jobUser 的角色可以取得有關於他們自己的工作或取消他們自己的工作等資訊。

理由:此角色可以區隔資料存取權和在專案中執行工作的權限,這在小組成員查詢多個專案的資料時非常有用。此角色不允許存取任何 BigQuery 資料。如果需要資料存取權,請授予資料集層級存取控制權。

資源類型:

  • 機構
  • 專案

roles/bigquery.
readSessionUser

透過 BigQuery Storage API 在專案中建立及使用讀取工作階段的權限。

理由:此角色可以區隔資料存取權和在專案中建立讀取工作階段的權限。授予 bigquery.readSessionUser 的使用者沒有存取資料表資料的權限。如要讀取資料,您也必須授予 bigquery.tables.getData 權限或針對資料表所屬資料集提供 READER 存取權。

資源類型:

  • 機構
  • 專案

roles/bigquery.
dataViewer

套用於資料集時,dataViewer 會提供以下權限:

  • 讀取資料集的中繼資料,以及列出資料集中的表格。
  • 讀取資料集表格的資料和中繼資料。

在專案或機構層級套用時,這個角色也可以列舉專案中的所有資料集。但還需要其他角色才能執行工作。

例如,只具備資料集 bigquery.dataViewer 權限而沒有何其他權限的使用者,只能列出資料集中的表格和使用 get() API 來讀取表格內容。使用者沒有其他權限,所以不能查詢資料。

請以具備執行查詢權限的使用者為例,設想下列情境。在 projectA 中具備 bigquery.user 權限,以及在 projectA:dataset1 和 projectB:dataset2 中具備 bigquery.dataViewer 權限的使用者,可以在使用這兩個資料集其中之一或兩者皆用的 projectA 中執行查詢。

如需存取 BigQuery 儲存空間外的外部資料來源,可能需要非 BigQuery 資料來源的其他權限。

理由:dataViewer 角色用於唯讀資料存取。dataViewer 可以存取資料,但需要有其他權限 (例如,bigquery.user 或 bigquery.admin 角色授予的權限) 才能發出查詢工作。dataViewer 並不會產生費用。

資源類型:

  • 機構
  • 專案

roles/bigquery.
metadataViewer

套用於機構或專案層級時,metadataViewer 提供以下權限:

  • 列出專案中的所有資料集,以及讀取所有資料集的中繼資料。
  • 列出專案中的所有資料表和視圖,以及讀取所有資料表和視圖的中繼資料。

需要其他角色才能執行工作。

理由:metadataViewer 角色僅用於存取中繼資料。metadataViewer 可以存取資料集、資料表及視圖中繼資料,但需要有其他權限 (例如 bigquery.user 角色授予的權限) 才能執行查詢工作。

資源類型:

  • 機構
  • 專案

roles/bigquery.
dataEditor

套用於資料集時,dataEditor 提供以下權限:

  • 讀取資料集的中繼資料,以及列出資料集中的表格。
  • 建立、更新、取得及刪除資料集的表格。

在專案或機構層級套用時,此角色還可以建立新的資料集。

理由:dataEditor 角色可以針對資料集中的資料表發出建立、更新、刪除權限以延伸 bigquery.dataViewer 權限,但不允許對資料集本身進行異動。

資源類型:

  • 機構
  • 專案
  • 資料集

roles/bigquery.
dataOwner

套用於資料集時,dataOwner 提供以下權限:

  • 讀取、更新及刪除資料集。
  • 建立、更新、取得及刪除資料集的表格。

在專案或機構層級套用時,此角色還可以建立新的資料集。

理由:dataOwner 角色可以新增權限來修改及刪除所含資料集,以延伸 bigquery.dataEditor 權限。

資源類型:

  • 機構
  • 專案
  • 資料集

roles/bigquery.
admin

管理專案中所有資源的權限。可以管理專案中的所有資料,也可以取消在專案中執行的其他使用者的工作。

理由:這是責任內容最廣泛的最高層級角色,在同事執行各種分析時擔任支援的超級使用者。

資源類型:

  • 機構
  • 專案

自訂角色

除了預先定義的角色,BigQuery 還支援自訂角色。詳情請參閱 Cloud IAM 說明文件中的建立及管理自訂角色一文。

不支援的權限

下列權限只能新增至機構層級的自訂角色,無法在專案層級或以下的層級中使用。

  • resourcemanager.projects.list

下列權限可能會以回溯不相容的方式變更,因此不建議用於實際工作環境。這些權限不受任何服務水準協議或廢止政策規範。

  • bigquery.config.get
  • bigquery.config.update

原始 IAM 角色

原始 IAM 角色會直接對映舊版 BigQuery 檢視者/編輯者/擁有者專案角色,以及讀取者/寫入者/擁有者角色。

轉換原始角色

針對較熟悉舊版授權設定的使用者,BigQuery 提供原始角色組合作為專案層級權限 (讀取者、寫入者、擁有者)。

基於相容性目的,每個資料集層級舊版權限會直接對映至其相等的預先定義角色。

BigQuery 舊版權限 IAM 相等角色
專案 - 可以檢視 原始角色 - 檢視者
專案 - 可以編輯 原始角色 - 編輯者
專案 - 是擁有者 原始角色 - 擁有者
資料集 - READER 權限 bigquery.dataViewer
資料集 - WRITER 權限 bigquery.dataEditor
資料集 - OWNER 權限 bigquery.dataOwner

專案的原始角色

根據預設,將存取權授予專案的同時,也會將存取權授予該專案中的資料集。您可以覆寫每個資料集的預設存取權。凡是具備專案 Owner 角色的使用者就能夠撤銷或變更任何專案角色。

建立專案時,BigQuery 即會將 Owner 角色授予建立該專案的使用者。

原始角色 權限
Viewer
  • 可以在專案中啟動工作。不同的工作類型可能還需要其他資料集角色。
  • 可以列出和取得所有工作,以及更新該角色在專案中啟動的工作。
  • 如果您在含有任何檢視者的專案中建立資料集,則 BigQuery 會將新資料集中預先定義的 bigquery.dataViewer 角色授予那些使用者。
Editor
  • 擁有與 Viewer 相同的權限,另外還能:
    • 可以在專案內中建立新資料集
    • 如果您在含有任何編輯者的專案中建立資料集,則 BigQuery 會將新資料集中預先定義的 bigquery.dataEditor 角色授予那些使用者。
Owner
  • 擁有與 Editor 相同的權限,另外還能:
    • 列出專案中的所有資料集
    • 刪除專案中的任何資料集
    • 可以列出和取得在專案中執行的所有工作,包括其他專案使用者執行的工作。
    • 如果您建立資料集,BigQuery 會將新資料集中預先定義的 bigquery.dataOwner 角色授予所有專案擁有者。

      例外狀況:當使用者執行查詢時,系統會建立匿名資料集來儲存快取結果資料表。僅限於使用者被授予 OWNER 存取匿名資料集的權限時執行查詢的作業。

使用 Google Cloud Platform 主控台可以授予或撤銷專案的原始角色。您必須具備專案的 Owner 存取權,才能授予或撤銷新專案角色。

如要深入瞭解如何授予或撤銷專案角色的存取權,請參閱管理專案成員一文。

資料集的原始角色

資料集的原始角色在功能上與轉換原始角色一節中所述的預先定義角色相等。

您可以將資料集角色授予以下實體類型:

實體類型 API
單一使用者,按電子郵件地址識別 access.userByEmail
Google 網上論壇,按電子郵件地址識別 access.groupByEmail
預先定義的使用者群組,如所有使用者或在含有該資料集的專案中具備相同專案角色的使用者群組 access.specialGroup

以下原始角色適用於資料集:

資料集角色 權限
READER
  • 可以讀取、查詢、複製或匯出資料集中的表格
    • 可以對資料集呼叫 get
    • 可以對資料集中的資料表呼叫 getlist
    • 可以對資料集中表格的表格資料呼叫 list
WRITER
  • 擁有與 READER 相同的權限,另外還能:
    • 可以在資料集中編輯或附加資料
      • 可以呼叫 insertinsertAllupdatedelete
      • 可以使用資料集中的表格作為載入、複製或查詢工作的目的地
OWNER
  • 擁有與 WRITER 相同的權限,另外還能:
    • 可以對資料集呼叫 update
    • 可以對資料集呼叫 delete

附註:資料集必須至少包含一個具備 OWNER 角色的實體。擁有 OWNER 角色的使用者無法移除自己的 OWNER 角色。

當您建立新資料集時,BigQuery 會在下列實體中新增預設資料集存取權。您在資料集建立時指定的角色會覆寫預設值。

實體 資料集角色
擁有專案 Viewer 存取權的所有使用者 READER
擁有專案 Editor 存取權的所有使用者 WRITER
擁有專案 Owner 存取權的所有使用者

OWNER

例外狀況:當使用者執行查詢時,系統會建立匿名資料集來儲存快取結果資料表。僅限於使用者被授予 OWNER 存取匿名資料集的權限時執行查詢的作業。

您可以使用下列任一方式來授予或撤銷資料集角色:

  • 透過 BigQuery API 並使用 update
  • 使用網頁版 UI,按一下資料集名稱旁的下拉式選單,然後按一下 [Share dataset] (分享資料集)
  • 使用 「bq update」指令,透過「bq」指令列工具執行。使用「--source」標記指定 JSON 檔案,其中包含已設定「access」(存取權) 欄位的部分「資料集」 資源。

範例情境

以下範例中的一組數據資料學家隸屬名稱為 AnalystGroup 的 Google 網上論壇

資料集資料的讀取和寫入權限

CompanyProject 是含有 dataset1 和 dataset2 的專案。AnalystGroup1 是一群只使用 dataset1 的數據資料學家,而 AnalystGroup2 這群數據資料學家只使用 dataset2。數據資料學家應該只對他們使用的資料集擁有完整存取權,包括對資料執行查詢的存取權。

資料集的讀取和寫入權限
對資料集 CompanyProject:dataset1 的權限 授予對 dataset1 的 AnalystGroup1 WRITER 權限。這個角色對應至預先定義的身分與存取權管理角色:bigquery.dataEditor
對資料集 CompanyProject:dataset2 的權限 授予對 dataset2 的 AnalystGroup2 WRITER 權限。這個角色對應至預先定義的身分與存取權管理角色:bigquery.dataEditor
對專案 CompanyProject 的權限 授予對 CompanyProject 的 AnalystGroup1 和 AnalystGroup2 bigquery.user 權限。

提供數據資料學家在資料集層級的 WRITER 權限,讓他們能在資料集中查詢資料表的資料,但無權在專案中執行查詢工作。如要對已取得相關存取權的資料集執行查詢工作,數據資料學家群組必須取得專案層級的預先定義角色:bigquery.userbigquery.user 角色會授予 bigquery.jobs.create 權限。

您也可以將數據資料學家群組加入可授予 bigquery.jobs.create 權限的專案層級身分與存取權管理自訂角色

專案資料的完整存取權

AnalystGroup 是一群使用 BigQuery 的數據資料學家,在名稱為 CompanyProject 的專案中負責 BigQuery 的所有使用作業。這個群組希望所有成員都具備所有資料的讀取和寫入權限。機構中的其他群組會使用其他 Cloud Platform 產品,但沒有任何其他使用者會與 BigQuery 互動。AnalystGroup 不使用任何其他 Cloud Platform 服務。

專案資料的完整存取權
對專案 CompanyProject 的權限 將 AnalystGroup 新增至預先定義的角色 bigquery.admin

在機構中的完整存取權

CompanyA 這間組織機構希望名為 Admin1 的特定人員成為管理員,負責管理其所有專案中的所有 BigQuery 資料。MonitoringServiceAccount 是一種服務帳戶,負責監控機構中所有專案內的所有表格大小。

在機構中的完整存取權
對機構 CompanyA 的權限

如果公司決定 MonitoringServiceAccount 也應修剪超出特定大小的資料表大小,並移除在特定時間範圍之前的資料,則必須將 MonitoringServiceAccount 新增至預先定義的角色 bigquery.user

相同專案中的資料讀取權限

AnalystGroup 是一組數據資料學家,負責名稱為 CompanyProject 的專案中的分析服務。OperationsServiceAccount 是一個服務帳戶,負責藉由特定 CompanyProject:AppLogs 資料集的大量載入工作,將應用程式紀錄載入 BigQuery。這些分析師無權修改紀錄。

相同專案中的資料讀取權限
對專案 CompanyProject 的權限
  • 將 OperationsServiceAccount 新增至預先定義的角色 bigquery.user
  • 將 AnalystGroup 新增至預先定義的角色 bigquery.user
對資料集 CompanyProject:AppLogs 的權限

不同專案中的資料讀取權限

AnalystGroup 是一組數據資料學家,負責名稱為 CompanyAnalytics 的專案中的分析服務。但他們分析的資料會存放在另一個名稱為 CompanyLogs 的專案中。OperationsServiceAccount 是一個服務帳戶,負責藉由 CompanyLogs 專案中各種資料集的大量載入工作,將應用程式紀錄載入 BigQuery。

AnalystGroup 只能讀取 CompanyLogs 專案中的資料,無法建立其他儲存空間或在該專案中執行任何查詢工作。因此,這些分析師改用專案 CompanyAnalytics 來執行工作,並在 CompanyAnalytics 專案中維護他們的工作輸出。

不同專案中的資料讀取權限
對專案 CompanyLogs 的權限
對專案 CompanyAnalytics 的權限
  • 將 AnalystGroup 新增至預先定義的角色 bigquery.user

透過程式操縱角色

您可以使用以下方法,利用程式來操縱資料集、

專案和機構層級上預先定義的角色。

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁