열 수준 액세스 제어가 쓰기에 미치는 영향
이 페이지에서는 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 |