보안 오브젝트: 오류 메시지의 정보 삭제(보류 중)¶
보안 오브젝트와 관련된 오류 메시지는 다음과 같이 동작합니다.
- 변경 전:
보안 오브젝트와 관련된 오류 메시지는 전체 메시지를 표시합니다.
- 변경 후:
보안 오브젝트와 관련된 오류 메시지가 삭제될 수 있습니다.
이 변경 사항은 다음 유형의 오브젝트와 관련된 오류 메시지에 적용됩니다.
보안 함수 (보안 테이블 함수 포함)
보안 오브젝트에 대한 자세한 내용은 보안 오브젝트를 사용하여 데이터 액세스 제어하기 섹션을 참조하십시오.
보안 오브젝트의 확장 또는 평가 중에 오류가 감지되면 오류 메시지를 삭제할 수 있습니다. 오류 메시지를 수정해도 오류 코드는 변경되지 않습니다.
오류 메시지에 대한 변경은 실행 중 수정과 실행 후 메타데이터 수정의 두 가지 유형이 가능합니다. 이러한 유형의 변경 사항은 다음 섹션에서 설명합니다.
실행 중 수정¶
작업 중 오류가 반환되면 전체 오류 메시지 또는 오류 메시지의 일부를 수정할 수 있습니다. 일반적으로 이러한 유형의 오류 메시지 수정은 사용자가 보안 오브젝트에 대한 OWNERSHIP 권한이 없는 상태에서 보안 오브젝트를 사용하려고 할 때 발생합니다.
실행 후 메타데이터 수정¶
사용자는 오류 메시지 등 오류 발생 후 오류에 대한 메타데이터를 볼 수 있습니다. 예를 들어, 사용자는 Snowsight의 Query History 페이지에서 이 메타데이터를 보거나 Snowflake Information Schema 에서 뷰를 쿼리하고 함수를 호출하여 이 메타데이터를 볼 수 있습니다. 실행 중에 오류 메시지가 삭제되면 모든 사용자의 실행 후 메타데이터에서 오류 메시지가 항상 삭제됩니다.
실행 중에 오류 메시지가 수정되지 않으면 일부 사용자의 메타데이터에는 메시지가 변경되지 않은 상태로 표시되고 다른 사용자에게는 수정된 상태로 표시됩니다. 다음 중 하나에 해당하는 경우 오류 메시지는 메타데이터에서 변경되지 않습니다.
메타데이터를 보는 사용자는 AUDIT 권한이 있습니다.
메타데이터를 보는 사용자가 오류를 일으킨 문을 실행했습니다.
다른 모든 경우에는 오류 메시지가 메타데이터에서 삭제됩니다. 수정된 오류 메시지에는 Error in secure object
라는 텍스트가 포함됩니다.
오류 메시지 수정의 예¶
다음 예는 수정된 오류 메시지를 보여줍니다. 실행 중 또는 실행 후 메타데이터에서 수정이 발생할 수 있습니다.
예 1: 보안 뷰 쿼리하기¶
다음 예에서는 보안 뷰에 대한 SELECT 권한이 있는 사용자가 오류를 반환하는 뷰에 대한 쿼리를 실행합니다.
보안 뷰를 만듭니다.
CREATE SECURE VIEW myview
AS SELECT a FROM mytable;
뷰 쿼리에 사용된 테이블을 삭제합니다.
DROP TABLE mytable;
뷰에서 쿼리를 실행합니다.
SELECT * FROM myview;
변경 전 모든 사용자에게 표시되는 오류 메시지¶
002037 (42601): SQL compilation error:
Failure during expansion of view 'MYVIEW': SQL compilation error:
Object 'DB.SC.MYTABLE' does not exist or not authorized.
변경 후 일부 사용자에게 표시되는 오류 메시지가 수정되었습니다¶
002037 (42601): SQL compilation error:
Failure during expansion of view 'MYVIEW': Error in secure object
예 2: 보안 함수를 호출하는 쿼리 실행하기¶
다음 예에서는 보안 함수에 대한 USAGE 권한이 있는 사용자가 보안 함수를 호출하는 쿼리를 실행하지만 보안 함수가 오류를 반환합니다.
예 2a: 함수 인자로 인해 오류 발생¶
보안 함수를 만듭니다.
CREATE SECURE FUNCTION myfunction1(x FLOAT, y FLOAT)
RETURNS FLOAT
LANGUAGE SQL
AS
'SELECT x / y';
보안 함수를 호출하는 쿼리를 실행합니다.
SELECT myfunction1(1, 0);
변경 전 모든 사용자에게 표시되는 오류 메시지¶
100051 (22012): Division by zero
변경 후 일부 사용자에게 표시되는 오류 메시지가 수정되었습니다¶
100051 (22012): Error in secure object
예 2b: 함수가 종속된 오브젝트가 삭제됨¶
보안 함수를 만듭니다.
CREATE SECURE FUNCTION myfunction2()
RETURNS TABLE (a NUMBER)
LANGUAGE SQL
AS
'SELECT * FROM mytable';
함수에 사용된 테이블을 삭제합니다.
DROP TABLE mytable;
보안 함수를 호출하는 쿼리를 실행합니다.
SELECT * FROM TABLE(myfunction2());
변경 전 모든 사용자에게 표시되는 오류 메시지¶
002003 (42S02): SQL compilation error:
Object 'DB.SC.MYTABLE' does not exist or not authorized
변경 후 일부 사용자에게 표시되는 오류 메시지가 수정되었습니다¶
002003 (42S02): Error in secure object
예 3: 마스킹 정책이 오류 반환¶
다음 예에서는 사용자가 마스킹 정책이 있는 뷰에서 쿼리를 실행하여 오류가 발생하는 경우입니다.
마스킹 정책을 만듭니다.
CREATE MASKING POLICY allowed_role_names_mp as (val NUMBER) RETURNS NUMBER ->
CASE
WHEN EXISTS
(SELECT role FROM allowed_roles WHERE role = CURRENT_ROLE()) THEN val
ELSE '********'
END;
뷰를 만들고 뷰의 열에 마스킹 정책을 설정합니다.
CREATE TABLE test_masking_policy(x NUMBER) AS
SELECT * FROM VALUES (1), (2), (3);
CREATE VIEW myview_mp
AS SELECT * FROM test_masking_policy;
ALTER VIEW myview_mp
MODIFY COLUMN x SET MASKING POLICY allowed_role_names_mp;
마스킹 정책에 사용된 테이블을 삭제합니다.
DROP TABLE allowed_roles;
마스킹 정책에 대한 소유권 권한이 없는 사용자로 뷰에 대한 쿼리를 실행합니다.
SELECT * FROM myview_mp;
변경 전 모든 사용자에게 표시되는 오류 메시지¶
002003 (42S02): SQL compilation error:
Object 'DB.SC.ALLOWED_ROLES' does not exist or not authorized.
변경 후 일부 사용자에게 표시되는 오류 메시지가 수정되었습니다¶
002003 (42S02): Error in secure object
예 4: 행 액세스 정책이 오류 반환¶
다음 예에서는 사용자가 행 액세스 정책이 있는 뷰에서 쿼리를 실행하고 오류가 발생합니다.
행 액세스 정책을 생성합니다.
CREATE OR REPLACE ROW ACCESS POLICY myrap AS (role NUMBER) RETURNS BOOLEAN ->
EXISTS (
SELECT 1 FROM allowed_roles
WHERE role::STRING = CURRENT_ROLE());
뷰를 만들고 뷰에 행 액세스 정책을 추가합니다.
CREATE TABLE test_row_access_policy(x NUMBER) AS
SELECT * FROM VALUES (1), (2), (3);
CREATE VIEW myview_rap
AS SELECT * FROM test_row_access_policy;
ALTER VIEW myview_rap
ADD ROW ACCESS POLICY myrap ON (x);
행 액세스 정책에 사용된 테이블을 삭제합니다.
DROP TABLE allowed_roles;
행 액세스 정책에 대한 OWNERSHIP 권한이 없는 사용자로 뷰를 쿼리합니다.
SELECT * FROM myview_rap;
변경 전 모든 사용자에게 표시되는 오류 메시지¶
002003 (42S02): SQL compilation error:
Object 'DB.SC.ALLOWED_ROLES' does not exist or not authorized.
변경 후 일부 사용자에게 표시되는 오류 메시지가 수정되었습니다¶
002003 (42S02): Error in secure object
참조: 1858