DROP ROLE

DROP ROLE

시스템에서 지정한 역할(role)을 제거하는 명령이에요. 역할을 삭제하면 해당 역할에 부여된 권한과 소유권이 정리돼요.

출처: 문서

본문

구문 (Syntax)

DROP ROLE [ IF EXISTS ] <name>

파라미터

  • name — 삭제할 역할의 식별자를 지정해요. 식별자에 공백이나 특수 문자가 포함되면 전체 문자열을 큰따옴표로 묶어야 해요. 큰따옴표로 묶은 식별자는 대소문자를 구분해요.

사용 메모 (Usage notes)

  • 삭제된 역할은 복구할 수 없으므로 다시 만들어야 해요.
  • 현재 기본 역할(primary role)은 삭제할 수 없어요. 삭제를 시도하면 오류가 반환돼요. 예를 들어:
CREATE ROLE bobr_primary;

GRANT ROLE bobr_primary to USER bobr;

USE ROLE bobr_primary;

DROP ROLE bobr_primary;
SQL execution error: Cannot drop role BOBR_PRIMARY as it is the current primary role.
  • 공유 데이터베이스에 대해 OWNERSHIP 권한을 가진 역할은 삭제할 수 없어요. 먼저 GRANT OWNERSHIP 명령으로 공유 데이터베이스에 대한 OWNERSHIP 권한을 이전한 후 역할을 삭제해야 해요.
  • 삭제된 역할이 소유한 객체의 소유권은 DROP ROLE 명령을 실행한 역할로 이전돼요. 각 객체의 소유권을 다른 역할로 이전하려면 GRANT OWNERSHIP … COPY CURRENT GRANTS를 사용해요.
  • 역할을 grantor 또는 grantee로 지명하는 현재 및 미래의 모든 권한 부여(grants)는 역할이 삭제될 때 취소돼요. 지정한 역할을 grantor 또는 grantee로 지명하는 권한 부여를 조회하려면 GRANTS_TO_ROLES Account Usage 뷰를 사용해요:
SELECT *
  FROM SNOWFLAKE.ACCOUNT_USAGE.GRANTS_TO_ROLES
  WHERE grantee_name = UPPER('') OR granted_by = UPPER('');

다음 예시는 myrole이 grantor 또는 grantee인 권한 부여를 조회해요:

SELECT *
  FROM SNOWFLAKE.ACCOUNT_USAGE.GRANTS_TO_ROLES
  WHERE grantee_name = UPPER('myrole') OR granted_by = UPPER('myrole');
  • 역할이 사용자에게 역할의 grantor라면, 역할을 삭제하면 이러한 권한 부여가 자동으로 취소돼요.
  • 권한 부여 취소는 DROP ROLE 명령이 실행될 때 진행돼요. 취소할 권한 부여가 수천~수백만 개라면 DROP ROLE 명령이 시간 초과될 수 있어요. 이전 실행이 중단된 지점부터 계속 실행되도록 명령을 다시 실행하는 것이 안전해요.
  • IF EXISTS 절을 지정했을 때 대상 객체가 존재하지 않으면, 명령은 오류를 반환하지 않고 성공적으로 완료돼요.
  • 백업(backup) 안의 객체가 사용 중인 역할을 삭제할 수 있어요. 백업이 있으면 이 작업은 오래 걸릴 수 있어요. 역할이 삭제될 때 Snowflake가 백업 안의 객체와 관련된 권한 부여의 메타데이터를 다시 작성하기 때문이에요.

예시 (Examples)

DROP ROLE myrole;

더 알아보기 (Learn more)