참조를 사용하여 오브젝트에 대한 액세스 권한 부여하기

참조를 사용하면 기본적으로 특정 오브젝트에 액세스할 수 없는 저장 프로시저, Snowflake Native App 또는 클래스 인스턴스에 대해 해당 오브젝트에 액세스할 권한을 부여할 수 있습니다.

소개

참조는 식별자로 사용할 수 있는 문자열입니다. 식별자는 참조되는 오브젝트로 확인됩니다.

참조는 다음을 캡슐화합니다.

  • 오브젝트 이름.

  • 해당하는 경우 오브젝트 참조를 생성하는 데 사용되는 활성 역할과 모든 활성 보조 역할.

  • 참조가 생성될 때 지정된 오브젝트에 대한 권한.

참조가 필요할 수 있는 몇 가지 시나리오는 다음과 같습니다.

  • 소유자 권한 저장 프로시저 에 다른 역할이 소유한 테이블에 데이터를 삽입하기 위한 액세스 권한이 필요합니다.

  • 애플리케이션이 데이터 분석을 수행하며 테이블의 데이터에 대한 읽기 액세스 권한이 필요합니다.

  • SNOWFLAKE.ML.ANOMALY_DETECTION 클래스의 인스턴스에 변칙 검색 ML 모델을 학습시키기 위해 뷰에 대한 읽기 액세스 권한이 필요합니다.

이름으로 식별되는 오브젝트

참조는 이름으로 오브젝트를 식별합니다. 이는 참조가 생성된 후 오브젝트 이름이 바뀌면 해당 참조가 유효하지 않음을 의미합니다. 그러나 동일한 이름을 가진 새 오브젝트가 생성되면 참조가 유효할 수 있습니다. 예를 들어 my_role 역할은 SELECT 권한으로 테이블 my_table1 에 대한 참조 my_ref1 을 생성합니다. 참조가 생성된 후 테이블 my_table1 이 삭제되고 my_table1 이라는 새 테이블이 생성됩니다. 참조 my_ref1 은 이름이 my_table1 인 테이블을 식별합니다. 이 경우 새 테이블 my_table1 을 식별합니다.

참조를 생성하는 데 사용된 역할과 my_table1 에 부여된 권한이 여전히 유효한 경우 참조를 사용할 때 새 my_table1 에 대한 액세스 권한이 부여됩니다.

참조에 캡슐화된 역할과 권한이 더 이상 유효하지 않으면 my_table1 테이블에 대한 액세스 권한을 부여할 수 없으며 새 테이블에 대해 새 참조를 생성해야 합니다.

실행 시 확인되는 권한

참조를 생성한 역할에 부여된 권한은 참조가 사용될 때 확인됩니다. 예를 들어 my_role 역할은 SELECT 권한으로 테이블 t1 에 대한 참조를 생성합니다. my_role 이 삭제되거나 테이블 t1 에 대한 SELECT 권한이 my_role 에서 취소되면 참조에 캡슐화된 권한이 더 이상 유효하지 않습니다. 테이블에 대한 SELECT 권한이 필요한 저장 프로시저에 참조가 전달되면 저장 프로시저가 권한 오류로 실패합니다.

참조 유형 및 참조 수명

참조의 수명은 생성 시에 지정할 수 있습니다.

  • 일시적 참조 는 참조가 전달되는 호출 기간 또는 세션 기간 동안 제한된 수명을 갖습니다.

  • 영구적 참조 는 수명이 무제한입니다. 참조는 참조하는 오브젝트가 삭제되거나, 참조가 설정 해제되거나, 참조가 유효하지 않게 될 때까지 유효한 상태로 유지됩니다.

    참조 설정 해제의 예는 애플리케이션에 대한 영구적 참조 설정 해제하기 섹션을 참조하십시오.

    다음과 같은 이유로 참조가 유효하지 않게 될 수 있습니다.

    • 참조하는 오브젝트의 이름이 바뀝니다.

    • 참조를 생성한 역할이 삭제됩니다.

    • 참조를 생성한 역할에 더 이상 오브젝트에 대한 권한이 없습니다.

    자세한 내용은 이름으로 식별되는 오브젝트 및 실행 시 확인되는 권한 섹션을 참조하십시오.

소유자 권한 저장 프로시저에 대한 참조

소유자 권한 저장 프로시저 는 저장 프로시저를 실행하는 호출자 의 권한이 아닌 소유자 의 권한으로 실행됩니다. 호출자는 자신에게 액세스할 권한이 있는 테이블, 뷰 또는 함수에 대한 작업을 수행하려면 테이블, 뷰 또는 함수에 대한 참조를 전달해야 합니다. 참조를 사용하면 저장 프로시저가 참조 생성자(이 경우에는 호출자)의 권한으로 참조가 식별하는 오브젝트에 대한 작업을 수행할 수 있습니다.

애플리케이션과 클래스에 대한 참조

설계상, 애플리케이션과 클래스는 애플리케이션이 설치되거나 클래스의 인스턴스가 생성되는 계정의 오브젝트에 액세스할 수 없습니다. 사용자는 참조를 생성하여 애플리케이션 또는 클래스 인스턴스에 오브젝트 액세스 권한을 부여할 수 있습니다.

애플리케이션과 클래스의 공급자와 컨슈머

공급자 는 애플리케이션을 만들고 컨슈머 는 컨슈머 계정에 애플리케이션을 설치하고 사용합니다. Snowflake 클래스 의 경우 Snowflake가 공급자 이고 클래스의 인스턴스를 생성하는 Snowflake 계정이 있는 사용자가 컨슈머 입니다.

공급자는 코드에서 참조를 요청하고 사용하는 애플리케이션과 클래스를 만들 수 있습니다. 자세한 내용은 공급자를 위한 참조 섹션을 참조하십시오.

컨슈머는 자신의 계정에 설치하는 애플리케이션이나 Snowflake 클래스 인스턴스에 대한 참조를 생성하고 전달할 수 있습니다. 자세한 내용은 컨슈머를 위한 참조 섹션을 참조하십시오.

참조의 지원 대상

참조의 대상은 오브젝트 또는 쿼리일 수 있습니다. 참조의 대상이 오브젝트인 경우 참조를 위해서는 해당 오브젝트에 대한 권한이 필요합니다.

참조의 지원 오브젝트 유형과 권한

다음 표에는 참조에 포함될 수 있는 오브젝트 유형, 생성할 수 있는 참조의 유형, 각 오브젝트에 허용되는 권한이 나열되어 있습니다.

오브젝트 타입

일시적

지속적

허용되는 권한

기본 권한

API INTEGRATION

✔

USAGE

USAGE

CATALOG INTEGRATION

✔

USAGE

USAGE

COMPUTE POOL

✔

APPLYBUDGET

DATABASE

✔

APPLYBUDGET

EXTERNAL ACCESS INTEGRATION

✔

USAGE

EXTERNAL VOLUME

✔

USAGE

EXTERNAL TABLE

✔

SELECT, REFERENCES

SELECT

FUNCTION

✔

✔

USAGE

USAGE

GIT REPOSITORY

✔

READ

READ

MATERIALIZED VIEW

✔

APPLYBUDGET

PIPE

✔

APPLYBUDGET

APPLYBUDGET

POLICY

✔

MANAGE POLICY

PROCEDURE

✔

✔

USAGE

USAGE

ROW ACCESS POLICY

✔

APPLY

SCHEMA

✔

APPLYBUDGET

SECRET

✔

USAGE, READ

✔

READ

STAGE

✔

READ, WRITE

READ

TABLE

✔

APPLYBUDGET, REBUILD, EVOLVESCHEMA

✔

✔

SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES

SELECT

TAG

✔

APPLYBUDGET

TASK

✔

APPLYBUDGET

APPLYBUDGET

VIEW

✔

✔

SELECT, REFERENCES

SELECT

WAREHOUSE

✔

APPLYBUDGET

✔

MODIFY, MONITOR, OPERATE, USAGE

USAGE

쿼리 참조

쿼리 참조 는 일시적 참조 유형입니다. 저장 프로시저에 있는 다른 SQL 문의 FROM 절에서 사용할 수 있는 SELECT 문을 참조합니다. SYSTEM$QUERY_REFERENCE 함수 또는 TABLE 키워드를 사용하여 쿼리 참조를 만들 수 있습니다.

자세한 내용은 쿼리 참조 사용하기 및 TABLE 키워드를 사용하여 테이블, 뷰 또는 쿼리에 대한 참조를 만들기 섹션을 참조하십시오.

공급자를 위한 참조

Snowflake Native App Framework 를 사용하여 애플리케이션을 공급자로 만들 수 있습니다. 애플리케이션의 컨슈머로부터 참조를 요청하는 방법에 대한 자세한 내용은 컨슈머로부터 참조 및 오브젝트 수준 권한 요청하기 섹션을 참조하십시오.

컨슈머를 위한 참조

SYSTEM$REFERENCE 함수를 사용하여 참조를 생성할 수 있습니다. 함수가 저장 프로시저, 애플리케이션 또는 클래스 인스턴스에 반환하는 문자열 식별자를 전달할 수 있습니다. 또는 문자열 식별자 대신 참조를 생성하는 문을 전달할 수 있습니다.

참고

저장 프로시저에 참조를 전달하는 경우 SYSTEM$REFERENCE 함수를 호출하는 대신 TABLE 키워드를 사용하여 참조를 생성할 수 있습니다. TABLE 키워드를 사용하여 테이블, 뷰 또는 쿼리에 대한 참조를 만들기 섹션을 참조하십시오.

예

SELECT 권한을 사용하여 테이블 t1 에 대한 세션 범위의 일시적 참조를 만듭니다.

SELECT SYSTEM$REFERENCE('TABLE', 't1', 'SESSION', 'SELECT');

참조되는 범위의 수명 동안 동일한 테이블에 대한 참조를 만들려면(예: 참조를 저장 프로시저에 전달하는 경우 참조의 수명은 저장 프로시저의 가장 바깥쪽 블록의 수명이 됨) 다음 문을 실행하십시오.

SELECT SYSTEM$REFERENCE('TABLE', 't1', 'CALL', 'SELECT');

애플리케이션에 전달할 INSERT 권한이 있는 테이블 t1 에 대한 영구적 참조를 만듭니다.

SELECT SYSTEM$REFERENCE('TABLE', 't1', 'PERSISTENT', 'INSERT');

저장 프로시저에 전달할 쿼리 참조를 만듭니다. 이 일시적 참조의 수명은 참조를 전달하는 대상 저장 프로시저의 가장 바깥쪽 블록의 수명입니다.

SELECT SYSTEM$QUERY_REFERENCE('SELECT id FROM my_table', FALSE);

추가적인 예는 다음을 참조하십시오.

애플리케이션에 대한 영구적 참조 설정 해제하기

영구적 참조가 필요한 애플리케이션이나 클래스는 참조를 설정 해제하는 메서드도 제공합니다. 메서드 이름은 구현에 따라 다를 수 있습니다.

ALTER APPLICATION … UNSET REFERENCES 문을 사용하여 참조를 설정 해제할 수 있습니다.

  1. SHOW REFERENCES 명령을 사용하면 애플리케이션에 대해 설정된 참조를 포함한 모든 참조를 볼 수 있습니다.

    예를 들어 my_app 애플리케이션에 대한 참조를 보려면 다음을 수행하십시오.

    SHOW REFERENCES IN APPLICATION my_app;
    
  2. ALTER APPLICATION 명령을 사용하여 애플리케이션에 대해 설정된 모든 참조를 설정 해제할 수 있습니다.

    예를 들어 애플리케이션 my_app 에서 table_to_read 라는 참조를 설정 해제하려면 다음을 수행하십시오.

    ALTER APPLICATION my_app UNSET REFERENCES('table_to_read');
    

    예를 들어 my_app 애플리케이션에서 모든 참조를 설정 해제하려면 다음을 수행하십시오.

    ALTER APPLICATION my_app UNSET REFERENCES;
    

참조 사용 시 고려 사항

  • 참조와 연결된 오브젝트의 이름이 바뀌거나 상위 항목이 바뀌면 해당 참조는 더 이상 유효하지 않습니다.

    동일한 이름으로 새 오브젝트가 생성되고 참조 연결에 인코딩된 역할이 새 오브젝트에 대한 관련 권한을 갖는 경우 참조는 유효한 상태로 유지됩니다. 그렇지 않으면 권한 오류로 인해 실패합니다.

  • 오브젝트가 바뀌고 참조 연결에 인코딩된 역할이 이제는 바뀐 이름을 갖는 새 오브젝트에 대한 관련 권한이 있는 경우 참조는 유효한 상태로 유지됩니다. 그렇지 않으면 권한 오류로 인해 실패합니다.

  • 오브젝트 삭제 및 삭제 취소:

    • 참조와 연결된 오브젝트가 삭제되면 참조 연결이 유효하지 않게 됩니다.

    • 오브젝트 삭제가 취소되면 참조 연결이 다시 유효해집니다.

  • 복제

    계정의 오브젝트에 대한 참조를 사용하는 클래스 인스턴스나 해당 상위 데이터베이스 또는 스키마를 복제할 수 있습니다.

    • 참조 오브젝트가 정규화된 이름으로 참조되는 경우 인스턴스 복제본은 원본 오브젝트를 참조합니다.

    • 참조된 오브젝트가 부분적으로 정규화되거나 정규화되지 않은 이름으로 참조되는 경우 인스턴스 복제본은 복제 경계에 따라 복제본 오브젝트나 원본 오브젝트를 참조하거나 실제 오브젝트가 아닌 오브젝트를 참조할 수 있습니다.

  • 복제는 컨슈머 계정의 오브젝트에 대한 참조를 사용하는 클래스 인스턴스가 포함된 데이터베이스 또는 애플리케이션에 대해 지원됩니다.

    다음 오브젝트가 복제되는 한 참조는 대상 계정에서 올바르게 작동합니다.

    • 애플리케이션 또는 클래스 인스턴스.

    • 참조되는 오브젝트.

    • 참조를 생성한 역할.

    이러한 오브젝트는 다른 복제 또는 장애 조치 그룹에 복제될 수 있습니다. 모든 오브젝트가 복제되면 참조를 사용할 수 있습니다.

Snowflake Native App Framework 애플리케이션 공급자에 대해서는 참조 사용 시 고려 사항 섹션도 참조하십시오.

참조 사용 모니터링하기

SHOW REFERENCES 명령을 사용하여 애플리케이션에서 요청한 참조를 확인할 수 있습니다. 애플리케이션에 대한 참조를 설정한 경우 출력에는 오브젝트, 데이터베이스, 스키마 및 각 참조의 식별자에 대한 정보가 포함됩니다.

예를 들어 my_app 애플리케이션에서 참조를 보려면 다음을 수행하십시오.

SHOW REFERENCES IN APPLICATION my_app;