비보안 뷰의 데이터 공유하기

비보안 뷰의 데이터 공유하기

공유하는 뷰에서 쿼리 최적화의 성능 향상을 최대한 활용하려면, 비보안(non-secure) 뷰를 다른 계정과 공유하도록 허용하는 셰어를 만들 수 있어요.

출처: Snowflake User Guide - Share data in non-secured views

본문

참고: 가능하면 보안 뷰(secure view)를 사용해 데이터의 보안을 강화해요. 자세한 내용은 보안 객체로 데이터 접근 제어하기를 참고해요.

비보안 객체를 허용하는 셰어 만들기

비보안 뷰를 공유하려면 비보안 객체를 허용하는 셰어를 만들어요. 예:

CREATE OR REPLACE SHARE allow_non_secure_views
  SECURE_OBJECTS_ONLY = FALSE
  COMMENT = "Share views that require query optimization";

참고: 전체 문법은 이 주제의 비보안 뷰 공유 문법을 참고해요.

뷰 공유를 허용하는 셰어를 만든 뒤 GRANT <privilege> … TO SHARE 명령으로 뷰를 셰어에 부여해요. 예를 들어 non_secure_view라는 뷰를 셰어에 부여하려면:

GRANT SELECT ON VIEW non_secure_view TO SHARE allow_non_secure_views;

또는 뷰에 대한 SELECT 권한을 데이터베이스 역할에 부여한 뒤 그 역할을 셰어에 부여할 수도 있어요. 예를 들어 non_secure_view 뷰에 대한 SELECT 권한을 데이터베이스 역할 performance_engineer에 부여한 뒤 그 역할을 셰어에 부여하려면:

GRANT SELECT ON VIEW non_secure_view TO DATABASE ROLE performance_engineer;
GRANT DATABASE ROLE performance_engineer TO SHARE allow_non_secure_views;

기존 셰어를 비보안 뷰 공유를 허용하도록 변환하기

보안 뷰가 있는 기존 셰어를 비보안 뷰 공유를 지원하는 셰어로 변환할 수 있어요. 예를 들어 기존 셰어 secure_views_only를 비보안 뷰 공유를 지원하는 셰어로 변환하려면:

  1. SHOW GRANTS 명령으로 어느 객체가 셰어에 부여됐고(TO), 어느 계정이 셰어에 접근하는지(OF) 각각 확인해요.
    SHOW GRANTS TO SHARE secure_views_only;
    SHOW GRANTS OF SHARE secure_views_only;
    
  2. 기존 셰어를 뷰 공유를 허용하는 셰어로 변환해요.
    ALTER SHARE secure_views_only
      SET SECURE_OBJECTS_ONLY = FALSE,
      COMMENT = "Convert to allow sharing non-secure views that require query optimization";
    
  3. 선택적으로 기존 보안 뷰를 뷰로 변환해요. 이 예시에서는 secure_view2를 비보안 뷰로 바꿔요.
    ALTER VIEW secure_view2 UNSET SECURE;
    

셰어 안의 보안 뷰를 비보안 뷰로 변환하기

기존 보안 뷰를 뷰로 변환하고 싶다면 뷰를 셰어에 부여하기 전후 언제든 할 수 있어요. 셰어 안의 기존 보안 뷰를 뷰로 변환하려면 다음이 성립해야 해요.

  • 보안 뷰는 비보안 객체 공유를 허용하도록 구성된 셰어에만 부여되어야 해요.
  • 보안 뷰는 다음에 부여될 수 없어요.
    • 비보안 객체 공유를 허용하지 않는 셰어에 부여된 데이터베이스 역할
    • 비보안 객체 공유를 허용하지 않는 셰어

예를 들어 기존 보안 뷰 high_performance_view의 SECURE 속성을 해제해요.

ALTER VIEW high_performance_view UNSET SECURE;

또는 보안 뷰를 뷰로 다시 만들 수도 있어요.

CREATE OR REPLACE VIEW high_performance_view WITH COPY GRANTS;

비보안 객체 공유의 제한 사항

객체를 공유할 때 다음을 고려해요.

  • SECURE_OBJECTS_ONLY 속성을 FALSE로 설정해 셰어를 만든 뒤에는 이 속성을 해제하거나 TRUE로 설정할 수 없어요.
  • 비보안 객체를 허용하도록 명시적으로 구성된 셰어에만 비보안 뷰를 추가할 수 있어요.

비보안 뷰 공유 문법

CREATE [ OR REPLACE ] SHARE <name>
  [ SECURE_OBJECTS_ONLY = <boolean> ]
  [ COMMENT = '<string_literal>' ]

필수 파라미터:

  • name — 셰어의 식별자를 지정해요. 셰어가 만들어지는 계정 안에서 고유해야 해요. 또한 식별자는 알파벳 문자로 시작해야 하고, 전체 식별자 문자열을 큰따옴표로 감싸지 않는 한 공백이나 특수 문자를 포함할 수 없어요(예: "My object"). 큰따옴표로 감싼 식별자는 대소문자를 구분해요.

선택 파라미터:

  • SECURE_OBJECTS_ONLY = boolean — 보안 객체만 부여하도록 허용할지, 아니면 비보안 객체도 셰어에 부여하도록 허용할지 지정해요. 기본값: true.
  • COMMENT = 'string_literal' — 셰어의 주석을 지정해요. 기본값: 값 없음.

접근 제어 요건:

이 연산을 실행하는 역할은 최소한 다음 권한이 있어야 해요.

권한 객체 참고
CREATE SHARE 계정 기본적으로 ACCOUNTADMIN 역할만 이 권한을 가져요. 필요에 따라 추가 역할에 부여할 수 있어요.

사용 참고 사항:

  • SHOW SHARES를 실행해도 SECURE_OBJECTS_ONLY 속성의 값을 볼 수 없어요. COMMENT 속성에 SECURE_OBJECTS_ONLY 속성 값을 기록해 두는 걸 사용해요.
  • CREATE SHARE에 대한 기존 참고 사항도 적용돼요.

더 알아보기