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> }
     | { classPrivileges          | ALL [ PRIVILEGES ] } ON CLASS <object_type> }
    }
  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 { { MASKING | PACKAGES | PASSWORD | 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 | IMAGE REPOSITORY |
      | ICEBERG TABLE | MATERIALIZED VIEW | NETWORK RULE | PIPE | PROCEDURE
      | { MASKING | PACKAGES | PASSWORD | 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
     OPERATE, SELECT [ , ...]
  -- For EVENT TABLE
     { INSERT | SELECT } [ , ... ]
  -- For FILE FORMAT, FUNCTION (UDF or external function), PROCEDURE, SECRET, or SEQUENCE
     USAGE [ , ... ]
  -- For IMAGE REPOSITORY
     { READ, WRITE } [ , ... ]
  -- For ICEBERG TABLE
     { APPLYBUDGET | DELETE | INSERT | REFERENCES | SELECT | TRUNCATE | UPDATE } [ , ... ]
  -- For PIPE
     { APPLYBUDGET | MONITOR | OPERATE } [ , ... ]
  -- For { MASKING | PACKAGES | PASSWORD | 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

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

  • ALERT

  • DYNAMIC TABLE

  • EVENT TABLE

  • EXTERNAL TABLE

  • FILE FORMAT

  • FUNCTION

  • IMAGE REPOSITORY

  • ICEBERG TABLE

  • MASKING POLICY

  • MATERIALIZED VIEW

  • NETWORK RULE

  • PACKAGES POLICY

  • PASSWORD POLICY

  • PIPE

  • PROCEDURE

  • 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 권한이 필요합니다.

사용법 노트

  • 다른 권한 부여자가 한 역할에 여러 번 권한을 부여할 수 있습니다. 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