列レベルのアクセス制御からの書き込みへの影響

このページでは、BigQuery の列レベルのアクセス制御を使用して、列レベルでデータへのアクセスを制限する場合の書き込みへの影響について説明します。列レベルのアクセス制御に関する一般的な情報については、BigQuery の列レベルのアクセス制御の概要をご覧ください。

列レベルのアクセス制御を使用すると、ユーザーはポリシータグで保護されている列に対して読み取り権限が必要になります。一部の書き込みオペレーションでは、実際に列に書き込む前に列データを読み取る必要があります。このようなオペレーションでは、BigQuery はユーザーの読み取り権限をチェックして、ユーザーがその列へのアクセス権を持っていることを確認します。たとえば、保護されている列への書き込みを含むデータの更新をユーザーが行う場合、ユーザーには保護されている列の読み取り権限が必要です。保護されている列への書き込みを含む新しいデータ行の挿入を行う場合は、保護されている列の読み取りアクセス権は必要ありません。ただし、そのような行を書き込むユーザーは、保護されている列に対する読み取り権限がない限り、新しく書き込まれたデータを読み取ることはできません。

以降のセクションでは、さまざまなタイプの書き込みオペレーションについて詳しく説明します。このトピックの例では、次のスキーマを持つ customers テーブルを使用します。

フィールド名 モード ポリシータグ
user_id STRING REQUIRED policy-tag-1
credit_score INTEGER NULLABLE policy-tag-2
ssn STRING NULLABLE policy-tag-3

BigQuery データ操作言語(DML)の使用

データの挿入

INSERT ステートメントの場合、スキャンする列または更新する列のポリシータグに対するきめ細かい読み取り権限が BigQuery によって確認されることはありません。これは、INSERT が列データを読み取る必要がないためです。ただし、読み取り権限のない列に値を挿入しても、挿入された値は設定どおりに保護されます。

データの削除、更新、結合

DELETEUPDATEMERGE ステートメントの場合、BigQuery はスキャンする列に対するきめ細かい読み取り権限を確認します。WHERE、またはデータの読み取りにクエリを必要とする他の句やサブクエリを含めない限り、これらのステートメントで列はスキャンされません。

データの読み込み

Cloud Storage やローカル ファイルなどからテーブルにデータを読み込むとき、BigQuery は宛先テーブルの列のきめ細かい読み取り権限を確認しません。これは、データの読み込みでは宛先テーブルからのコンテンツの読み取りは不要なためです。

BigQuery へのストリーミングは、LOADINSERT に似ています。BigQuery を使用すると、きめ細かい読み取り権限がなくても、宛先テーブルにデータをストリーミングできます。

データのコピー

コピー オペレーションを行う場合、BigQuery はユーザーがソーステーブルに対してきめ細かい読み取り権限を持っているかどうかを確認します。BigQuery は、宛先テーブル内の列に対するきめ細かい読み取り権限を持つかどうかは確認しません。LOADINSERT、ストリーミングと同様に、宛先テーブル内の列に対するきめ細かい読み取り権限がない限り、コピーが完了すると、書き込まれたデータを読み取ることができなくなります。

DML の例

INSERT

例:

INSERT INTO customers VALUES('alice', 85, '123-456-7890');
ソース列 列の更新
ポリシータグのきめ細かい読み取り権限の確認 N/A なし
チェックの対象となる列 N/A user_id
credit_score
ssn

UPDATE

例:

UPDATE customers SET credit_score = 0
  WHERE user_id LIKE 'alice%' AND credit_score < 30
ソース列 列の更新
ポリシータグのきめ細かい読み取り権限の確認 あり なし
チェックの対象となる列 user_id
credit_score
credit_score

DELETE

例:

DELETE customers WHERE credit_score = 0
ソース列 列の更新
ポリシータグのきめ細かい読み取り権限の確認 あり なし
チェックの対象となる列 credit_score user_id
credit_score
ssn

読み込みの例

ローカル ファイルまたは Cloud Storage からの読み込み

例:

load --source_format=CSV samples.customers \
  ./customers_data.csv \
  ./customers_schema.json
ソース列 列の更新
ポリシータグのきめ細かい読み取り権限の確認 N/A なし
チェックの対象となる列 N/A user_id
credit_score
ssn

ストリーミング

以前の insertAll ストリーミング API または Storage Write API でストリーミングする場合、ポリシータグはチェックされません。BigQuery の変更データ キャプチャの場合、主キー列でポリシータグがチェックされます。

コピーの例

既存のテーブルへのデータの追加

例:

cp -a samples.customers samples.customers_dest
ソース列 列の更新
ポリシータグのきめ細かい読み取り権限の確認 あり なし
チェックの対象となる列 customers.user_id
customers.credit_score
customers.ssn
customers_dest.user_id
customers_dest.credit_score
customers_dest.ssn

宛先テーブルへのクエリ結果の保存

例:

query --use_legacy_sql=false \
--max_rows=0 \
--destination_table samples.customers_dest \
--append_table "SELECT * FROM samples.customers LIMIT 10;"
ソース列 列の更新
ポリシータグのきめ細かい読み取り権限の確認 あり なし
チェックの対象となる列 customers.user_id
customers.credit_score
customers.ssn
customers_dest.user_id
customers_dest.credit_score
customers_dest.ssn