データセット レベルのアクセス制御の変更
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_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
の権限のみを持つカスタムロールをこれまでどおり機能させたい場合は、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)を使ってデータセットに対して GRANT
や REVOKE
のステートメントを実行するために、以下の権限が必要になります。
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
フィールドには、データセットのアクセス制御が含まれています。friendlyName
、description
、labels
などの他のフィールドは、データセットのメタデータを表します。
次の表は、dataset_view
パラメータでサポートされているさまざまな値に必要な権限と API レスポンスをまとめたものです。
パラメータ値 | 必要な権限 | API レスポンス |
---|---|---|
DATASET_VIEW_UNSPECIFIED (または空) |
|
デフォルト値。データセットのメタデータとアクセス制御を返します。 |
METADATA |
|
データセットのメタデータを返します。 |
ACL |
|
データセットのアクセス制御、必須フィールド、出力専用のデータセット リソースのフィールドを返します。 |
FULL |
|
データセットのメタデータとアクセス制御を返します。 |
早期適用を有効にしていない場合、または有効にした後に無効にした場合は、dataset_view
パラメータに METADATA
または ACL
の値を指定して利用できます。FULL
と DATASET_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
フィールドには、データセットのアクセス制御が含まれています。friendlyName
、description
、labels
などの他のフィールドは、データセットのメタデータを表します。
次の表は、update_mode
パラメータでサポートされているさまざまな値に必要な権限と API レスポンスをまとめたものです。
パラメータ値 | 必要な権限 | API レスポンス |
---|---|---|
UPDATE_MODE_UNSPECIFIED (または空) |
|
デフォルト値。データセットの更新されたメタデータとアクセス制御を返します。 |
UPDATE_METADATA |
|
データセットの更新されたメタデータを返します。 |
UPDATE_ACL |
|
データセットの更新されたアクセス制御、必須フィールド、出力専用のデータセット リソース内のフィールドを返します。 |
UPDATE_FULL |
|
データセットの更新されたメタデータとアクセス制御を返します。 |
早期適用を有効にしない場合、または有効にした後に無効にした場合、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
フィールドには、データセットのアクセス制御が含まれています。friendlyName
、description
、labels
などの他のフィールドは、データセットのメタデータを表します。
次の表は、update_mode
パラメータでサポートされているさまざまな値に必要な権限と API レスポンスをまとめたものです。
パラメータ値 | 必要な権限 | API レスポンス |
---|---|---|
UPDATE_MODE_UNSPECIFIED (または空) |
|
デフォルト値。データセットの更新されたメタデータとアクセス制御を返します。 |
UPDATE_METADATA |
|
データセットの更新されたメタデータを返します。 |
UPDATE_ACL |
|
データセットの更新されたアクセス制御、必須フィールド、出力専用のデータセット リソース内のフィールドを返します。 |
UPDATE_FULL |
|
データセットの更新されたメタデータとアクセス制御を返します。 |
早期適用を有効にしない場合、または有効にした後に無効にした場合、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
権限のみが必要です。