データセット レベルのアクセス制御の変更

2025 年 9 月 15 日以降、データセットのアクセス制御を表示して INFORMATION_SCHEMA.OBJECT_PRIVILEGES ビューをクエリするには、bigquery.datasets.getIamPolicy Identity and Access Management(IAM)権限が必要です。データセットのアクセス制御を更新したり、API を使用してアクセス制御でデータセットを作成したりするには、bigquery.datasets.setIamPolicy 権限が必要です。

早期適用を有効にする

2025 年 9 月 15 日より前に、権限変更の早期適用を有効にできます。有効にすると、データセットのアクセス制御を取得するには bigquery.datasets.getIamPolicy 権限が必要であり、データセットのアクセス制御を更新する、またはアクセス制御付きでデータセットを API で作成するには bigquery.datasets.setIamPolicy 権限が必要です。

早期適用を有効にするには、組織レベルまたはプロジェクト レベルで enable_fine_grained_dataset_acls_option 構成設定を TRUE に設定します。構成設定を有効にする手順については、構成設定を管理するをご覧ください。

構成設定の例

次の例は、enable_fine_grained_dataset_acls_option の構成設定を設定および削除する方法を示したものです。

組織の設定を構成する

組織設定を構成するには、ALTER ORGANIZATION SET OPTIONS DDL ステートメントを使用します。次の例では、組織レベルで enable_fine_grained_dataset_acls_optionTRUE に設定しています。

ALTER ORGANIZATION
SET OPTIONS (
  `region-REGION.enable_fine_grained_dataset_acls_option` = TRUE);

REGION は、組織に関連付けられているリージョンuseurope-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_optionTRUE に設定されます。

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.getbigquery.datasets.createbigquery.datasets.update のいずれかの権限は持っているが、bigquery.datasets.getIamPolicybigquery.datasets.setIamPolicy の権限を持っていないもの)に影響が生じます。

bigquery.datasets.getbigquery.datasets.updatebigquery.datasets.create の権限のみを持つカスタムロールをこれまでどおり機能させたい場合は、2025 年 9 月 15 日までに 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)を使ってデータセットに対して GRANTREVOKE のステートメントを実行するために、以下の権限が必要になります。

  • bigquery.datasets.setIamPolicy

INFORMATION_SCHEMA ビュークエリに対する変更

早期適用を有効にすると、INFORMATION_SCHEMA.OBJECT_PRIVILEGES ビューにクエリを実行するには bigquery.datasets.getIamPolicy 権限が必要になります。

API メソッドに対する変更

早期適用を有効にすると、次の REST v2 API データセット メソッドが影響を受けます。

datasets.get メソッド

datasets.get メソッドには、dataset_view という名前のパスパラメータが追加されています。

このパラメータを使用すると、datasets.get メソッドから返される情報をより詳細に制御できます。dataset_view パラメータを使用すると、アクセス制御とメタデータの両方を常に返すのではなく、メタデータのみ、アクセス制御のみ、または両方を返すかどうかを指定できます。

データセット リソースaccess フィールドには、データセットのアクセス制御が含まれています。friendlyNamedescriptionlabels などの他のフィールドは、データセットのメタデータを表します。

次の表は、dataset_view パラメータでサポートされているさまざまな値に必要な権限と API レスポンスをまとめたものです。

パラメータ値 必要な権限 API レスポンス
DATASET_VIEW_UNSPECIFIED(または空)
  • bigquery.datasets.get
  • bigquery.datasets.getIamPolicy
デフォルト値。データセットのメタデータとアクセス制御を返します。
METADATA
  • bigquery.datasets.get
データセットのメタデータを返します。
ACL
  • bigquery.datasets.getIamPolicy
データセットのアクセス制御、必須フィールド、出力専用のデータセット リソースのフィールドを返します。
FULL
  • bigquery.datasets.get
  • bigquery.datasets.getIamPolicy
データセットのメタデータとアクセス制御を返します。

早期適用を有効にしていない場合、または有効にした後に無効にした場合は、dataset_view パラメータに METADATA または ACL の値を指定して利用できます。FULLDATASET_VIEW_UNSPECIFIED(または空)の値はデフォルトで以前の動作になります。bigquery.datasets.get 権限を使用すると、メタデータとアクセス制御の両方を取得できます。

次の例では、dataset_view パラメータが METADATA に設定された GET リクエストを送信します。

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 という名前のパスパラメータが追加されています。

このパラメータを使用すると、datasets.update メソッドで更新されるフィールドをより詳細に制御できます。update_mode パラメータを使用すると、アクセス制御とメタデータの両方の更新を常に許可するのではなく、メタデータのみ、アクセス制御のみ、または両方を更新するかどうかを指定できます。

データセット リソースaccess フィールドには、データセットのアクセス制御が含まれています。friendlyNamedescriptionlabels などの他のフィールドは、データセットのメタデータを表します。

次の表は、update_mode パラメータでサポートされているさまざまな値に必要な権限と API レスポンスをまとめたものです。

パラメータ値 必要な権限 API レスポンス
UPDATE_MODE_UNSPECIFIED(または空)
  • bigquery.datasets.update
  • bigquery.datasets.setIamPolicy
デフォルト値。データセットの更新されたメタデータとアクセス制御を返します。
UPDATE_METADATA
  • bigquery.datasets.update
データセットの更新されたメタデータを返します。
UPDATE_ACL
  • bigquery.datasets.update
  • bigquery.datasets.setIamPolicy
データセットの更新されたアクセス制御、必須フィールド、出力専用のデータセット リソース内のフィールドを返します。
UPDATE_FULL
  • bigquery.datasets.update
  • bigquery.datasets.setIamPolicy
データセットの更新されたメタデータとアクセス制御を返します。

早期適用を有効にしない場合、または有効にした後に無効にした場合、BigQuery は以前の動作に戻ります。つまり、bigquery.datasets.update 権限だけで、メタデータとアクセス制御の両方を更新できます。

次の例では、update_mode パラメータが METADATA に設定された PUT リクエストを送信します。

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 という名前のパスパラメータが追加されています。

このパラメータを使用すると、datasets.patch メソッドで更新されるフィールドをより詳細に制御できます。update_mode パラメータを使用すると、アクセス制御とメタデータの両方の更新を常に許可するのではなく、メタデータのみ、アクセス制御のみ、または両方を更新するかどうかを指定できます。

データセット リソースaccess フィールドには、データセットのアクセス制御が含まれています。friendlyNamedescriptionlabels などの他のフィールドは、データセットのメタデータを表します。

次の表は、update_mode パラメータでサポートされているさまざまな値に必要な権限と API レスポンスをまとめたものです。

パラメータ値 必要な権限 API レスポンス
UPDATE_MODE_UNSPECIFIED(または空)
  • bigquery.datasets.update
  • bigquery.datasets.setIamPolicy
デフォルト値。データセットの更新されたメタデータとアクセス制御を返します。
UPDATE_METADATA
  • bigquery.datasets.update
データセットの更新されたメタデータを返します。
UPDATE_ACL
  • bigquery.datasets.setIamPolicy
データセットの更新されたアクセス制御、必須フィールド、出力専用のデータセット リソース内のフィールドを返します。
UPDATE_FULL
  • bigquery.datasets.update
  • bigquery.datasets.setIamPolicy
データセットの更新されたメタデータとアクセス制御を返します。

早期適用を有効にしない場合、または有効にした後に無効にした場合、BigQuery は以前の動作に戻ります。つまり、bigquery.datasets.update 権限だけで、メタデータとアクセス制御の両方を更新できます。

次の例では、update_mode パラメータが METADATA に設定された PUT リクエストを送信します。

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 権限のみが必要です。