CREATE DATABASE ROLE

CREATE DATABASE ROLE

시스템에 새 데이터베이스 역할(database role)을 만들거나 기존 데이터베이스 역할을 교체하는 명령이에요. 데이터베이스 역할은 데이터베이스 안의 객체에 대한 접근 제어를 위해 객체 권한을 부여받고, 다시 다른 데이터베이스 역할이나 계정 역할에 부여될 수 있어요.

출처: 문서

본문

시스템에 새 데이터베이스 역할을 만들거나 기존 데이터베이스 역할을 교체해요.

데이터베이스 역할을 만든 뒤에는 데이터베이스 역할에 객체 권한을 부여하고, 그 데이터베이스 역할을 다른 데이터베이스 역할이나 계정 역할에 부여해 시스템 안의 객체에 대한 접근 제어 보안을 활성화할 수 있어요.

이 명령은 다음 변형(variant)을 지원해요.

  • CREATE OR ALTER DATABASE ROLE: 존재하지 않으면 새 데이터베이스 역할을 만들고, 존재하면 기존 데이터베이스 역할을 수정해요.

함께 보기: GRANT <privileges> … TO ROLE, GRANT DATABASE ROLE, GRANT OWNERSHIP, DROP DATABASE ROLE, ALTER DATABASE ROLE, SHOW DATABASE ROLES, CREATE <object> … CLONE

구문 (Syntax)

CREATE [ OR REPLACE ] DATABASE ROLE [ IF NOT EXISTS ] <name>
  [ COMMENT = '<string_literal>' ]

변형 구문 (Variant syntax)

CREATE OR ALTER DATABASE ROLE

존재하지 않으면 새 데이터베이스 역할을 만들고, 존재하면 기존 데이터베이스 역할을 문에 정의된 역할로 변환해요. CREATE OR ALTER DATABASE ROLE 문은 CREATE DATABASE ROLE 문의 구문 규칙을 따르고, ALTER DATABASE ROLE 문과 동일한 제약을 가져요.

CREATE OR ALTER DATABASE ROLE <name>
  [ COMMENT = '<string_literal>' ]

자세한 내용은 CREATE OR ALTER DATABASE ROLE 사용 메모와 CREATE OR ALTER <object>를 참고해요.

필수 매개변수 (Required parameters)

name 데이터베이스 역할의 식별자(즉 이름)를 지정하며, 역할이 만들어지는 데이터베이스 안에서 고유해야 해요.

식별자는 반드시 알파벳 문자로 시작해야 하며, 전체 식별자 문자열이 큰따옴표로 묶이지 않는 한 공백이나 특수 문자를 포함할 수 없어요 (예: "My object"). 큰따옴표로 묶인 식별자는 대소문자를 구분해요.

식별자가 db_name.database_role_name 형식의 정규화된 형태가 아니라면, 명령은 세션의 현재 데이터베이스에 데이터베이스 역할을 만들어요.

자세한 내용은 식별자 요구 사항(Identifier requirements)을 참고해요.

선택 매개변수 (Optional parameters)

COMMENT = 'string_literal' 데이터베이스 역할에 대한 설명(comment)을 지정해요.

  • 기본값: 값 없음

접근 제어 요구 사항 (Access control requirements)

이 작업을 실행하는 데 사용하는 역할(role)은 최소한 다음 권한을 가져야 해요.

권한 (Privilege) 객체 (Object) 비고
CREATE DATABASE ROLE Database 데이터베이스에 대한 OWNERSHIP 권한이 있는 역할은 CREATE DATABASE ROLE 권한을 다른 계정 역할에 부여할 수 있어요.
OWNERSHIP Database role 기존 데이터베이스 역할에 대해 CREATE OR ALTER DATABASE ROLE 문을 실행하는 데 필요해요.

OWNERSHIP은 객체에 대한 특별한 권한으로, 객체를 만든 역할에 자동으로 부여되지만 소유 역할(또는 MANAGE GRANTS 권한이 있는 역할)이 GRANT OWNERSHIP 명령으로 다른 역할에 이전할 수도 있어요.

지정된 권한 집합으로 사용자 지정 역할을 만드는 방법은 사용자 지정 역할 만들기(Creating custom roles)를 참고해요. 보호 가능한 객체에 대해 SQL 작업을 수행하기 위한 역할과 권한 부여의 일반적인 내용은 접근 제어 개요(Overview of Access Control)를 참고해요.

일반 사용 메모 (General usage notes)

카탈로그 연결(catalog-linked) 데이터베이스에 데이터베이스 역할을 만들 수 있어요.

데이터베이스 역할을 만들면, 데이터베이스 역할을 포함하는 데이터베이스에 대한 USAGE 권한이 데이터베이스 역할에 자동으로 부여돼요.

⚠️ 주의: 데이터베이스 역할을 (OR REPLACE 키워드로) 다시 만드는 것은 피하세요. 내부적으로 객체를 다시 만들면(CREATE OR REPLACE <object> 사용) 먼저 객체를 삭제한 뒤 다시 만드는 동작을 해요. 데이터베이스 역할을 다시 만들면 그 역할이 부여되어 있던 모든 셰어(share)에서 역할이 제거돼요. 그런 셰어에 데이터베이스 역할을 다시 부여해야 해요.

데이터베이스 역할을 반드시 다시 만들어야 한다면, 해당 데이터베이스 역할을 포함한 셰어의 데이터 소비자에게 알려야 해요. 그들은 데이터베이스 역할을 자기 계정 역할에 다시 부여해야 해요.

메타데이터에 관해서는 다음 사항에 주의해요.

⚠️ 주의: 고객은 Snowflake 서비스를 사용할 때 (User 객체를 제외하고) 개인 데이터·민감 데이터·수출 통제 데이터·기타 규제 데이터를 메타데이터로 입력하지 않도록 해야 해요. 자세한 내용은 Snowflake의 메타데이터 필드를 참고해요.

CREATE OR ALTER DATABASE ROLE 사용 메모

ALTER DATABASE ROLE 명령의 모든 제약이 적용돼요.

태그(tag) 설정·해제는 지원되지 않지만, 기존 태그는 CREATE OR ALTER DATABASE ROLE 문에 의해 변경되지 않고 그대로 유지돼요.

예시 (Examples)

데이터베이스 d1에 데이터베이스 역할 dr1을 만들어요.

CREATE DATABASE ROLE d1.dr1;

카탈로그 연결 데이터베이스에 데이터베이스 역할을 만들어요.

CREATE DATABASE ROLE my_linked_db.reader_role
  COMMENT = 'Read-only role for catalog-linked database';

더 알아보기 (Learn more)