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;

더 알아보기 (Learn more)