참조를 사용하여 오브젝트에 대한 액세스 권한 부여하기¶
참조를 사용하면 기본적으로 특정 오브젝트에 액세스할 수 없는 저장 프로시저, 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');