變更資料集層級的存取權控管設定
自 2026 年 3 月 17 日起,如要查看資料集的存取權控管設定及查詢 INFORMATION_SCHEMA.OBJECT_PRIVILEGES 檢視畫面,必須具備 bigquery.datasets.getIamPolicy Identity and Access Management (IAM) 權限。您必須具備 bigquery.datasets.setIamPolicy 權限,才能更新資料集的存取權控管,或使用 API 建立具有存取權控管的資料集。
選擇提早強制執行
2026 年 3 月 17 日前,您可以選擇提前強制執行權限變更。選擇啟用後,您必須具備 bigquery.datasets.getIamPolicy 權限才能取得資料集的存取權控管,並具備 bigquery.datasets.setIamPolicy 權限才能更新資料集的存取權控管,或使用 API 建立具有存取權控管的資料集。
如要啟用提前強制執行功能,請在機構或專案層級將 enable_fine_grained_dataset_acls_option 設定設為 TRUE。如需啟用設定的操作說明,請參閱「管理設定」。
設定範例
下列範例說明如何設定及移除 enable_fine_grained_dataset_acls_option 設定。
設定機構設定
如要設定機構設定,請使用 ALTER ORGANIZATION SET OPTIONS DDL 陳述式。以下範例是在機構層級將 enable_fine_grained_dataset_acls_option 設為 TRUE:
ALTER ORGANIZATION SET OPTIONS ( `region-REGION.enable_fine_grained_dataset_acls_option` = TRUE);
將 REGION 替換為與貴機構相關聯的區域,例如 us 或 europe-west6。
以下範例會清除機構層級的 enable_fine_grained_dataset_acls_option 設定:
ALTER ORGANIZATION SET OPTIONS ( `region-REGION.enable_fine_grained_dataset_acls_option` = FALSE);
配置專案設定
如要設定專案設定,請使用 ALTER PROJECT SET OPTIONS DDL 陳述式。ALTER PROJECT SET OPTIONS DDL 陳述式會視需要接受 project_id 變數。如未指定 project_id,系統會預設為查詢執行的目前專案。
以下範例將 enable_fine_grained_dataset_acls_option 設為 TRUE。
ALTER PROJECT PROJECT_ID SET OPTIONS ( `region-REGION.enable_fine_grained_dataset_acls_option` = TRUE);
將 PROJECT_ID 替換為您的專案 ID。
以下範例會清除專案層級的 enable_fine_grained_dataset_acls_option 設定:
ALTER PROJECT PROJECT_ID SET OPTIONS ( `region-REGION.enable_fine_grained_dataset_acls_option` = FALSE);
自訂角色異動
這項必要權限異動會影響現有的自訂角色,如果這些角色授予 bigquery.datasets.get、bigquery.datasets.create 或 bigquery.datasets.update 權限,但未授予 bigquery.datasets.getIamPolicy 或 bigquery.datasets.setIamPolicy 權限,就會受到影響。
如果自訂角色只包含 bigquery.datasets.get、bigquery.datasets.update 或 bigquery.datasets.create 權限,請務必在 2026 年 3 月 17 日前更新,加入 bigquery.datasets.getIamPolicy 或 bigquery.datasets.setIamPolicy 權限,才能維持自訂角色的現有功能。如果自訂角色只需要查看或更新資料集的中繼資料,請使用新的 dataset_view 和 update_mode 參數。
BigQuery 預先定義的角色不會受到這項異動影響。凡是授予 bigquery.datasets.get 權限的預先定義角色,也會授予 bigquery.datasets.getIamPolicy 權限。所有授予「bigquery.datasets.update」權限的預先定義角色,也會授予「bigquery.datasets.setIamPolicy」權限。
bq 指令列工具指令異動
選擇提早強制執行後,下列 bq 工具指令會受到影響。
bq show
您可以搭配 bq show 指令使用下列旗標:
--dataset_view={METADATA|ACL|FULL}- 指定查看資料集存取權控管或中繼資料時,如何套用權限。請使用下列其中一個值:
METADATA:僅查看資料集的中繼資料。這個值需要bigquery.datasets.get權限。ACL:只能查看資料集的存取控制權。這個值需要bigquery.datasets.getIamPolicy權限。FULL:查看資料集的中繼資料和存取權控管。這個值需要bigquery.datasets.get權限和bigquery.datasets.getIamPolicy權限。
bq update
您可以搭配 bq update 指令使用下列旗標:
--update_mode={UPDATE_METADATA|UPDATE_ACL|UPDATE_FULL}- 指定更新資料集存取權控管或中繼資料時,如何套用權限。請使用下列其中一個值:
UPDATE_METADATA:僅更新資料集的中繼資料。這個值需要bigquery.datasets.update權限。UPDATE_ACL:僅更新資料集的存取權控管設定。這個值需要bigquery.datasets.setIamPolicy權限。UPDATE_FULL:更新資料集的中繼資料和存取權控管。 這個值需要bigquery.datasets.update權限和bigquery.datasets.setIamPolicy權限。
資料控制語言 (DCL) 陳述式異動
選擇提早強制執行時,如要使用資料控制語言 (DCL) 在資料集上執行 GRANT 和 REVOKE 陳述式,必須具備下列權限:
bigquery.datasets.setIamPolicy
INFORMATION_SCHEMA 檢視查詢異動
選擇提前強制執行後,查詢 bigquery.datasets.getIamPolicy
INFORMATION_SCHEMA.OBJECT_PRIVILEGES
檢視畫面時,必須具備權限。
API 方法異動
選擇提前強制執行後,下列 REST v2 API 資料集方法會受到影響。
datasets.get 方法
datasets.get 方法具有名為 dataset_view 的額外 path 參數。
這個參數可讓您進一步控管 datasets.get 方法傳回的資訊。dataset_view 參數可讓您指定只傳回中繼資料、只傳回存取權控管設定,或兩者都傳回,不必一律傳回存取權控管設定和中繼資料。
資料集資源中的 access 欄位包含資料集的存取權控管。其他欄位 (例如 friendlyName、description 和 labels) 代表資料集的中繼資料。
下表列出 dataset_view 參數支援的不同值,以及對應的必要權限和 API 回應:
| 參數值 | 必要權限 | API 回應 |
|---|---|---|
DATASET_VIEW_UNSPECIFIED (或空白) |
|
預設值。傳回資料集的中繼資料和存取權控管設定。 |
METADATA |
|
傳回資料集中繼資料。 |
ACL |
|
傳回資料集的存取控制項、必要欄位,以及資料集資源中僅供輸出的欄位。 |
FULL |
|
傳回資料集的中繼資料和存取權控管設定。 |
如果您未選擇提前強制執行,或是在選擇後又取消,則可搭配 METADATA 或 ACL 值使用 dataset_view 參數。FULL 和 DATASET_VIEW_UNSPECIFIED (或空白) 值預設為先前的行為;bigquery.datasets.get 權限可讓您取得中繼資料和存取權控管。
範例
以下範例會傳送 GET 要求,並將 dataset_view 參數設為 METADATA:
GET https://bigquery.googleapis.com/bigquery/v2/projects/YOUR_PROJECT/datasets/YOUR_DATASET?datasetView=METADATA&key=YOUR_API_KEY HTTP/1.1更改下列內容:
- YOUR_PROJECT:專案名稱
- YOUR_DATASET:資料集名稱
- YOUR_API_KEY:您的 API 金鑰
datasets.update 方法
datasets.update 方法具有名為 update_mode 的額外 path 參數。
這個參數可讓您進一步控管 datasets.update 方法更新的欄位。update_mode 參數可讓您指定只更新中繼資料、只更新存取權控管,或兩者都更新,不必一律允許更新存取權控管和中繼資料。
資料集資源中的 access 欄位包含資料集的存取權控管。其他欄位 (例如 friendlyName、description 和 labels) 代表資料集的中繼資料。
下表列出 update_mode 參數支援的不同值,以及對應的必要權限和 API 回應:
| 參數值 | 必要權限 | API 回應 |
|---|---|---|
UPDATE_MODE_UNSPECIFIED (或空白) |
|
預設值。傳回資料集的更新中繼資料和存取權控管設定。 |
UPDATE_METADATA |
|
傳回資料集的更新中繼資料。 |
UPDATE_ACL |
|
傳回資料集的更新存取控制項、必填欄位,以及資料集資源中僅供輸出的欄位。 |
UPDATE_FULL |
|
傳回資料集的更新中繼資料和存取權控管設定。 |
如果您未選擇提前強制執行,或選擇提前強制執行後又取消,BigQuery 會恢復先前的預設行為,也就是 bigquery.datasets.update 權限可讓您更新中繼資料和存取權控管。
範例
下列範例會傳送 PUT 要求,並將 update_mode 參數設為 METADATA:
PUT https://bigquery.googleapis.com/bigquery/v2/projects/YOUR_PROJECT/datasets/YOUR_DATASET?updateMode=METADATA&key=YOUR_API_KEY HTTP/1.1更改下列內容:
- YOUR_PROJECT:專案名稱
- YOUR_DATASET:資料集名稱
- YOUR_API_KEY:您的 API 金鑰名稱
datasets.patch 方法
datasets.patch 方法具有名為 update_mode 的額外 path 參數。
這個參數可讓您進一步控管 datasets.patch 方法更新的欄位。update_mode 參數可讓您指定只更新中繼資料、只更新存取權控管,或兩者都更新,不必一律允許更新存取權控管和中繼資料。
資料集資源中的 access 欄位包含資料集的存取權控管。其他欄位 (例如 friendlyName、description 和 labels) 代表資料集的中繼資料。
下表列出 update_mode 參數支援的不同值,以及對應的必要權限和 API 回應:
| 參數值 | 必要權限 | API 回應 |
|---|---|---|
UPDATE_MODE_UNSPECIFIED (或空白) |
|
預設值。傳回資料集的更新中繼資料和存取權控管設定。 |
UPDATE_METADATA |
|
傳回資料集的更新中繼資料。 |
UPDATE_ACL |
|
傳回資料集的更新存取控制項、必填欄位,以及資料集資源中僅供輸出的欄位。 |
UPDATE_FULL |
|
傳回資料集的更新中繼資料和存取權控管設定。 |
如果您未選擇提前強制執行,或選擇提前強制執行後又取消,BigQuery 會恢復先前的預設行為,也就是 bigquery.datasets.update 權限可讓您更新中繼資料和存取權控管。
範例
下列範例會傳送 PUT 要求,並將 update_mode 參數設為 METADATA:
PUT https://bigquery.googleapis.com/bigquery/v2/projects/YOUR_PROJECT/datasets/YOUR_DATASET?updateMode=METADATA&key=YOUR_API_KEY HTTP/1.1更改下列內容:
- YOUR_PROJECT:專案名稱
- YOUR_DATASET:資料集名稱
- YOUR_API_KEY:您的 API 金鑰名稱
datasets.insert 方法
如果您選擇提早強制執行,並使用 datasets.insert 方法建立具有存取權控管機制的資料集,BigQuery 會驗證使用者是否已獲得 bigquery.datasets.create 和 bigquery.datasets.setIamPolicy 權限。
如果您使用 API 建立沒有存取權控管的資料集,則只需要 bigquery.datasets.create 權限。