이 페이지에서는 세분화된 액세스 제어가 GoogleSQL 언어 데이터베이스 및 PostgreSQL 언어 데이터베이스의 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
를 부여하면 부여받는 사람은 향후에 추가되는 모든 테이블의 데이터 변경사항을 볼 수 있습니다.