비보안 뷰의 데이터 공유하기
비보안 뷰의 데이터 공유하기
공유하는 뷰에서 쿼리 최적화의 성능 향상을 최대한 활용하려면, 비보안(non-secure) 뷰를 다른 계정과 공유하도록 허용하는 셰어를 만들 수 있어요.
본문
참고: 가능하면 보안 뷰(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를 비보안 뷰 공유를 지원하는 셰어로 변환하려면:
SHOW GRANTS명령으로 어느 객체가 셰어에 부여됐고(TO), 어느 계정이 셰어에 접근하는지(OF) 각각 확인해요.SHOW GRANTS TO SHARE secure_views_only; SHOW GRANTS OF SHARE secure_views_only;- 기존 셰어를 뷰 공유를 허용하는 셰어로 변환해요.
ALTER SHARE secure_views_only SET SECURE_OBJECTS_ONLY = FALSE, COMMENT = "Convert to allow sharing non-secure views that require query optimization"; - 선택적으로 기존 보안 뷰를 뷰로 변환해요. 이 예시에서는
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에 대한 기존 참고 사항도 적용돼요.