이 페이지에서는 세분화된 액세스 제어가 Spanner 변경 내역에서 작동하는 방식을 설명합니다.
세분화된 액세스 제어 사용자는 다음을 부여하여 변경 내역 데이터에 대한 읽기 액세스를 허용할 수 있습니다. 두 부여 모두 필요합니다.
변경 내역에
SELECT
를 부여합니다.GoogleSQL
GRANT SELECT ON CHANGE STREAM CHANGE_STREAM_NAME TO ROLE ROLE_NAME;
PostgreSQL
GRANT SELECT ON CHANGE STREAM CHANGE_STREAM_NAME TO ROLE_NAME;
변경 내역에 자동으로 생성된 읽기 함수에 대한
EXECUTE
를 부여합니다. 읽기 함수를 사용하여 변경 내역 레코드를 읽습니다.GoogleSQL
GRANT EXECUTE ON TABLE FUNCTION READ_FUNCTION_NAME TO ROLE ROLE_NAME;
PostgreSQL
GRANT EXECUTE ON FUNCTION READ_FUNCTION_NAME TO ROLE_NAME;
변경 내역 읽기 함수의 이름 지정 규칙과 반환하는 정보 형식 지정에 대한 자세한 내용은 다음 주제를 참조하세요.
변경 내역에 대한 INFORMATION_SCHEMA
뷰
다음 뷰에는 변경 내역의 데이터베이스 역할과 권한 정보가 표시됩니다.
- GoogleSQL 언어 데이터베이스:
INFORMATION_SCHEMA.CHANGE_STREAM_PRIVILEGES
- PostgreSQL 언어 데이터베이스:
information_schema.change_stream_privileges
이러한 뷰의 행은 변경 내역에 대한 현재 데이터베이스 역할의 권한을 기준으로 필터링됩니다. 이렇게 하면 주 구성원이 액세스 권한이 있는 역할, 권한, 변경 내역만 볼 수 있습니다.
행 필터링은 다음과 같은 변경 내역 관련 뷰에도 적용됩니다.
GoogleSQL
INFORMATION_SCHEMA.CHANGE_STREAMS
INFORMATION_SCHEMA.CHANGE_STREAM_TABLES
INFORMATION_SCHEMA.CHANGE_STREAM_COLUMNS
INFORMATION_SCHEMA.CHANGE_STREAM_OPTIONS
시스템 역할 spanner_info_reader
및 해당 구성원은 항상 필터링되지 않은 INFORMATION_SCHEMA
를 확인합니다.
PostgreSQL
information_schema.change_streams
information_schema.change_stream_tables
information_schema.change_stream_columns
information_schema.change_stream_options
시스템 역할 spanner_info_reader
및 해당 구성원은 필터링되지 않은 information_schema
를 확인합니다.
행 필터링은 변경 내역 읽기 함수에 대한 다음 메타데이터 뷰에도 적용됩니다.
GoogleSQL
PostgreSQL
주의사항
변경 내역은 메타데이터 데이터베이스를 사용하여 내부 상태를 유지합니다. 메타데이터 데이터베이스는 애플리케이션 데이터베이스와 동일하거나 다를 수 있습니다. 다른 데이터베이스를 사용하는 것이 좋습니다. 그러나 세분화된 액세스 제어 사용자의 경우 메타데이터 데이터베이스가 애플리케이션 데이터베이스와 같을 수 없습니다. Dataflow 작업을 실행하는 IAM 주 구성원에게는 메타데이터 데이터베이스의 데이터베이스 수준에서 읽기/쓰기 액세스 권한이 필요하기 때문입니다. 이로 인해 애플리케이션 데이터베이스에 구성된 세분화된 액세스 제어 권한이 재정의됩니다.
자세한 내용은 별도의 메타데이터 데이터베이스 고려를 참조하세요.
변경 내역에는 추적되는 테이블 및 열의 데이터 사본이 별도로 포함되어 있으므로 사용자에게 변경 내역에 대한 액세스 권한을 부여할 때는 주의해야 합니다. 변경 내역의 리더는 테이블 및 열에 대한
SELECT
권한이 없는 경우에도 추적된 테이블과 열의 데이터 변경사항을 볼 수 있습니다. 변경 내역과 추적된 테이블 및 열에 별도의 제어를 설정하는 것이 더 유연할 수 있지만 그에 따라 잠재적 위험이 있으므로 데이터베이스 역할 및 권한을 구조화해야 합니다. 예를 들어 역할에서 테이블에 대한SELECT
권한을 취소할 때 변경 내역에서SELECT
를 취소하고 관련 읽기 함수에서EXECUTE
을 취소할지 여부를 고려합니다.모든 테이블을 추적하는 변경 내역에
SELECT
를 부여하면 부여받는 사람은 향후에 추가되는 모든 테이블의 데이터 변경사항을 볼 수 있습니다.