열 수준 액세스 제어가 쓰기에 미치는 영향

이 페이지에서는 BigQuery 열 수준 액세스 제어를 사용하여 열 수준에서 데이터 액세스를 제한할 때 쓰기에 미치는 영향을 설명합니다. 열 수준 액세스 제어에 대한 일반적인 내용은 BigQuery 열 수준 액세스 제어 소개를 참조하세요.

열 수준 액세스 제어를 사용하려면 정책 태그로 보호되는 열에 대한 읽기 권한이 있어야 합니다. 일부 쓰기 작업은 실제로 열에 쓰기 전에 열 데이터를 읽어야 합니다. 이러한 작업의 경우 BigQuery는 사용자의 읽기 권한을 확인하여 사용자가 열에 액세스할 수 있는지 확인합니다. 예를 들어 사용자가 보호된 열에 대한 쓰기 수행을 포함하는 데이터 업데이트를 하는 경우 사용자는 보호된 열에 대한 읽기 권한이 있어야 합니다. 사용자가 보호된 열에 대한 쓰기 수행을 포함하는 새 데이터 행을 삽입할 경우 사용자는 보호된 열에 대한 읽기 액세스 권한이 필요하지 않습니다. 하지만 이러한 행을 쓰는 사용자는 보호된 열에 대한 읽기 권한이 없으면 새로 작성된 데이터를 읽을 수 없습니다.

다음 섹션에서는 여러 유형의 쓰기 작업에 대한 세부정보를 제공합니다. 이 주제의 예시에서는 다음 스키마가 있는 customers 테이블을 사용합니다.

필드 이름 유형 모드 정책 태그
user_id 문자열 필수 항목 policy-tag-1
credit_score 정수 null 허용 policy-tag-2
ssn 문자열 null 허용 policy-tag-3

BigQuery DML 사용

데이터 삽입

INSERT 문의 경우 BigQuery는 스캔된 열 또는 업데이트된 열의 정책 태그에 대한 세분화된 권한의 리더 권한을 확인하지 않습니다. 이는 INSERT가 열 데이터를 읽을 필요가 없기 때문입니다. 하지만 읽기 권한이 없는 열에 값을 성공적으로 삽입해도 값은 정상적으로 보호됩니다.

데이터 삭제, 업데이트, 병합

DELETE, UPDATE, MERGE 문의 경우 BigQuery는 스캔된 열에서 세분화된 권한의 리더 권한을 확인합니다. WHERE 또는 쿼리가 데이터를 읽어야 하는 다른 절 또는 하위 쿼리를 포함하지 않는 한 이러한 문에서 열이 스캔되지 않습니다.

데이터 로드

Cloud Storage 또는 로컬 파일에서 데이터를 테이블로 로드하는 경우 BigQuery는 대상 테이블 열의 세분화된 권한의 리더 권한을 확인하지 않습니다. 이는 데이터를 로드할 때 대상 테이블의 콘텐츠를 읽을 필요가 없기 때문입니다.

BigQuery로 스트리밍하는 것은 LOAD, INSERT와 비슷합니다. 세분화된 권한의 리더 권한이 없더라도 BigQuery에서는 데이터를 대상 테이블 열로 스트리밍할 수 있습니다.

데이터 복사

복사 작업의 경우 BigQuery는 사용자에게 소스 테이블에 대한 세분화된 권한의 리더 권한이 있는지 확인합니다. BigQuery는 사용자에게 대상 테이블의 열에 대한 세분화된 권한의 리더 권한이 있는지 확인하지 않습니다. LOAD, INSERT, 스트리밍과 마찬가지로 대상 테이블의 열에 대한 세분화된 권한의 리더 권한이 없으면 복사가 완료된 후에 방금 작성한 데이터를 읽을 수 없습니다.

DML 예시

INSERT

예시:

INSERT INTO customers VALUES('alice', 85, '123-456-7890');
소스 열 업데이트 열
세분화된 권한의 리더가 정책 태그를 검사했나요? 해당 사항 없음 아니요
검사된 열 해당 사항 없음 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
소스 열 업데이트 열
세분화된 권한의 리더가 정책 태그를 검사했나요? 해당 사항 없음 아니요
검사된 열 해당 사항 없음 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