GRANT CALLER
GRANT CALLER
역할에 caller grants를 부여하는 명령이에요. 역할이 소유한 실행 가능 객체(executable)가 제한된 호출자 권한(restricted caller's rights)으로 실행되면, caller grants가 지정한 호출자의 권한으로만 실행될 수 있어요.
출처: 문서
본문
GRANT CALLER 명령의 변형은 다음과 같아요:
GRANT CALLER— 특정 객체에 caller grants를 부여해요. 문장이 만든 각 caller grant는 실행 가능 객체가 지정된 권한으로 실행될 수 있게 해요.GRANT ALL CALLER PRIVILEGES— 특정 객체에 caller grants를 부여해요. 문장이 만든 caller grants는 실행 가능 객체가 호출자의 모든 권한으로 실행될 수 있게 해요.GRANT INHERITED CALLER— 공통 스키마, 데이터베이스 또는 계정을 공유할 때 같은 유형의 모든 현재 및 미래 객체에 caller grants를 부여해요. 문장이 만든 각 caller grant는 실행 가능 객체가 지정된 권한으로 실행될 수 있게 해요.GRANT ALL INHERITED CALLER PRIVILEGES— 공통 스키마, 데이터베이스 또는 계정을 공유할 때 같은 유형의 모든 현재 및 미래 객체에 caller grants를 부여해요. 문장이 만든 caller grants는 실행 가능 객체가 호출자의 모든 권한으로 실행될 수 있게 해요.
구문 (Syntax)
GRANT CALLER <object_privilege> [ , <object_privilege> ... ]
ON <object_type> <object_name>
TO { ROLE <grantee_name> | DATABASE ROLE <grantee_name> | APPLICATION <app_name> }
GRANT ALL CALLER PRIVILEGES
ON <object_type> <object_name>
TO { ROLE <grantee_name> | DATABASE ROLE <grantee_name> | APPLICATION <app_name> }
GRANT INHERITED CALLER <object_privilege> [ , <object_privilege> ... ]
ON ALL <object_type_plural>
IN { ACCOUNT | DATABASE <db_name> | SCHEMA <schema_name> | APPLICATION <app_name> | APPLICATION PACKAGE <app_pkg_name> }
TO { ROLE <grantee_name> | DATABASE ROLE <grantee_name> | APPLICATION <app_name> }
GRANT ALL INHERITED CALLER PRIVILEGES
ON ALL <object_type_plural>
IN { ACCOUNT | DATABASE <db_name> | SCHEMA <schema_name> | APPLICATION <app_name> | APPLICATION PACKAGE <app_pkg_name> }
TO { ROLE <grantee_name> | DATABASE ROLE <grantee_name> | APPLICATION <app_name> }
파라미터
- object_privilege [ , object_privilege ... ] — 실행 가능 객체가 실행할 수 있는 객체 권한. 특정 객체 유형의 권한 목록은 Access control privileges를 참조해요. 둘 이상의 객체 권한을 지정하려면 쉼표로 구분된 목록을 사용해요.
- ON object_type object_name — 지정된 객체(object_name)에 접근할 때 실행 가능 객체가 지정된 object_privilege로 실행될 수 있게 해요. object_type의 단수 형태를 사용해요(예: TABLE 또는 WAREHOUSE).
- ON ALL object_type_plural IN ACCOUNT 또는 ON ALL object_type_plural IN DATABASE db_name 또는 ON ALL object_type_plural IN SCHEMA schema_name 또는 ON ALL object_type_plural IN APPLICATION app_name 또는 ON ALL object_type_plural IN APPLICATION PACKAGE app_pkg_name — 지정된 유형의 객체에 접근할 때 실행 가능 객체가 객체 수준 권한으로 실행될 수 있게 해요. 객체 유형의 복수 형태를 사용해요(예: TABLES 또는 WAREHOUSES). GRANT 문장으로 현재 계정의 모든 객체 또는 지정된 데이터베이스, 스키마, 애플리케이션, 애플리케이션 패키지의 객체에만 접근을 제어할 수 있어요.
- TO ROLE grantee_name 또는 TO DATABASE ROLE grantee_name — caller grants로 보호하려는 실행 가능 객체의 소유자. 데이터베이스 역할을 지정하면 권한은 데이터베이스 역할과 같은 데이터베이스의 객체로 제한돼요.
- TO APPLICATION app_name — grantee로 Snowflake Native App을 지정해요.
참고:
IN ACCOUNT를 지정하면TO APPLICATION을 사용할 때 모든 객체 유형이 지원되지는 않아요. 다음 객체만 지원돼요:- DATABASE
- APPLICATION PACKAGE
- APPLICATION
- 데이터베이스 또는 스키마 내에 포함된 객체 유형.
접근 제어 요구사항 (Access control requirements)
이 작업을 실행하는 역할은 최소한 다음 권한을 가져야 해요:
| Privilege | Object | Notes |
|---|---|---|
| MANAGE CALLER GRANTS | Account | 계정 수준의 MANAGE CALLER GRANTS 권한은 caller grants에만 관련돼요. 이 권한으로 역할에 권한을 부여할 수는 없어요. |
| Any privilege | All specified objects | caller grant에 지정된 객체에 대한 권한이 하나 이상 필요해요. 예를 들어 테이블에 caller grant를 부여하려면 그 테이블에 대한 권한이 하나 이상 있어야 해요. |
예시 (Examples)
owner_role이 소유한 v1 뷰에 접근하는 실행 가능 객체는 뷰에 대한 SELECT 권한으로 실행될 수 있어요:
GRANT CALLER SELECT ON VIEW v1 TO owner_role;
owner_role이 소유한 db.sch 스키마의 모든 테이블에 접근하는 실행 가능 객체는 호출자의 SELECT 및 INSERT 권한으로 실행될 수 있어요:
GRANT INHERITED CALLER SELECT, INSERT ON ALL TABLES IN SCHEMA db.sch TO ROLE owner_role;
owner_role이 소유한 현재 계정의 스키마에 접근하는 실행 가능 객체는 스키마에 대한 호출자의 모든 권한으로 실행될 수 있어요:
GRANT ALL INHERITED CALLER PRIVILEGES ON ALL SCHEMAS IN ACCOUNT TO ROLE owner_role;
db.r 데이터베이스 역할이 소유한 db.sch1.t1 테이블에 접근하는 실행 가능 객체는 테이블에 대한 SELECT 권한으로 실행될 수 있어요:
GRANT CALLER SELECT ON TABLE db.sch1.t1 TO DATABASE ROLE db.r;
owner_role이 소유한 my_db 데이터베이스에 접근하는 실행 가능 객체는 데이터베이스에 대한 호출자의 모든 권한으로 실행될 수 있어요:
GRANT ALL CALLER PRIVILEGES ON DATABASE my_db TO ROLE owner_role;