GRANT <privileges> … TO USER

보안 오브젝트에 대한 하나 이상의 액세스 권한을 사용자에게 부여합니다. 부여할 수 있는 권한은 오브젝트별로 다릅니다.

역할 및 보안 오브젝트에 대한 자세한 내용은 액세스 제어의 개요 섹션을 참조하십시오.

권한에 대한 자세한 내용은 액세스 제어 권한 섹션을 참조하십시오.

참고 항목:

GRANT <privileges> … TO ROLE , REVOKE <privileges> … FROM USER

구문

GRANT {  { globalPrivileges         | ALL [ PRIVILEGES ] } ON ACCOUNT
       | { accountObjectPrivileges  | ALL [ PRIVILEGES ] } ON { USER | RESOURCE MONITOR | WAREHOUSE | COMPUTE POOL | DATABASE | INTEGRATION | CONNECTION | FAILOVER GROUP | REPLICATION GROUP | EXTERNAL VOLUME } <object_name>
       | { schemaPrivileges         | ALL [ PRIVILEGES ] } ON { SCHEMA <schema_name> | ALL SCHEMAS IN DATABASE <db_name> }
       | { schemaObjectPrivileges   | ALL [ PRIVILEGES ] } ON { <object_type> <object_name> | ALL <object_type_plural> IN { DATABASE <db_name> | SCHEMA <schema_name> } }
      }
  TO [ USER ] <user_name> [ WITH GRANT OPTION ]
Copy

여기서

globalPrivileges ::=
  {
      | ATTACH POLICY | AUDIT | BIND SERVICE ENDPOINT
      | APPLY {
         { AGGREGATION | AUTHENTICATION | JOIN | MASKING | PACKAGES | PASSWORD
           | PROJECTION | ROW ACCESS | SESSION } POLICY
         | TAG }
      | EXECUTE { ALERT | DATA METRIC FUNCTION | MANAGED ALERT | MANAGED TASK | TASK }
      | IMPORT SHARE
      | MANAGE { ACCOUNT SUPPORT CASES | EVENT SHARING | GRANTS | LISTING AUTO FULFILLMENT | ORGANIZATION SUPPORT CASES | USER SUPPORT CASES | WAREHOUSES }
      | MODIFY { LOG LEVEL | TRACE LEVEL | SESSION LOG LEVEL | SESSION TRACE LEVEL }
      | MONITOR { EXECUTION | SECURITY | USAGE }
      | OVERRIDE SHARE RESTRICTIONS | PURCHASE DATA EXCHANGE LISTING | RESOLVE ALL
      | READ SESSION
  }
  [ , ... ]
Copy
accountObjectPrivileges ::=
-- For COMPUTE POOL
   { MODIFY | MONITOR | OPERATE | USAGE } [ , ... ]
-- For CONNECTION
   { FAILOVER } [ , ... ]
-- For DATABASE
   { APPLYBUDGET
   | IMPORTED PRIVILEGES | MODIFY | MONITOR | USAGE } [ , ... ]
-- For EXTERNAL VOLUME
   { USAGE } [ , ... ]
-- For FAILOVER GROUP
   { FAILOVER | MODIFY | MONITOR | REPLICATE } [ , ... ]
-- For INTEGRATION
   { USAGE | USE_ANY_ROLE } [ , ... ]
-- For REPLICATION GROUP
   { MODIFY | MONITOR | REPLICATE } [ , ... ]
-- For RESOURCE MONITOR
   { MODIFY | MONITOR } [ , ... ]
-- For USER
   { MONITOR } [ , ... ]
-- For WAREHOUSE
   { APPLYBUDGET | MODIFY | MONITOR | USAGE | OPERATE } [ , ... ]
Copy
schemaPrivileges ::=

    ADD SEARCH OPTIMIZATION | APPLYBUDGET
   | MODIFY | MONITOR | USAGE
   [ , ... ]
Copy
schemaObjectPrivileges ::=
  -- For ALERT
     { MONITOR | OPERATE } [ , ... ]
  -- For DATA METRIC FUNCTION
     USAGE [ , ... ]
  -- For DYNAMIC TABLE
     MONITOR, OPERATE, SELECT [ , ...]
  -- For EVENT TABLE
     { APPLYBUDGET | DELETE | REFERENCES | SELECT | TRUNCATE } [ , ... ]
  -- For FILE FORMAT, FUNCTION (UDF or external function), MODEL, PROCEDURE, SECRET, SEQUENCE, or SNAPSHOT
     USAGE [ , ... ]
  -- For GIT REPOSITORY
     { READ, WRITE } [ , ... ]
  -- For HYBRID TABLE
     { APPLYBUDGET | DELETE | INSERT | REFERENCES | SELECT | TRUNCATE | UPDATE } [ , ... ]
  -- For IMAGE REPOSITORY
     { READ, WRITE } [ , ... ]
  -- For ICEBERG TABLE
     { APPLYBUDGET | DELETE | INSERT | REFERENCES | SELECT | TRUNCATE | UPDATE } [ , ... ]
  -- For MATERIALIZED VIEW
     { APPLYBUDGET | REFERENCES | SELECT } [ , ... ]
  -- For PIPE
     { APPLYBUDGET | MONITOR | OPERATE } [ , ... ]
  -- For { AGGREGATION | AUTHENTICATION | MASKING | JOIN | PACKAGES | PASSWORD | PRIVACY | PROJECTION | ROW ACCESS | SESSION } POLICY or TAG
     APPLY [ , ... ]
  -- For SECRET
     { READ | USAGE } [ , ... ]
  -- For SEMANTIC VIEW
     REFERENCES [ , ... ]
  -- For SERVICE
     { MONITOR | OPERATE } [ , ... ]
  -- For external STAGE
     USAGE [ , ... ]
  -- For internal STAGE
     READ [ , WRITE ] [ , ... ]
  -- For STREAM
     SELECT [ , ... ]
  -- For STREAMLIT
     USAGE [ , ... ]
  -- For TABLE
     { APPLYBUDGET | DELETE | EVOLVE SCHEMA | INSERT | REFERENCES | SELECT | TRUNCATE | UPDATE } [ , ... ]
  -- For TAG
     READ
  -- For TASK
     { APPLYBUDGET | MONITOR | OPERATE } [ , ... ]
  -- For VIEW
     { REFERENCES | SELECT } [ , ... ]
Copy

각 오브젝트 유형에 지원되는 권한에 대한 자세한 내용은 액세스 제어 권한 섹션을 참조하십시오.

필수 매개 변수

object_name

권한이 부여된 오브젝트의 식별자를 지정합니다.

object_type

스키마 수준 오브젝트의 유형을 지정합니다.

  • AGGREGATION POLICY

  • ALERT

  • AUTHENTICATION POLICY

  • CORTEX SEARCH SERVICE

  • DATA METRIC FUNCTION

  • DATASET

  • DYNAMIC TABLE

  • EVENT TABLE

  • EXTERNAL TABLE

  • FILE FORMAT

  • FUNCTION

  • GIT REPOSITORY

  • IMAGE REPOSITORY

  • ICEBERG TABLE

  • JOIN POLICY

  • MASKING POLICY

  • MATERIALIZED VIEW

  • MODEL

  • MODEL MONITOR

  • NETWORK RULE

  • NOTEBOOK

  • PACKAGES POLICY

  • PASSWORD POLICY

  • PIPE

  • PRIVACY POLICY

  • PROCEDURE

  • PROJECTION POLICY

  • ROW ACCESS POLICY

  • SECRET

  • SEMANTIC VIEW

  • SERVICE

  • SESSION POLICY

  • SEQUENCE

  • SNAPSHOT

  • STAGE

  • STREAM

  • STREAMLIT

  • TABLE

  • TAG

  • TASK

  • VIEW

object_type_plural

object_type 의 복수형입니다(예: TABLES, VIEWS).

파이프에 대한 대량 부여는 허용되지 않습니다.

user_name

수신자 사용자(권한이 부여된 사용자)의 식별자를 지정합니다.

선택적 매개 변수

WITH GRANT OPTION

지정하면 받는 사용자가 다른 역할이나 사용자에게 권한을 부여할 수 있습니다.

기본값: 값 없음(수신자 역할은 다른 역할이나 사용자에게 권한을 부여할 수 없다는 의미임)

참고

WITH GRANT OPTION 매개 변수는 IMPORTED PRIVILEGES 권한을 지원하지 않습니다. 자세한 내용은 가져온 데이터베이스에 권한 부여하기 섹션을 참조하십시오.

사용법 노트

  • 사용자에게 직접 할당된 권한은 사용자가 모든 보조 역할을 활성화한 경우에만 유효합니다.

  • 사용자에게 직접 권한을 부여하면 계정의 권한 부여가 급증할 수 있습니다. 개인 간 공유 시나리오 외에는 사용자에게 필요한 액세스 권한을 관리할 수 있는 역할에 권한을 부여하여 Snowflake에서 관리하는 것이 좋습니다.

  • 향후 권한 부여 를 사용할 수 없습니다.

  • CREATE 및 OWNERSHIP 권한은 사용자에게 부여할 수 없습니다.

  • 모든 클래스에 대해 직접 권한을 부여하거나 취소할 수 없습니다.

  • 단일 GRANT 문에서 같은 오브젝트 유형에 대해 각 권한을 쉼표로 구분하여 여러 권한을 지정할 수 있습니다. 또는 특수한 ALL [ PRIVILEGES ] 키워드를 사용하여 지정된 오브젝트 유형에 해당하는 모든 권한을 부여할 수 있습니다.

    참고

    • GRANT 명령을 실행하는 사용자가 보유하고 부여할 수 있는 권한만 실제로 대상 역할에 부여됩니다. 권한이 부여되지 않은 경우 경고 메시지가 반환됩니다.

    • 태그에 ALL [ PRIVILEGES ] 를 지정할 수 없습니다.

    • 스키마 에 대한 ALL [ PRIVILEGES ] 권한을 부여하려고 하면 ALL [ PRIVILEGES ]클래스 에 대한 권한을 부여하지 않습니다.

  • 스키마와 스키마의 오브젝트에 대해, 컨테이너 내에서 같은 유형의 모든 오브젝트(즉, 데이터베이스 또는 스키마)에 대한 권한을 부여하기 위해 ALL object_type_plural IN container 옵션이 제공됩니다. 이 옵션은 편의를 제공합니다. 내부적으로 이 명령은 각 오브젝트에서 일련의 개별 GRANT 명령으로 확장됩니다. 이 옵션은 현재 컨테이너 내에 존재하는 오브젝트에만 영향을 줍니다.

    참고

    권한을 일괄적으로 부여하는 것은 Snowflake 모델에서 권장되지 않습니다. 대신 공유 역할을 만든 다음 해당 역할을 사용하여 해당 역할이 부여된 모든 사용자가 자동으로 액세스할 수 있는 오브젝트를 만드는 것이 좋습니다.

    ALL TAGS 또는 ALL MASKING POLICIES 를 지정할 수 없습니다.

  • 스테이지에 대해서는 다음과 같습니다.

    • USAGE는 외부 스테이지에만 적용됩니다.

    • READ | WRITE는 내부 스테이지에만 적용됩니다. 또한, 내부 스테이지에 대해 WRITE 권한을 부여하려면 먼저 스테이지에 대해 READ 권한을 부여해야 합니다.

    외부 및 내부 스테이지에 대한 자세한 내용은 CREATE STAGE 섹션을 참조하십시오.

  • 개별 UDF 또는 저장 프로시저에 대한 권한을 부여할 때, udf_or_stored_procedure_name ( [ arg_data_type [ , ... ] ] ) 등의 구문을 사용하여 인자의 데이터 타입(있는 경우)을 지정해야 합니다. Snowflake는 인자 데이터 타입을 사용하여, 스키마 내에서 동일한 이름을 가진 UDF 또는 저장 프로시저를 확인합니다. 자세한 내용은 프로시저 및 함수 오버로딩하기 섹션을 참조하십시오.

  • 동적 테이블의 경우 동적 테이블이 포함된 데이터베이스 및 스키마와 테이블을 새로 고치는 데 사용되는 웨어하우스에 대한 USAGE 권한을 수신 사용자에게 부여해야 합니다. 자세한 내용은 동적 테이블 액세스 제어 섹션을 참조하십시오.

  • 개인 UDF 에 권한을 부여할 때는 udf_name ( [ arg_data_type , ... ] ) 등의 구문을 사용하여 UDF 의 인자(있는 경우)에 대한 데이터 타입을 지정해야 합니다. 이는 Snowflake가 인자 데이터 타입을 사용하여 스키마 내에서 같은 이름을 가진 UDFs를 확인하기 때문에 필요합니다. 자세한 내용은 사용자 정의 함수 개요 섹션을 참조하십시오.

  • 개별 저장 프로시저에 권한을 부여할 때는 procedure_name ( [ arg_data_type , ... ] ) 등의 구문을 사용하여 프로시저의 인자(있는 경우)에 대한 데이터 타입을 지정해야 합니다. 이는 Snowflake가 인자 데이터 타입을 사용하여 스키마 내에서 같은 이름을 가진 저장 프로시저를 확인하기 때문에 필요합니다.

    자세한 내용은 관리되는 액세스 스키마 를 참조하십시오.

액세스 제어 요구 사항

개별 오브젝트에 대한 권한 부여하기:

일반적으로 다음 권한 중 하나를 가진 역할 또는 사용자는 다른 사용자에게 오브젝트에 대한 권한을 부여할 수 있습니다.

  • 전역 MANAGE GRANTS 권한.

    SECURITYADMIN 및 ACCOUNTADMIN 시스템 역할만 MANAGE GRANTS 권한을 갖지만, 사용자 지정 역할 또는 사용자에게 이 권한을 부여할 수 있습니다.

  • OWNERSHIP 권한입니다.

    오브젝트에 대한 OWNERSHIP 권한이 있는 역할입니다.

  • USAGE 권한입니다. 스키마 오브젝트(예: 테이블 및 뷰)에 대한 권한을 부여할 때 역할 또는 사용자에게는 상위 데이터베이스 및 스키마에 대한 USAGE 권한도 있어야 합니다.

GRANT privileges ... TO USER WITH GRANT OPTION 명령으로 사용자에게 권한을 부여한 경우 해당 사용자는 다른 사용자나 역할에 동일한 권한을 다시 부여할 수 있습니다.

관리되는 액세스 스키마 (즉, CREATE SCHEMA ... WITH MANAGED ACCESS 구문을 사용하여 만든 스키마)에서 오브젝트 소유자는 권한 부여 결정을 내릴 수 없게 됩니다. 스키마 소유자(스키마에 대한 OWNERSHIP 권한을 가진 역할) 또는 전역 MANAGE GRANTS 권한을 가진 역할만 해당 스키마의 오브젝트에 대한 권한을 부여할 수 있습니다.

참고

전역 MANAGE GRANTS 권한을 보유하는 역할은 현재(부여자) 역할 또는 사용자에게 추가 권한을 부여할 수 있습니다.

특정 사용자 joe 에게 Streamlit 애플리케이션에 대한 USAGE 권한을 부여하는 방법은 다음과 같습니다.

GRANT USAGE ON STREAMLIT streamlit_db.streamlit_schema.streamlit_app TO USER joe;
Copy

특정 사용자 user1 에게 프로시저에 대한 USAGE 권한을 부여하는 방법은 다음과 같습니다.

GRANT USAGE ON PROCEDURE mydb.myschema.myprocedure(number) TO USER user1;
Copy