카테고리:

사용자 및 보안 DDL (액세스 제어)

GRANT OWNERSHIP

한 역할에서 다른 역할로 오브젝트(또는 스키마에서 지정한 유형의 모든 오브젝트)의 소유권을 이전합니다. OWNERSHIP은 한 역할에서 다른 역할로만 부여될 수 있는 특별한 타입의 권한이며 취소할 수 없습니다. 자세한 내용은 Snowflake에서의 액세스 제어 섹션을 참조하십시오.

이 명령은 GRANT <권한> … TO ROLE 의 변형입니다.

참고 항목:

REVOKE <권한> … FROM ROLE

구문

GRANT OWNERSHIP
   { ON { <object_type> <object_name> | ALL <object_type_plural> IN { DATABASE <db_name> | SCHEMA <schema_name> } }
   | ON FUTURE <object_type_plural> IN { DATABASE <db_name> | SCHEMA <schema_name> }
   }
   TO ROLE <name>
   [ { REVOKE | COPY } CURRENT GRANTS ]

여기서:

objectType ::=
  { ROLE | USER | WAREHOUSE | INTEGRATION | NETWORK POLICY | SESSION POLICY | DATABASE | SCHEMA | TABLE | VIEW | STAGE | FILE FORMAT | STREAM | TASK | MASKING POLICY | ROW ACCESS POLICY | TAG | PIPE | FUNCTION | PROCEDURE | SEQUENCE }

필수 매개 변수

object_name

소유권을 이전할 오브젝트의 식별자를 지정합니다.

object_type

오브젝트의 유형을 지정합니다(스키마 오브젝트의 경우).

TABLE | EXTERNAL TABLE | VIEW | MATERIALIZED VIEW | MASKING POLICY | ROW ACCESS POLICY | SESSION POLICY | SEQUENCE | FUNCTION | PROCEDURE | FILE FORMAT | STAGE | PIPE | STREAM | TASK

object_type_plural

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

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

name

오브젝트 소유권이 이전되는 대상 역할의 식별자입니다.

선택적 매개 변수

[ REVOKE | COPY ] CURRENT GRANTS

소유권이 새 역할로 이전될 때 오브젝트에 대한 기존의 모든 아웃바운드 권한을 제거하거나 이전할지 여부를 지정합니다.

참고

아웃바운드 권한은 소유권이 바뀌는 개별 오브젝트에 부여된 모든 권한을 가리킵니다.

역할의 소유권을 이전할 때 현재 권한 부여는 (역할 계층 구조를 만들기 위해) 현재 역할에 부여된 모든 역할을 가리킵니다. 현재 권한이 복사된 상태에서 역할의 소유권이 이전되면 SHOW GRANTS 명령의 출력에 새 소유자가 현재 역할에 대한 하위 역할의 권한 부여자로 표시됩니다.

REVOKE

새 역할에 소유권을 이전하기 전에 오브젝트에서 모든 아웃바운드 권한을 제거할 필요가 있는 RESTRICT 의미 체계를 적용합니다. 이는 새 소유 역할이 권한이 이미 부여된 오브젝트를 알아채지 못하고 상속하지 않도록 보호하기 위한 것입니다.

소유권을 이전한 후 오브젝트에 대한 권한을 해당 역할에 대해 명시적으로 다시 부여해야 합니다.

데이터베이스나 스키마에서 지정된 유형의 미래 오브젝트에 대한 소유권을 역할(GRANT OWNERSHIP ON FUTURE <오브젝트_유형> 사용)에 부여할 때는 REVOKE 키워드가 작동하지 않습니다.

COPY

오브젝트에 대한 기존 아웃바운드 권한의 복사본과 함께 오브젝트의 소유권을 이전합니다. 소유권이 이전되면, 새 소유자는 복사된 아웃바운드 권한의 부여자로 시스템에서 식별됩니다. 즉, 오브젝트의 SHOW GRANTS 출력에서 모든 권한에 대해 새 소유자가 GRANTED_BY 열에 표시됩니다. 따라서, 소유권이 이전되기 전에 권한이 다시 부여된 모든 권한은 더 이상 원래 부여자 역할에 종속되지 않습니다.

REVOKE <권한> … FROM ROLECASCADE 옵션을 함께 사용하여 권한을 취소해도 이전에 종속된 이러한 권한 부여가 재귀적으로 취소되지 않습니다. 권한 부여는 명시적으로 취소해야 합니다.

이 매개 변수를 사용하려면 GRANT OWNERSHIP 명령을 실행하는 역할이 계정에 대한 MANAGE GRANTS 권한이 있어야 합니다.

기본값: 없음. 기존 아웃바운드 권한에 대해서는 어떤 작업도 수행되지 않습니다.

참고

오브젝트에 대한 기존 아웃바운드 권한이 취소되지도, 복사되지도 않으면 GRANT OWNERSHIP 문이 실패합니다.

사용법 노트

  • MANAGE GRANTS 권한이 있는 역할은 오브젝트 소유권을 모든 역할에 이전할 수 있습니다. 그에 반해, MANAGE GRANTS 권한이 없는 역할은 역할 계층 구조 내에서 자신의 역할 소유권을 하위 역할에만 이전할 수 있습니다.

  • 아웃바운드(즉, 종속적) 권한이 오브젝트에 있는 경우 GRANT OWNERSHIP 문이 차단됩니다. 오브젝트 소유자(또는 더 높은 역할)는 (COPY CURRENT GRANTS 옵션을 사용해) 현재의 모든 권한을 새 소유 역할에 명시적으로 복사하거나 (REVOKE CURRENT GRANTS 옵션을 사용해) 오브젝트에 대한 모든 아웃바운드 권한을 취소한 후에 소유권을 이전할 수 있습니다.

  • 소유권 이전은 명령이 실행되는 시점에 기존 오브젝트에만 영향을 줍니다. 명령이 실행된 후 생성된 모든 오브젝트는 오브젝트 생성 시 사용 중인 역할이 소유합니다.

  • 추가 조건이 충족되지 않는 한 다음 유형의 오브젝트 소유권 이전이 차단됩니다.

    파이프

    파이프를 일시 중지해야 합니다.

    작업

    예약된 작업(즉, 독립 실행형 작업 또는 트리의 루트 작업)을 일시 중단해야 합니다. 지정된 데이터베이스 또는 스키마의 모든 작업이 다른 역할로 이전되면 컨테이너의 모든 작업이 자동으로 일시 중단됩니다.

  • 데이터베이스 수준과 스키마 수준에서 모두 동일한 오브젝트 유형 에 대한 향후 권한 부여가 정의되면 스키마 수준 권한 부여가 데이터베이스 수준의 권한 부여보다 우선하며, 데이터베이스 수준의 권한 부여는 무시됩니다.

  • 구체화된 뷰에 대한 소유권을 부여하려면 GRANT OWNERSHIP ON VIEW... 를 사용하십시오. 별도의 GRANT OWNERSHIP ON MATERIALIZED VIEW 문은 없습니다.

현재 manager 역할이 소유한 mydb 데이터베이스에 대한 모든 아웃바운드 권한을 취소한 후 analyst 역할에 소유권을 이전합니다.

REVOKE ALL PRIVILEGES ON DATABASE mydb FROM ROLE manager;

GRANT OWNERSHIP ON DATABASE mydb TO ROLE analyst;

GRANT ALL PRIVILEGES ON DATABASE mydb TO ROLE analyst;

이 예에서는 소유권 이전을 위한 기본(및 권장) 다단계 프로세스를 보여줍니다.

단일 단계에서 mydb.public 스키마의 기존 테이블에 대한 모든 권한을 취소하고 테이블의 소유권을 (현재 권한의 복사본과 함께) analyst 역할로 이전합니다.

GRANT OWNERSHIP ON ALL TABLES IN SCHEMA mydb.public TO ROLE analyst COPY CURRENT GRANTS;

mydb.public.mytable 테이블에 대한 소유권을 테이블에 대한 현재 모든 아웃바운드 권한의 복사본과 함께 analyst 역할에 부여합니다.

GRANT OWNERSHIP ON TABLE mydb.public.mytable TO ROLE analyst COPY CURRENT GRANTS;
맨 위로 이동