REVOKE <privileges> … FROM APPLICATION

REVOKE <privileges> … FROM APPLICATION

보호 가능한 객체(securable object)에 대한 하나 이상의 접근 권한을 애플리케이션에서 취소하는 명령이에요. 취소할 수 있는 권한은 객체별로 다릅니다.

출처: 문서

본문

구문 (Syntax)

REVOKE {  <globalPrivileges> ON ACCOUNT
        | { <accountObjectPrivileges>  | ALL [ PRIVILEGES ] } ON { USER | RESOURCE MONITOR | WAREHOUSE | COMPUTE POOL | DATABASE | INTEGRATION | CONNECTION | FAILOVER GROUP | REPLICATION GROUP | EXTERNAL VOLUME }
        | { <schemaPrivileges>         | ALL [ PRIVILEGES ] } ON { SCHEMA <name>  | ALL SCHEMAS IN DATABASE <db_name>  }
        | { <schemaObjectPrivileges>   | ALL [ PRIVILEGES ] } ON { <object_name>   | ALL <object_type_plural>  IN { DATABASE <db_name>  | SCHEMA <schema_name>  }
       }
     FROM APPLICATION <name>

여기서:

  • globalPrivileges — CREATE { COMPUTE POOL | DATABASE | WAREHOUSE }, BIND SERVICE ENDPOINT, EXECUTE MANAGED TASK, MANAGE WAREHOUSES, READ SESSION.
  • accountObjectPrivileges — 객체 유형별: COMPUTE POOL(MODIFY | MONITOR | OPERATE | USAGE), CONNECTION(FAILOVER), DATABASE(APPLYBUDGET | CREATE { DATABASE ROLE | SCHEMA } | IMPORTED PRIVILEGES | MODIFY | MONITOR | USAGE), EXTERNAL VOLUME(USAGE), FAILOVER GROUP(FAILOVER | MODIFY | MONITOR | REPLICATE), INTEGRATION(USAGE | USE_ANY_ROLE), REPLICATION GROUP(MODIFY | MONITOR | REPLICATE), RESOURCE MONITOR(MODIFY | MONITOR), USER(MONITOR), WAREHOUSE(APPLYBUDGET | MODIFY | MONITOR | USAGE | OPERATE).
  • schemaPrivileges — ADD SEARCH OPTIMIZATION | CREATE { ALERT | EXTERNAL TABLE | FILE FORMAT | FUNCTION | IMAGE REPOSITORY | MATERIALIZED VIEW | PIPE | PROCEDURE | { AGGREGATION | MASKING | PASSWORD | PROJECTION | ROW ACCESS | SESSION } POLICY | SECRET | SEMANTIC VIEW | SEQUENCE | SERVICE | SNAPSHOT | STAGE | STREAM | TAG | TABLE | TASK | VIEW } | MODIFY | MONITOR | USAGE.
  • schemaObjectPrivileges — 객체 유형별: ALERT(MONITOR | OPERATE), DYNAMIC TABLE(OPERATE, SELECT), EVENT TABLE(INSERT | SELECT), FILE FORMAT/FUNCTION/PROCEDURE/SECRET/SEQUENCE/SNAPSHOT/TYPE(USAGE), IMAGE REPOSITORY(READ, WRITE), PIPE(APPLYBUDGET | MONITOR | OPERATE), POLICY/TAG(APPLY), SECRET(READ, USAGE), SEMANTIC VIEW(REFERENCES), SERVICE(MONITOR | OPERATE), external STAGE(USAGE), internal STAGE(READ [ , WRITE ]), STREAM(SELECT), TABLE(APPLYBUDGET | DELETE | EVOLVE SCHEMA | INSERT | REFERENCES | SELECT | TRUNCATE | UPDATE), TAG(READ), TASK(APPLYBUDGET | MONITOR | OPERATE), VIEW(REFERENCES | SELECT), MATERIALIZED VIEW(APPLYBUDGET | REFERENCES | SELECT).

필수 파라미터 (Required parameters)

  • object_name — 권한이 부여되는 객체의 식별자를 지정해요.
  • object_type — 스키마 수준 객체의 객체 유형: ALERT, DYNAMIC TABLE, EVENT TABLE, EXTERNAL TABLE, FILE FORMAT, FUNCTION, MASKING POLICY, MATERIALIZED VIEW, NETWORK RULE, PACKAGES POLICY, PASSWORD POLICY, PIPE, PROCEDURE, ROW ACCESS POLICY, SECRET, SEMANTIC VIEW, SESSION POLICY, SEQUENCE, STAGE, STREAM, TABLE, TAG, TASK, TYPE, VIEW.
  • object_type_plural — object_type의 복수형(예: TABLES, VIEWS). 파이프에 대한 대량 부여는 허용되지 않아요.
  • name — 수신 애플리케이션(권한이 부여되는 역할)의 식별자를 지정해요.

보안 요구사항 (Security requirements)

개별 객체에 권한 취소: 다음 기준 중 하나를 충족하는 활성 역할(또는 더 높은 역할)을 사용하여 객체의 권한을 다른 애플리케이션 역할에서 취소할 수 있어요:

  • 역할이 SHOW GRANTS 출력의 GRANTED_BY 열에서 권한의 grantor로 식별되는 경우. 지정된 객체에 권한 grant의 여러 인스턴스가 있으면 활성 grantor 역할이 부여한 인스턴스만 취소돼요.
  • 역할이 전역 MANAGE GRANTS 권한을 가진 경우. 지정된 객체에 권한 grant의 여러 인스턴스가 있으면 모든 인스턴스가 취소돼요. 기본적으로 SECURITYADMIN 시스템 역할 이상만 MANAGE GRANTS 권한을 가지지만 사용자 지정 역할에 부여할 수 있어요.

관리 액세스 스키마(즉 CREATE SCHEMA … WITH MANAGED ACCESS 구문으로 만든 스키마)에서는 스키마 소유자(즉 스키마에 OWNERSHIP 권한이 있는 역할), 전역 MANAGE GRANTS 권한이 있는 역할, 또는 더 높은 역할만 스키마의 객체에 대한 권한을 취소할 수 있어요.

사용 메모 (Usage notes)

  • 어떤 클래스에도 직접 권한을 부여하거나 취소할 수 없어요. 그러나 클래스의 인스턴스를 만들고 계정 역할의 인스턴스 역할을 취소할 수 있어요. 역할이 클래스의 인스턴스를 만들지 못하게 하려면 스키마에서 CREATE <class_name> 권한을 취소해요.
  • 권한은 서로 다른 grantor에 의해 역할에 여러 번 부여될 수 있어요. REVOKE <privilege> 문장은 활성 역할 또는 계층 구조의 더 낮은 역할이 grantor인 grant만 취소해요. 다른 grantor의 지정된 권한의 추가 grant는 무시돼요. 또한 REVOKE <privilege> 문장은 취소되는 권한이 없어도 성공해요. 지정된 권한에 종속 grant가 있고 문장에 CASCADE 절이 생략된 경우에만 오류를 반환해요.
  • 단일 GRANT 문장에서 같은 객체 유형에 대해 여러 권한을 지정할 수 있고(각 권한은 쉼표로 구분), GRANT 명령을 실행하는 역할이 보유하고 부여할 수 있는 권한만 대상 역할에 실제로 부여돼요. 부여할 수 없는 권한에 대해 경고 메시지가 반환돼요. 태그에는 이 키워드를 지정할 수 없어요.
  • 데이터베이스의 경우 IMPORTED PRIVILEGES 권한은 공유 데이터베이스(즉 공유에서 만든 데이터베이스)에만 적용돼요.
  • 스키마와 스키마의 객체의 경우, 컨테이너(즉 데이터베이스 또는 스키마) 내의 같은 유형의 모든 객체에 권한을 부여하는 옵션이 제공돼요. 이는 편의 옵션이며, 내부적으로 명령이 각 객체에 대한 일련의 개별 GRANT 명령으로 확장돼요. 컨테이너 내에 현재 존재하는 객체만 영향을 받아요. 그러나 권한의 대량 부여는 권장되지 않아요. 대신 공유 역할을 만들고 그 역할로 객체를 만들어 역할이 부여된 모든 사용자가 자동으로 접근할 수 있게 하는 것이 좋아요.
  • 스테이지의 경우:
    • USAGE는 외부 스테이지에만 적용돼요.
    • READ | WRITE는 내부 스테이지에만 적용돼요. 내부 스테이지에 WRITE 권한을 부여하려면 먼저 스테이지에 READ 권한이 부여되어야 해요.
  • 개별 UDF에 권한을 부여할 때 udf_name ( [ arg_data_type , ... ] ) 형태로 UDF의 인자 데이터 유형을 지정해야 해요.
  • 개별 저장 프로시저에 권한을 부여할 때 procedure_name ( [ arg_data_type , ... ] ) 형태로 프로시저의 인자 데이터 유형을 지정해야 해요.

예시 (Example)

뷰에 대한 SELECT 권한을 애플리케이션에서 취소해요:

REVOKE SELECT ON VIEW data.views.credit_usage
  FROM APPLICATION app_snowflake_credits;

더 알아보기 (Learn more)