GRANT OWNERSHIP

한 역할에서 다른 역할로 오브젝트 또는 스키마에서 지정한 유형의 모든 오브젝트의 소유권을 이전합니다. 역할 은 역할 또는 데이터베이스 역할을 나타냅니다.

OWNERSHIP은 한 역할에서 다른 역할로만 부여될 수 있는 특별한 타입의 권한이며 취소할 수 없습니다. 자세한 내용은 액세스 제어의 개요 섹션을 참조하십시오.

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

참고 항목:

REVOKE <권한>

구문

-- 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 <role_name>
   [ { REVOKE | COPY } CURRENT GRANTS ]

-- Database 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 DATABASE ROLE <database_role_name>
   [ { REVOKE | COPY } CURRENT GRANTS ]
Copy

필수 매개 변수

object_name

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

object_type

오브젝트의 유형을 지정합니다.

  • AGGREGATION POLICY

  • ALERT

  • AUTHENTICATION POLICY

  • COMPUTE POOL

  • DATABASE

  • DATABASE ROLE

  • DYNAMIC TABLE

  • EVENT TABLE

  • EXTERNAL TABLE

  • EXTERNAL VOLUME

  • FAILOVER GROUP

  • FILE FORMAT

  • FUNCTION

  • HYBRID TABLE

  • ICEBERG TABLE

  • IMAGE REPOSITORY

  • INTEGRATION

  • MATERIALIZED VIEW

  • NETWORK POLICY

  • NETWORK RULE

  • PACKAGES POLICY

  • PIPE

  • PROCEDURE

  • MASKING POLICY

  • PASSWORD POLICY

  • PROJECTION POLICY

  • REPLICATION GROUP

  • ROLE

  • ROW ACCESS POLICY

  • SCHEMA

  • SESSION POLICY

  • SECRET

  • SEQUENCE

  • STAGE

  • STREAM

  • TABLE

  • TAG

  • TASK

  • USER

  • VIEW

  • WAREHOUSE

object_type_plural

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

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

role_name

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

database_role_name

오브젝트 소유권이 이전되는 대상 데이터베이스 역할의 식별자입니다. 식별자가 db_name.database_role_name 형식으로 정규화되지 않은 경우 이 명령은 세션의 현재 데이터베이스에서 데이터베이스 역할을 찾습니다.

소유권은 데이터베이스 역할을 포함하는 데이터베이스의 오브젝트로 제한됩니다.

선택적 매개 변수

[ REVOKE | COPY ] CURRENT GRANTS

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

참고

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

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

REVOKE

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

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

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

COPY

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

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

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

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

참고

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

사용법 노트

  • 다음 오브젝트에 대한 OWNERSHIP 권한은 양도할 수 없습니다.

    • APPLICATION ROLE

    • CONNECTION

      ACCOUNTADMIN 역할만 연결 오브젝트에 대한 OWNERSHIP 권한을 가질 수 있습니다.

    • SERVICE

    • SHARE

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

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

    Snowflake는 공유 데이터베이스에서 GRANT OWNERSHIP … REVOKE CURRENT GRANTS 명령을 방지합니다. 자세한 내용은 이 항목의 공유 데이터베이스 예를 참조하십시오.

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

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

    파이프:

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

    작업:

    예약된 작업(예: 독립 실행형 작업 또는 트리의 루트 작업)을 일시 중단해야 합니다. 지정된 데이터베이스 또는 스키마의 모든 작업이 다른 역할로 이전되면 컨테이너의 모든 작업이 자동으로 일시 중단됩니다. COPY CURRENT GRANTS 옵션을 사용하여 동일한 역할로 전송된 작업도 자동으로 일시 중단됩니다.

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

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

  • 공유에 대한 OWNERSHIP 권한을 양도할 수 없으며 연결에 대한 OWNERSHIP 권한도 양도할 수 없습니다. ACCOUNTADMIN 역할만 연결을 소유할 수 있습니다.

  • 동적 테이블에 대한 OWNERSHIP 권한을 부여하려면 수신 역할에 동적 테이블이 포함된 데이터베이스 및 스키마와 테이블을 새로 고치는 데 사용되는 웨어하우스에 대한 USAGE 권한이 있는지 확인하십시오. 그렇지 않으면 후속적으로 예약된 새로 고침이 실패합니다.

  • 향후 동적 테이블에 대한 OWNERSHIP 권한을 부여하려면 다음 안내를 따르십시오.

    • 동적 테이블이 생성 시 초기화되도록 설정된 경우(즉, INITIALIZE = ON_CREATE) 새 역할에 참조된 오브젝트에 대한 충분한 권한 이 있는지 확인하십시오. 그렇지 않으면 초기 새로 고침이 실패하고 오브젝트를 찾을 수 없다는 오류가 발생합니다.

    • 동적 테이블이 일정에 따라 초기화되도록 설정된 경우(즉, INITIALIZE = ON_SCHEDULE) 새 역할에 참조된 오브젝트에 대한 충분한 권한 이 있는지 확인하십시오. 그렇지 않으면 후속적으로 예약된 새로 고침이 실패합니다.

  • 데이터베이스 역할:

    데이터베이스 역할과 동일한 데이터베이스에 있는 오브젝트를 통해서만 소유권을 이전할 수 있습니다.

  • 외부 테이블 또는 해당 상위 데이터베이스에 대한 소유권을 이전하면 AUTO_REFRESH 속성을 FALSE 로 설정하여 테이블 메타데이터의 자동 새로 고침이 차단됩니다. 소유권을 이전한 후 속성을 재설정하려면 ALTER EXTERNAL TABLE 명령을 사용하십시오.

역할

현재 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;
Copy

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

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

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

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

GRANT OWNERSHIP ON TABLE mydb.public.mytable TO ROLE analyst COPY CURRENT GRANTS;
Copy

데이터베이스 역할

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

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

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

GRANT OWNERSHIP ON TABLE mydb.public.mytable
  TO ROLE mydb.dr1
  COPY CURRENT GRANTS;
Copy

공유 데이터베이스

공유 데이터베이스에 대한 OWNERSHIP 권한을 이전하려면 다음 명령을 사용하십시오.

REVOKE USAGE ON DATABASE mydb FROM SHARE myshare;
GRANT OWNERSHIP ON DATABASE mydb TO ROLE r2;
GRANT USAGE ON DATABASE mydb TO ROLE r2;
Copy

필요한 경우 GRANT <권한> … TO SHARE 명령을 사용하여 공유에 데이터베이스를 다시 부여합니다.