REVOKE <권한>

역할 또는 데이터베이스 역할에서 보안 오브젝트에 대한 하나 이상의 권한을 제거합니다. 취소할 수 있는 권한은 오브젝트별로 다릅니다.

역할:

역할에서 취소할 수 있는 권한은 다음 카테고리로 분류됩니다.

  • 전역 권한

  • 계정 개체의 권한(리소스 모니터, 가상 웨어하우스, 데이터베이스)

  • 스키마의 권한

  • 스키마 오브젝트의 권한(테이블, 뷰, 스테이지, 파일 형식, UDFs, 시퀀스)

데이터베이스 역할:

데이터베이스 역할에서 취소할 수 있는 권한은 다음 카테고리로 분류됩니다.

  • 데이터베이스 역할을 포함하는 데이터베이스에 대한 권한.

  • 데이터베이스 역할을 포함하는 데이터베이스의 스키마에 대한 권한.

  • 데이터베이스 역할을 포함하는 데이터베이스에서 스키마 오브젝트(테이블, 뷰, 스테이지, 파일 형식, UDF, 시퀀스)의 권한.

참고 항목:

GRANT <권한> , GRANT OWNERSHIP

REVOKE <권한> … FROM SHARE

구문

계정 역할:

REVOKE [ GRANT OPTION FOR ]
    {
       { globalPrivileges         | ALL [ PRIVILEGES ] } ON ACCOUNT
     | { accountObjectPrivileges  | ALL [ PRIVILEGES ] } ON { RESOURCE MONITOR | WAREHOUSE | COMPUTE POOL | DATABASE | INTEGRATION | FAILOVER GROUP | REPLICATION GROUP | EXTERNAL VOLUME } <object_name>
     | { schemaPrivileges         | ALL [ PRIVILEGES ] } ON { SCHEMA <schema_name> | ALL SCHEMAS IN DATABASE <db_name> }
     | { schemaPrivileges         | ALL [ PRIVILEGES ] } ON { FUTURE SCHEMAS IN DATABASE <db_name> }
     | { schemaObjectPrivileges   | ALL [ PRIVILEGES ] } ON { <object_type> <object_name> | ALL <object_type_plural> IN SCHEMA <schema_name> }
     | { schemaObjectPrivileges   | ALL [ PRIVILEGES ] } ON FUTURE <object_type_plural> IN { DATABASE <db_name> | SCHEMA <schema_name> }
    }
  FROM [ ROLE ] <role_name> [ RESTRICT | CASCADE ]
Copy

데이터베이스 역할:

REVOKE [ GRANT OPTION FOR ]
    {
       { CREATE SCHEMA | MODIFY | MONITOR | USAGE } [ , ... ] } ON DATABASE <object_name>
       { globalPrivileges         | ALL [ PRIVILEGES ] } ON ACCOUNT
     | { accountObjectPrivileges  | ALL [ PRIVILEGES ] } ON { RESOURCE MONITOR | WAREHOUSE | COMPUTE POOL | DATABASE | INTEGRATION | EXTERNAL VOLUME } <object_name>
     | { schemaPrivileges         | ALL [ PRIVILEGES ] } ON { SCHEMA <schema_name> | ALL SCHEMAS IN DATABASE <db_name> }
     | { schemaPrivileges         | ALL [ PRIVILEGES ] } ON { FUTURE SCHEMAS IN DATABASE <db_name> }
     | { schemaObjectPrivileges   | ALL [ PRIVILEGES ] } ON { <object_type> <object_name> | ALL <object_type_plural> IN SCHEMA <schema_name> }
     | { schemaObjectPrivileges   | ALL [ PRIVILEGES ] } ON FUTURE <object_type_plural> IN { DATABASE <db_name> | SCHEMA <schema_name> }
    }
  FROM DATABASE ROLE <database_role_name> [ RESTRICT | CASCADE ]
Copy

여기서

globalPrivileges ::=
  {
      CREATE {
                ACCOUNT | COMPUTE POOL | DATA EXCHANGE LISTING | DATABASE | FAILOVER GROUP | INTEGRATION
                | NETWORK POLICY | EXTERNAL VOLUME | REPLICATION GROUP | ROLE | SHARE
                | USER | WAREHOUSE
      }
      | APPLY { { AGGREGATION | AUTHENTICATION | MASKING | PACKAGES | PASSWORD | PROJECTION | ROW ACCESS | SESSION } POLICY | TAG }
      | ATTACH POLICY | AUDIT | BIND SERVICE ENDPOINT
      | EXECUTE { ALERT | TASK }
      | IMPORT SHARE
      | MANAGE { GRANTS | LISTING AUTO FULFILLMENT | 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
  }
  [ , ... ]
Copy
accountObjectPrivileges ::=
-- For COMPUTE POOL
   { MODIFY | MONITOR | OPERATE | USAGE } [ , ... ]
-- For DATABASE
   { APPLYBUDGET | CREATE { DATABASE ROLE | SCHEMA } | 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

| CREATE {
      ALERT | DYNAMIC TABLE | EXTERNAL TABLE | FILE FORMAT | FUNCTION | HYBRID TABLE | IMAGE REPOSITORY |
      | ICEBERG TABLE | MATERIALIZED VIEW | MODEL | NETWORK RULE | PIPE | PROCEDURE
      | { AGGREGATION | AUTHENTICATION | MASKING | PACKAGES | PASSWORD | PROJECTION | ROW ACCESS | SESSION } POLICY | SERVICE
      | SECRET | SEQUENCE | STAGE | STREAM | STREAMLIT
      | SNOWFLAKE.CORE.BUDGET |
      | SNOWFLAKE.ML.ANOMALY_DETECTION | SNOWFLAKE.ML.FORECAST
      | TAG | TABLE | TASK | VIEW
  }
| MODIFY | MONITOR | USAGE
[ , ... ]
Copy
schemaObjectPrivileges ::=
  -- For ALERT
     { MONITOR | OPERATE } [ , ... ]
  -- For DYNAMIC TABLE
     MONITOR, OPERATE, SELECT [ , ...]
  -- For EVENT TABLE
     { INSERT | SELECT } [ , ... ]
  -- For FILE FORMAT, FUNCTION (UDF or external function), MODEL, PROCEDURE, SECRET, or SEQUENCE
     USAGE [ , ... ]
  -- For HYBRID TABLE
     { INSERT | SELECT | UPDATE } [ , ... ]
  -- For IMAGE REPOSITORY
     { READ, WRITE } [ , ... ]
  -- For ICEBERG TABLE
     { APPLYBUDGET | DELETE | INSERT | REFERENCES | SELECT | TRUNCATE | UPDATE } [ , ... ]
  -- For PIPE
     { APPLYBUDGET | MONITOR | OPERATE } [ , ... ]
  -- For { AGGREGATION | AUTHENTICATION | MASKING | PACKAGES | PASSWORD | PROJECTION | ROW ACCESS | SESSION } POLICY or TAG
     APPLY [ , ... ]
  -- For SECRET
     READ, USAGE [ , ... ]
  -- For SERVICE
     { USAGE | 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 } [ , ... ]
  -- For MATERIALIZED VIEW
     { APPLYBUDGET | REFERENCES | SELECT } [ , ... ]
Copy

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

필수 매개 변수

object_name

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

object_type

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

  • AGGREGATION POLICY

  • ALERT

  • AUTHENTICATION POLICY

  • DYNAMIC TABLE

  • EVENT TABLE

  • EXTERNAL TABLE

  • FILE FORMAT

  • FUNCTION

  • HYBRID TABLE

  • IMAGE REPOSITORY

  • ICEBERG TABLE

  • MASKING POLICY

  • MATERIALIZED VIEW

  • MODEL

  • NETWORK RULE

  • PACKAGES POLICY

  • PASSWORD POLICY

  • PIPE

  • PROCEDURE

  • PROJECTION POLICY

  • ROW ACCESS POLICY

  • SECRET

  • SERVICE

  • SESSION POLICY

  • SEQUENCE

  • STAGE

  • STREAM

  • TABLE

  • TAG

  • TASK

  • VIEW

object_type_plural

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

role_name

수신자 역할의 식별자를 지정합니다(즉, 권한이 취소되는 역할).

database_role_name

수신자 데이터베이스 역할의 식별자를 지정합니다(즉, 권한이 취소되는 역할). 식별자가 db_name.database_role_name 형식으로 정규화되지 않은 경우 이 명령은 세션의 현재 데이터베이스에서 데이터베이스 역할을 찾습니다.

선택적 매개 변수

GRANT OPTION FOR

지정된 경우 수신자 역할이 다른 역할에 권한을 부여하는 기능을 제거합니다.

기본값: 값 없음

ON FUTURE

지정된 경우, 기존 오브젝트가 아닌 지정된 형식(예: 테이블 또는 뷰)의 새로운(즉, 향후) 스키마 오브젝트에 대해 부여된 권한만 제거합니다. 기존 오브젝트에 부여된 모든 권한은 유지됩니다.

RESTRICT | CASCADE

지정된 경우 권한이 다른 역할에 다시 부여되었는지 여부를 기준으로 권한에 대한 취소 작업의 성공 여부를 결정합니다.

  • RESTRICT: 취소되는 권한이 다른 역할에 다시 부여된 경우 REVOKE 명령이 실패합니다.

  • CASCADE: 취소되는 권한이 다시 부여된 경우 REVOKE 명령은 이러한 종속적 권한 부여를 재귀적으로 취소합니다. 다른 권한 부여자가 어떤 오브젝트에 대해 대상 역할에 같은 권한을 부여한 경우(병렬 권한 부여), 그 권한 부여는 영향을 받지 않으며 대상 역할은 권한을 유지합니다.

기본값: RESTRICT

보안 요구 사항

개별 오브젝트에 대한 권한 취소하기:

다음 기준 중 하나에 부응하는 활성 역할 또는 상위 역할 을 사용하여 다른 역할에서 오브젝트에 대한 권한을 취소할 수 있습니다.

  • 이 역할은 SHOW GRANTS 출력의 GRANTED_BY 열에서 권한 부여자 로 식별됩니다.

    한 권한의 여러 인스턴스가 지정된 오브젝트에 부여된 경우 활성 권한 부여자 역할이 부여한 인스턴스만 취소됩니다.

  • 이 역할은 전역 MANAGE GRANTS 권한이 있습니다.

    한 권한의 여러 인스턴스가 지정된 오브젝트에 부여된 경우 모든 인스턴스가 취소됩니다.

    SECURITYADMIN 시스템 역할 이상의 역할만 기본적으로 MANAGE GRANTS 권한을 가집니다. 하지만 사용자 지정 역할에 이 권한을 부여할 수 있습니다.

관리되는 액세스 스키마(즉, CREATE SCHEMA … WITH MANAGED ACCESS 구문을 사용하여 만든 스키마)에서는 스키마 소유자(즉, 스키마에 대한 OWNERSHIP 권한을 가진 역할) 또는 전역 MANAGE GRANTS 권한을 가진 역할이나 그 이상의 역할만 스키마의 오브젝트에 대한 권한을 취소할 수 있습니다.

지정된 유형의 향후 오브젝트에 대한 권한 부여 취소하기:

데이터베이스 수준

데이터베이스의 향후 오브젝트에 대한 권한을 취소하려면 전역 MANAGE GRANTS 권한이 필요합니다. SECURITYADMIN 시스템 역할 이상의 역할만 MANAGE GRANTS 권한을 가집니다. 하지만 사용자 지정 역할에 이 권한을 부여할 수 있습니다.

스키마 수준

관리되는 액세스 스키마(즉, CREATE SCHEMA … WITH MANAGED ACCESS 구문을 사용하여 만든 스키마)에서는 스키마 소유자(즉, 스키마에 대한 OWNERSHIP 권한을 가진 역할) 또는 전역 MANAGE GRANTS 권한을 가진 역할이 스키마의 향후 오브젝트에 대한 권한을 취소할 수 있습니다.

표준 스키마에서 스키마의 향후 오브젝트에 대한 권한을 취소하려면 전역 MANAGE GRANTS 권한이 필요합니다.

사용법 노트

  • 모든 클래스에 대해 직접 권한을 부여하거나 취소할 수 없습니다. 그러나 클래스의 인스턴스를 만들고 계정 역할에서 인스턴스 역할 을 취소할 수 있습니다. 역할이 클래스의 인스턴스를 생성하지 못하도록 하려면 스키마에 대한 CREATE <class_name> 권한을 취소하십시오.

  • 다른 권한 부여자가 한 역할에 여러 번 권한을 부여할 수 있습니다. REVOKE <권한> 문은 활성 역할 또는 계층 구조의 하위 역할이 권한 부여자인 권한 부여만 취소합니다. 다른 권한 부여자가 지정한 권한의 추가 권한 부여가 무시됩니다.

    또한 아무 권한도 취소되지 않은 경우에도 REVOKE <권한> 문이 성공합니다. REVOKE <권한> 문은 지정된 권한에 종속 권한 부여가 있고 문에서 CASCADE 절이 생략된 경우에만 오류를 반환합니다.

  • 단일 GRANT 문에서 같은 오브젝트 유형에 대해 여러 권한을 지정하거나(각 권한은 쉼표로 구분됨) 특수 ALL [ PRIVILEGES ] 키워드를 사용하여 지정된 오브젝트 유형에 적용 가능한 모든 권한을 부여할 수 있습니다. 하지만 GRANT 명령을 실행하는 역할이 보유하고 부여할 수 있는 권한만 실제로 대상 역할에 부여됩니다. 부여할 수 없는 모든 권한에 대해 경고 메시지가 반환됩니다.

    태그에는 이 키워드를 지정할 수 없습니다.

  • 특정 역할에 부여된 권한은 역할이 부여된 다른 역할뿐 아니라, 역할 계층 구조 내에서 다른 더 높은 수준의 역할이 자동으로 상속합니다. 자세한 내용은 액세스 제어의 개요 섹션을 참조하십시오.

  • 데이터베이스의 경우 IMPORTED PRIVILEGES 권한은 공유 데이터베이스(즉, 공유에서 만든 데이터베이스)에만 적용됩니다. 자세한 내용은 공유 데이터 소비하기 섹션을 참조하십시오.

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

    하지만 Snowflake 모델에서 권한을 대량으로 부여하는 것은 권장되는 방법이 아닙니다. 대신, Snowflake는 공유 역할을 만들고 그 역할을 사용해 역할이 부여된 모든 사용자에게 자동으로 액세스할 수 있는 오브젝트를 만들 것을 권장합니다.

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

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

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

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

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

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

  • 향후 권한 부여: 향후 권한 부여를 취소하면 지정된 타입의 향후 오브젝트에 대한 권한 부여만 삭제됩니다. 기존 오브젝트에 부여된 모든 권한은 유지됩니다.

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

역할

report_wh 웨어하우스를 운영(즉, 일시 중단 또는 재개)하는 데 필요한 권한을 analyst 역할에서 취소합니다.

REVOKE OPERATE ON WAREHOUSE report_wh FROM ROLE analyst;
Copy

analyst 역할에서 report_wh 웨어하우스에 대한 OPERATE 권한의 부여 옵션 만 취소합니다. 이 역할은 OPERATE 권한을 유지하지만, 더 이상 웨어하우스에 대한 OPERATE 권한을 다른 역할에 부여할 수 없습니다.

REVOKE GRANT OPTION FOR OPERATE ON WAREHOUSE report_wh FROM ROLE analyst;
Copy

mydb.myschema 스키마의 모든 기존 테이블에 대한 SELECT 권한을 analyst 역할에서 취소합니다.

REVOKE SELECT ON ALL TABLES IN SCHEMA mydb.myschema from ROLE analyst;
Copy

(현재 스키마에서 같은 이름을 가진) 두 UDFs에 대한 모든 권한을 analyst 역할에서 취소합니다.

REVOKE ALL PRIVILEGES ON FUNCTION add5(number) FROM ROLE analyst;

REVOKE ALL PRIVILEGES ON FUNCTION add5(string) FROM ROLE analyst;
Copy

UDFs에 서로 다른 인자가 있는데, 이는 Snowflake가 같은 이름을 가진 UDFs를 고유하게 식별하는 방식입니다. UDF 명명에 대한 자세한 내용은 사용자 정의 함수 개요 를 참조하십시오.

(현재 스키마에서 같은 이름을 가진) 두 저장 프로시저에 대한 모든 권한을 analyst 역할에서 취소합니다.

REVOKE ALL PRIVILEGES ON PROCEDURE clean_schema(string) FROM ROLE analyst;

REVOKE ALL PRIVILEGES ON procedure clean_schema(string, string) FROM ROLE analyst;
Copy

두 저장 프로시저에 서로 다른 인자가 있는데, 이는 Snowflake가 같은 이름을 가진 프로시저를 고유하게 식별하는 방식입니다.

mydb.myschema 스키마에서 생성된 모든 향후 테이블에 대해 부여된 SELECT 및 INSERT 권한을 role1 역할에서 취소합니다.

REVOKE SELECT,INSERT ON FUTURE TABLES IN SCHEMA mydb.myschema
FROM ROLE role1;
Copy

데이터베이스 역할

mydb.myschema 스키마의 모든 기존 테이블에 대한 SELECT 권한을 mydb.dr1 데이터베이스 역할에서 취소합니다.

REVOKE SELECT ON ALL TABLES IN SCHEMA mydb.myschema
  FROM DATABASE ROLE mydb.dr1;
Copy

(현재 스키마에서 같은 이름을 가진) 두 UDF에 대한 모든 권한을 mydb.dr1 데이터베이스 역할에서 취소합니다.

REVOKE ALL PRIVILEGES ON FUNCTION add5(number)
  FROM DATABASE ROLE mydb.dr1;

REVOKE ALL PRIVILEGES ON FUNCTION add5(string)
  FROM DATABASE ROLE mydb.dr1;
Copy

UDFs에 서로 다른 인자가 있는데, 이는 Snowflake가 같은 이름을 가진 UDFs를 고유하게 식별하는 방식입니다. UDF 명명에 대한 자세한 내용은 사용자 정의 함수 개요 를 참조하십시오.

(현재 스키마에서 같은 이름을 가진) 두 저장 프로시저에 대한 모든 권한을 mydb.dr1 데이터베이스 역할에서 취소합니다.

REVOKE ALL PRIVILEGES ON PROCEDURE clean_schema(string)
  FROM DATABASE ROLE mydb.dr1;

REVOKE ALL PRIVILEGES ON procedure clean_schema(string, string)
  FROM DATABASE ROLE mydb.dr1;
Copy

두 저장 프로시저에 서로 다른 인자가 있는데, 이는 Snowflake가 같은 이름을 가진 프로시저를 고유하게 식별하는 방식입니다.

mydb.myschema 스키마에서 생성된 모든 향후 테이블에 대해 부여된 SELECT 및 INSERT 권한을 mydb.dr1 데이터베이스 역할에서 취소합니다.

REVOKE SELECT,INSERT ON FUTURE TABLES IN SCHEMA mydb.myschema
  FROM DATABASE ROLE mydb.dr1;
Copy