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;