사용자 관리(User Management)
사용자 관리(User Management)
사용자 관리자는 SQL 또는 웹 인터페이스를 통해 Snowflake 사용자를 만들고 관리할 수 있어요.
- SQL을 사용하면 관리자는 로그인 자격 증명과 사용자 기본값 변경을 포함한 모든 사용자 관련 작업을 수행할 수 있어요.
- Snowsight는 대부분의 사용자 관련 작업을 지원해요.
출처: Snowflake 문서
본문
사용자 유형(Types of users)
일부 사용자 객체는 인간 사용자에 해당하고, 다른 사용자 객체는 인간 개입 없이 프로그래매틱하게 Snowflake와 상호작용하는 서비스 또는 애플리케이션에 해당해요. 사용자 객체를 만들 때 사람과 서비스를 구분하기 위해 사용자 유형을 지정해요. 사람은 다중 인증(MFA)에 등록해야 하지만 서비스와 애플리케이션은 2차 인증 방법을 사용할 사람이 없으므로 등록하면 안 되기 때문에 이 구분이 중요해요.
사용자 객체의 TYPE 속성은 사용자 유형을 결정해요. 이 TYPE 속성의 가능한 값은 다음과 같아요.
PERSON: 사용자는 Snowflake와 상호작용할 수 있는 인간 사용자예요.
NULL: PERSON과 동일하게 작동해요.
SERVICE: 사용자는 인간 개입 없이 Snowflake와 상호작용하는 서비스 또는 애플리케이션이에요.
비대화형 사용 사례의 보안 태세를 개선하기 위해 TYPE 속성이 SERVICE로 설정된 사용자는 다음 특성을 가져요.
- 비밀번호로 로그인할 수 없어요.
- SAML SSO로 로그인할 수 없어요.
- MFA에 등록할 수 없어요.
- 인증 정책 MFA 강제 적용 대상이 아니에요.
- 다음 속성을 가질 수 없어요.
FIRST_NAMEMIDDLE_NAMELAST_NAMEPASSWORDMUST_CHANGE_PASSWORDMINS_TO_BYPASS_MFA
- 다음 명령을 사용할 수 없어요.
- ALTER USER RESET PASSWORD
- ALTER USER SET
DISABLE_MFA = TRUE
SERVICE_AGENT: 사용자는 자신의 신원과 권한으로 상호작용하는 자동화된 AI 에이전트예요.
SERVICE_AGENT 사용자는 SERVICE 사용자의 비대화형 인증 특성을 공유해요. TYPE 속성이 SERVICE_AGENT로 설정된 사용자는 다음 특성을 가져요.
- 비밀번호로 로그인할 수 없어요.
- SAML SSO로 로그인할 수 없어요.
- MFA에 등록할 수 없어요.
- 인증 정책 MFA 강제 적용 대상이 아니에요.
SERVICE_AGENT사용자가 연 모든 세션은 자동으로 에이전트 활성(agent-active) 상태예요. 세션에 대해SYS_CONTEXT('SNOWFLAKE$CURRENT', 'IS_AGENT_ACTIVATED')를 호출하면 IS_AGENT_ACTIVATED가'TRUE'를 반환해요.- 워크로드 신원 연합, 키 쌍 인증, 프로그래매틱 액세스 토큰을 지원해요.
SERVICE사용자와 달리SERVICE_AGENT사용자는 프로그래매틱 액세스 토큰을 만들기 전에 네트워크 정책이 필요하지 않아요. - 다음 속성을 가질 수 없어요.
FIRST_NAMEMIDDLE_NAMELAST_NAMEPASSWORDMUST_CHANGE_PASSWORDMINS_TO_BYPASS_MFAMINS_TO_BYPASS_NETWORK_POLICY_REQUIREMENT
- 다음 명령을 사용할 수 없어요.
- ALTER USER RESET PASSWORD
- ALTER USER SET
DISABLE_MFA = TRUE
SQL(CREATE USER, ALTER USER) 또는 SCIM API(type = service_agent)를 사용해 SERVICE_AGENT 사용자를 만들고 관리할 수 있어요.
에이전트 신원 개요와 SERVICE_AGENT가 다른 식별 경로와 어떻게 맞는지는 에이전트 신원을 참고해요. 에이전트 인지 데이터 거버넌스의 경우 마스킹 정책에서 SYS_CONTEXT('SNOWFLAKE$CURRENT', 'IS_AGENT_ACTIVATED')를 사용할 수 있어요. 예시는 에이전트성 상호작용을 위한 데이터 보호 정책을 참고해요.
SNOWFLAKE_SERVICE: Snowpark Container Services를 위해 Snowflake가 만든 사용자예요. 관리자는 SNOWFLAKE_SERVICE 유형의 사용자를 만들 수 없고, 기존 사용자의 유형을 SNOWFLAKE_SERVICE로 바꿀 수도 없어요. SNOWFLAKE_SERVICE 사용자에 대한 자세한 내용은 Snowpark Container Services: SQL 실행을 참고해요.
LEGACY_SERVICE: TYPE 속성이 LEGACY_SERVICE로 설정된 사용자는 비대화형 통합을 나타내요. SERVICE와 유사하지만 비밀번호와 SAML 인증을 허용해요.
참고(Note): LEGACY_SERVICE 유형은 더 이상 사용되지 않고 있어요. 서비스와 애플리케이션에는 SERVICE 유형을 사용해요. LEGACY_SERVICE의 지원 종료 타임라인은 단일 요소 비밀번호 로그인 지원 종료 계획을 참고해요.
사용자 역할(User roles)
Snowflake는 사용자가 접근할 수 있는 객체(가상 웨어하우스, 데이터베이스, 테이블 등)를 제어하기 위해 역할을 사용해요.
- Snowflake는 사전 정의된 역할 집합과 커스텀 역할의 계층을 정의하기 위한 프레임워크를 제공해요.
- 모든 Snowflake 사용자에게는 기본 역할인 PUBLIC 역할이 자동으로 할당되며, 이는 Snowflake 로그인과 기본 객체 접근을 활성화해요.
- PUBLIC 역할에 더해 각 사용자에게 추가 역할을 할당할 수 있으며, 그중 하나가 *기본 역할(default role)*로 지정돼요. 사용자의 기본 역할은 사용자가 시작하는 Snowflake 세션에서 사용되는 역할을 결정해요. 하지만 이것은 기본값일 뿐이며, 사용자는 세션 내에서 언제든지 역할을 바꿀 수 있어요.
- 역할은 사용자 생성 시 또는 이후에 할당할 수 있어요.
주의(Attention): 사용자에게 할당할 추가 역할을 결정하고 기본 역할을 지정할 때, 사전 정의된 ACCOUNTADMIN 역할(계정 수준 관리 작업 수행에 필요)에 대해 다음을 고려해요.
- Snowflake는 ACCOUNTADMIN 할당을 엄격히 통제할 것을 권장하지만, 최소 두 명의 사용자에게는 할당할 것을 권장해요.
- ACCOUNTADMIN은 사용자의 기본 역할로 지정해서는 안 돼요. 대신 더 낮은 수준의 관리 역할이나 커스텀 역할을 기본으로 지정해요.
ACCOUNTADMIN 역할에 대한 자세한 내용과 모범 사례는 접근 제어 모범 사례를 참고해요. 역할에 대한 더 일반적인 정보는 접근 제어 개요를 참고해요.
사용자 생성·수정에 필요한 권한
계정에서 사용자를 관리하려면 다음 역할 또는 권한이 필요해요.
사용자 생성:
USERADMIN 시스템 역할은 SQL(CREATE USER)로 사용자를 만들 수 있어요.
이 목적으로 커스텀 역할을 사용하려는 경우 계정에 CREATE USER 권한을 그 역할에 부여해요.
사용자 수정:
사용자에 대한 OWNERSHIP 권한이 있는 역할만 SQL(ALTER USER)로 대부분의 사용자 속성을 수정할 수 있어요.
사용자 생성
이 섹션은 특정 계정에서 사용자를 만드는 방법을 설명해요.
참고(Note): Snowsight는 사용자를 만들 때 비밀번호를 지정해야 해요. CREATE USER 명령과 UserCollection.create Python API는 그렇지 않아요.
참고(Note): 조직 내 여러 계정에 접근할 수 있는 사용자를 만들려면 조직 사용자(Organization users)를 참고해요.
Snowsight 사용
- Snowsight에 로그인해요.
- 내비게이션 메뉴에서 Governance & security » Users & roles을 선택해요.
- + User을 선택해요.
- User Name 필드에 사용자의 고유 식별자를 입력해요. 사용자는 로그인 이름을 지정하지 않는 한 이 식별자로 Snowflake에 로그인해요.
- 선택적으로 Email 필드에 사용자의 이메일 주소를 지정해요.
- Password 및 Confirm Password 필드에 사용자의 비밀번호를 입력해요.
- 선택적으로 사용자를 만든 이유를 설명하는 코멘트를 추가해요.
- Force user to change password on first time login 체크박스를 선택한 상태로 두어 사용자가 로그인할 때 비밀번호를 바꾸도록 강제해요.
- 선택적으로 Advanced User Options을 선택해 사용자에 대한 추가 세부정보를 지정해요.
- Snowflake에 로그인할 때 User Name 대신 사용할 Login Name
- 로그인 후 나타나는 Display Name
- 사용자 프로필을 완성할 First Name 및 Last Name
- Default Role, Default Warehouse, Default Namespace
- Create User을 선택해요.
SQL 사용
CREATE USER 명령을 사용해 사용자를 만들어요.
중요(Important): 사용자를 만들 때 기본 역할을 할당하면 그 역할을 사용자에게 명시적으로 부여해야 해요. 예를 들어:
CREATE USER janesmith PASSWORD = 'abc123' DEFAULT_ROLE = myrole MUST_CHANGE_PASSWORD = TRUE;
GRANT ROLE myrole TO USER janesmith;
GRANT ROLE 명령으로 단일 사용자에게 여러 역할을 할당할 수 있다는 점을 주목해요. 웹 인터페이스는 현재 같은 기능을 지원하지 않아요.
Python 사용
UserCollection.create Python API를 사용해 사용자를 만들어요.
중요(Important): 사용자를 만들 때 기본 역할을 할당하면 그 역할을 사용자에게 명시적으로 부여해야 해요. 예를 들어:
from snowflake.core.user import Securable, User
my_user = User(
name="janesmith",
password="abc123",
default_role="myrole",
must_change_password=True)
root.users.create(my_user)
root.users['janesmith'].grant_role(role_type="ROLE", role=Securable(name='myrole'))
사용자 비활성화·활성화
사용자를 비활성화하면 사용자가 Snowflake에 로그인하지 못하게 돼요. 다음 인터페이스를 통해 사용자를 비활성화할 수 있어요.
Snowsight 사용
- Snowsight에 로그인해요.
- 내비게이션 메뉴에서 Governance & security » Users & roles을 선택해요.
- 비활성화하려는 사용자를 찾아 »Disable User을 선택해요.
- 열리는 확인 대화상자에서 Disable을 선택해요.
사용자를 활성화하려면 같은 단계를 따르되 Enable User을 선택해요.
SQL 사용
ALTER USER 명령을 사용해 사용자를 비활성화하거나 활성화해요. 예를 들어:
- 사용자 비활성화:
ALTER USER janesmith SET DISABLED = TRUE;
- 사용자 활성화:
ALTER USER janesmith SET DISABLED = FALSE;
Python 사용
UserResource.create_or_alter Python API를 사용해 사용자를 비활성화하거나 활성화해요. 예를 들어:
- 사용자 비활성화:
user_parameters = root.users["janesmith"].fetch()
user_parameters.disabled = True
root.users["janesmith"].create_or_alter(user_parameters)
- 사용자 활성화:
user_parameters = root.users["janesmith"].fetch()
user_parameters.disabled = False
root.users["janesmith"].create_or_alter(user_parameters)
사용자 잠금 해제
사용자 로그인이 5회 연속 실패하면 사용자는 일정 기간(현재 15분) 동안 계정에서 잠겨요. 기간이 지나면 시스템이 자동으로 잠금을 해제하고 사용자가 다시 로그인을 시도할 수 있어요.
시간이 지나기 전에 사용자를 잠금 해제하려면 ALTER USER 명령 또는 UserResource.create_or_alter Python API로 타이머를 재설정할 수 있어요.
다음 예시는 타이머를 0으로 재설정해 사용자 janesmith를 즉시 잠금 해제해요.
ALTER USER janesmith SET MINS_TO_UNLOCK = 0;
user_parameters = root.users["janesmith"].fetch()
user_parameters.mins_to_unlock = 0
root.users["janesmith"].create_or_alter(user_parameters)
팁(Tip): 단일 역할이 모든 Snowflake 사용자에 대한 OWNERSHIP 권한을 가진 경우 그 역할을 여러 사용자에게 부여할 것을 권장해요. 그러면 구성원 한 명이 잠겨도 다른 구성원이 그 사용자를 잠금 해제할 수 있어요.
사용자의 세션 파라미터 변경
- 사용자의 세션 파라미터를 보려면 다음 SQL 구문을 사용해요.
SHOW PARAMETERS [ LIKE '<pattern>' ] FOR USER <name>
- 사용자의 세션 파라미터를 변경하려면 다음 구문을 사용해요.
ALTER USER <name> SET <session_param> = <value>
예를 들어 사용자가 타임아웃 없이 Snowflake에 무기한 연결을 유지하도록 허용해요.
ALTER USER janesmith SET CLIENT_SESSION_KEEP_ALIVE = TRUE;
- 사용자의 세션 파라미터를 기본값으로 재설정하려면 다음 구문을 사용해요.
ALTER USER <name> UNSET <session_param>
기타 사용자 속성 수정
ALTER USER 명령 또는 UserResource.create_or_alter Python API로 다른 모든 사용자 속성을 수정할 수 있어요. Snowsight로 같은 사용자 속성 중 상당수를 수정할 수 있어요.
예를 들어:
- 사용자
janesmith의 성을Jones로 변경하려면:- SQL:
ALTER USER janesmith SET LAST_NAME = 'Jones';
- Python:
user_parameters = root.users["janesmith"].fetch()
user_parameters.last_name = "Jones"
root.users["janesmith"].create_or_alter(user_parameters)
-
Snowsight:
- Snowsight에 로그인해요.
- 내비게이션 메뉴에서 Governance & security » Users & roles을 선택해요.
- 편집하려는 사용자를 찾아 »Edit을 선택해요.
- Last Name 필드에 Jones를 입력해요.
- Save User을 선택해요.
-
사용자
janesmith의 기본 웨어하우스, 네임스페이스, 기본 역할, 보조 역할을 설정하거나 변경하려면:- SQL:
ALTER USER janesmith SET DEFAULT_WAREHOUSE = mywarehouse DEFAULT_NAMESPACE = mydatabase.myschema DEFAULT_ROLE = myrole DEFAULT_SECONDARY_ROLES = ('ALL');
- Python:
user_parameters = root.users["janesmith"].fetch()
user_parameters.default_warehouse = "mywarehouse"
user_parameters.default_namespace = "mydatabase.myschema"
user_parameters.default_role = "myrole"
user_parameters.default_secondary_roles = "ALL"
root.users["janesmith"].create_or_alter(user_parameters)
- Snowsight:
참고(Note): Snowsight로는 사용자의 기본 보조 역할을 설정할 수 없어요.
- [Snowsight에 로그인](/user-guide/ui-snowsight-gs#label-snowsight-getting-started-sign-in)해요.
- 내비게이션 메뉴에서 **Governance & security** » **Users & roles**을 선택해요.
- 편집하려는 사용자를 찾아 »**Edit**을 선택해요.
- **Advanced User Options**을 열고 관련 필드에 값을 입력해요.
- **Save User**을 선택해요.
사용자 보기
다음 인터페이스를 사용해 사용자에 대한 정보를 볼 수 있어요.
SQL 사용
DECRIBE USER 또는 SHOW USERS 명령을 사용해 하나 이상의 사용자에 대한 정보를 봐요.
예를 들어:
DESC USER janesmith;
Python 사용
사용자에 대한 정보를 얻으려면 UserResource.fetch Python API를 사용해요.
예를 들어:
my_user = root.users["janesmith"].fetch()
print(my_user.to_dict())
계정의 사용자를 나열하려면 UserCollection.iter Python API를 사용해요.
예를 들어:
users = root.users.iter(like="jane%")
for user in users:
print(user.name)
Snowsight 사용
- Snowsight에 로그인해요.
- 내비게이션 메뉴에서 Governance & security » Users & roles을 선택해요.
- 더 많은 세부정보를 보려는 사용자를 찾아요.
표시 이름, 상태, 마지막 로그인 시간, 소유 역할, 그리고 사용자가 다중 인증(MFA)을 설정했는지 여부를 검토할 수 있어요. 사용자에 코멘트가 있으면 위에 마우스를 올리면 볼 수 있어요.
- 선택적으로 사용자를 선택해 기본 설정, 사용자에 권한이 부여된 역할, 사용자에게 부여된 역할 같은 더 많은 세부정보를 봐요.
사용자 삭제
사용자를 삭제하면 Snowflake에서 사용자 자격 증명이 제거돼요.
중요(Important): 사용자를 삭제하면 그 사용자가 소유한 폴더, 워크시트, 대시보드에 접근할 수 없게 되고, 공유가 활성화되어 있지 않으면 다른 사용자로 이전되지 않아요.
View, View + Run, Edit 권한이 있는 공유 수신자는 할당된 권한을 유지하고 공유 폴더, 워크시트, 대시보드에 계속 접근할 수 있어요. 하지만 Edit 권한이 있는 사용자만 공유 폴더, 워크시트, 대시보드를 수정하거나 삭제할 수 있어요. 소유자를 삭제하기 전에 적어도 한 명의 다른 사용자에게 Edit 권한을 주지 않으면 그 소유자의 폴더, 워크시트, 대시보드를 삭제할 수 없어요.
삭제된 사용자의 워크시트에 공유가 활성화되어 있지 않으면 관리자가 그 사용자가 소유한 최대 500개의 워크시트를 복구할 수 있어요.
주의(Caution): Classic Console의 워크시트는 영구적으로 삭제되며, 다른 사용자와 이전에 공유되지 않았던 대시보드는 접근할 수 없게 돼요.
사용자가 만든 테이블이나 뷰 같은 객체는 삭제되지 않아요. 객체는 생성 당시 사용자의 활성 역할이 소유하기 때문이에요. 역할 계층에서 같은 역할이나 더 높은 역할을 할당받은 다른 사용자가 그 객체를 관리하거나 소유권을 다른 역할로 이전할 수 있어요.
Snowsight 사용
- Snowsight에 로그인해요.
- 내비게이션 메뉴에서 Governance & security » Users & roles을 선택해요.
- 삭제하려는 사용자를 찾아 »Drop을 선택해요.
- 열리는 확인 대화상자에서 Drop User을 선택해요.
SQL 사용
DROP USER 명령을 사용해 사용자를 삭제해요.
DROP USER janesmith;
Python 사용
사용자를 삭제하려면 UserResource.drop Python API를 사용해요.
root.users["janesmith"].drop()
더 알아보기 (Learn more)
- 접근 제어 개요 — 역할과 권한
- 에이전트 신원 — SERVICE_AGENT 및 에이전트 식별
- 다중 인증(MFA) — MFA 등록·사용