다른 BigQuery 기능과 함께 행 수준 보안 사용
이 문서에서는 다른 BigQuery 기능과 함께 행 수준 액세스 보안을 사용하는 방법을 설명합니다.
이 문서를 읽기 전에 BigQuery 행 수준 보안 소개 및 행 수준 보안 작업을 읽어 행 수준 보안을 숙지합니다.
TRUE
필터
행 수준 액세스 정책은 쿼리를 실행할 때 사용자에게 표시되는 결과 데이터를 필터링할 수 있습니다. DML과 같은 비쿼리 작업을 실행하려면 테이블의 모든 행에 대한 전체 액세스 권한이 필요합니다. 필터 표현식이 TRUE
로 설정된 행 액세스 정책을 통해 전체 액세스 권한이 부여됩니다. 이 행 수준 액세스 정책을 TRUE
필터라고 합니다.
모든 사용자는 서비스 계정을 포함하여 TRUE
필터 액세스 권한을 부여받을 수 있습니다.
비쿼리 작업 예시는 다음과 같습니다.
- 기타 BigQuery API(예: BigQuery Storage Read API )
bq head
명령어와 같은 일부bq
명령줄 도구 명령어- 테이블 복사
TRUE
필터 예시
CREATE ROW ACCESS POLICY all_access ON project.dataset.table1
GRANT TO ("group:all-rows-access@example.com")
FILTER USING (TRUE);
TRUE
필터와 함께 작동하는 기능
다음 섹션에서는 다양한 BigQuery 기능과 함께 TRUE
필터를 사용하는 방법을 설명합니다.
복사 작업
행 수준 액세스 정책이 하나 이상 있는 테이블을 복사하려면 먼저 소스 테이블에 TRUE
필터 액세스 권한을 부여해야 합니다. 소스 테이블의 모든 행 수준 액세스 정책도 새 대상 테이블에 복사됩니다. 행 수준 액세스 정책이 없는 소스 테이블을 행 수준 액세스 정책이 있는 대상 테이블에 복사하면 --append_table
플래그를 사용하거나 "writeDisposition": "WRITE_APPEND"
가 설정되어 있지 않는 한, 행 수준 액세스 정책이 대상 테이블에서 삭제됩니다.
리전 간 복사가 허용되며 모든 정책이 복사됩니다. 쿼리에서 하위 쿼리 정책에 잘못된 테이블 참조가 포함된 경우 복사가 완료된 후 후속 쿼리가 손상될 수 있습니다.
테이블의 행 수준 액세스 정책에는 고유한 이름이 있어야 합니다. 복사 중에 행 수준 액세스 정책 이름이 충돌하면 잘못된 입력 오류가 발생합니다.
행 수준 액세스 정책으로 테이블을 복사하기 위해 필요한 권한
행 수준 액세스 정책이 하나 이상 있는 테이블을 복사하려면 테이블 및 파티션을 복사하는 역할 외에도 다음 권한이 있어야 합니다.
권한 | 리소스 |
---|---|
bigquery.rowAccessPolicies.list
|
소스 테이블 |
bigquery.rowAccessPolicies.getIamPolicy
|
소스 테이블 |
TRUE 필터
|
소스 테이블 |
bigquery.rowAccessPolicies.create
|
대상 테이블 |
bigquery.rowAccessPolicies.setIamPolicy
|
대상 테이블 |
BigQuery API의 Tabledata.list
행 수준 액세스 정책이 있는 테이블에서 BigQuery API의 tabledata.list
메서드를 사용하려면 TRUE
필터 액세스 권한이 필요합니다.
DML
행 수준 액세스 정책이 있는 테이블을 업데이트하는 DML 문을 실행하려면 테이블에 대한 TRUE
필터 액세스 권한이 필요합니다.
특히 MERGE
문은 다음과 같이 행 수준 액세스 정책과 상호작용합니다.
- 대상 테이블에 행 수준 액세스 정책이 있으면 대상 테이블에 대한
TRUE
필터 액세스 권한이 필요합니다. - 소스 테이블에 행 수준 액세스 정책이 포함되면
MERGE
문이 사용자에게 표시되는 행에서만 작동합니다.
테이블 스냅샷
테이블 스냅샷은 행 수준 보안을 지원합니다. 행 수준 액세스 정책이 있는 테이블을 복사하는 데 필요한 권한에 설명된 것처럼 사용자는 기본 테이블(소스 테이블) 및 테이블 스냅샷(대상 테이블)에 대한 권한이 있어야 합니다.
JSON 열이 있는 BigQuery 테이블
행 수준 액세스 정책은 JSON 열에 적용할 수 없습니다. 행 수준 보안의 제한사항에 대해 자세히 알아보려면 제한사항을 참조하세요.
실행 그래프
행 수준 액세스 정책이 있는 작업에는 쿼리 실행 그래프를 사용할 수 없습니다.
추출 작업
테이블에 행 수준 액세스 정책이 포함된 경우 추출 작업을 실행할 때 볼 수 있는 데이터만 Cloud Storage로 내보냅니다.
파티션을 나눈 테이블 및 클러스터링된 테이블
행 수준 보안은 파티션을 나눈 테이블의 기능인 쿼리 프루닝에 참여하지 않습니다.
행 수준 보안은 파티션을 나눈 테이블과 클러스터형 테이블과 호환되지만 행 데이터를 필터링하는 행 수준 액세스 정책은 파티션 프루닝 중에 적용되지 않습니다. 파티션 열에서 작동하는 WHERE
절을 지정하여 행 수준 보안을 사용하는 테이블에는 파티션 프루닝을 사용할 수 있습니다. 마찬가지로, 행 수준 액세스 정책 자체가 클러스터링된 테이블에 대한 쿼리의 성능을 개선하지 않지만 사용자가 적용하는 다른 필터링을 방해하지는 않습니다.
쿼리 가지치기는 정책에 필터를 사용하여 행 수준 액세스 정책을 실행하는 동안 수행됩니다.
테이블 이름 바꾸기
행 액세스 정책이 하나 이상 있는 테이블의 이름을 바꾸는 데 TRUE
필터 액세스 권한이 필요하지 않습니다. DDL 문으로 테이블 이름을 바꿀 수 있습니다.
대신 또한 테이블을 복사하고 대상 테이블에 다른 이름을 지정할 수 있습니다. 소스 테이블에 행 수준 액세스 정책이 있는 경우 자세한 내용을 보려면 이 페이지의 테이블 복사 작업을 참조하세요.
스트리밍 업데이트
변경 데이터 캡처로 스트리밍 테이블 UPDATE
또는 DELETE
작업을 실행하려면 TRUE
필터 액세스 권한이 있어야 합니다.
시간 이동
테이블 관리자만 행 수준 액세스 정책이 있거나 이전에 있었던 테이블의 이전 데이터에 액세스할 수 있습니다. 다른 사용자가 행 수준 액세스 권한이 있거나 이전에 있었던 테이블에서 시간 이동 데코레이터를 사용하면 access
denied
오류가 발생합니다. 자세한 내용은 시간 이동 및 행 수준 액세스를 참조하세요.
뷰 및 구체화된 뷰
뷰 또는 구체화된 뷰에 표시되는 데이터는 기본 소스 테이블의 행 수준 액세스 정책에 따라 필터링됩니다.
또한 행 수준 액세스 정책이 있는 기본 테이블에서 구체화된 뷰가 파생되는 경우의 쿼리 성능은 소스 테이블을 직접 쿼리할 때와 동일합니다. 즉, 소스 테이블에 행 수준 보안이 있으면 소스 테이블을 쿼리할 때에 비해 구체화된 뷰를 쿼리할 때 일반적으로 나타나는 성능상의 이점이 없습니다.
행 수준 액세스 정책에서는 뷰 또는 구체화된 뷰를 참조할 수 없습니다.
와일드 카드 쿼리
행 수준 액세스 정책이 있는 테이블에 대한 와일드 카드 쿼리는 INVALID_INPUT
오류와 함께 실패합니다.
다음 단계
- 행 수준 액세스 정책에 대한 권장사항은 BigQuery의 행 수준 보안 권장사항을 참조하세요.