ALTER USER

ALTER USER

ClickHouse 사용자 계정을 변경해요.

출처: 문서

본문

Syntax:

ALTER USER [IF EXISTS] name1 [RENAME TO new_name |, name2 [,...]]
    [ON CLUSTER cluster_name]
    [{VALID UNTIL datetime | VALID FOR interval}]
    [NOT IDENTIFIED | RESET AUTHENTICATION METHODS TO NEW | {IDENTIFIED | ADD IDENTIFIED} {[WITH {plaintext_password | sha256_password | sha256_hash | double_sha1_password | double_sha1_hash}] BY {'password' | 'hash'}} | WITH NO_PASSWORD | {WITH ldap SERVER 'server_name'} | {WITH kerberos [REALM 'realm']} | {WITH ssl_certificate CN 'common_name' | SAN 'TYPE:subject_alt_name'} | {WITH ssh_key BY KEY 'public_key' TYPE 'ssh-rsa|...'} | {WITH http SERVER 'server_name' [SCHEME 'Basic']} [{VALID UNTIL datetime | VALID FOR interval}] [GRANTS (privilege ON object [,...])]
    [, {[{plaintext_password | sha256_password | sha256_hash | ...}] BY {'password' | 'hash'}} | {ldap SERVER 'server_name'} | {...} | ... [,...]]]
    [[ADD | DROP] HOST {LOCAL | NAME 'name' | REGEXP 'name_regexp' | IP 'address' | LIKE 'pattern'} [,...] | ANY | NONE]
    [IN access_storage_type]
    [DEFAULT ROLE role [,...] | ALL | ALL EXCEPT role [,...] ]
    [DEFAULT DATABASE database | NONE]
    [GRANTEES {user | role | ANY | NONE} [,...] [EXCEPT {user | role} [,...]]]
    [DROP ALL PROFILES]
    [DROP ALL SETTINGS]
    [DROP SETTINGS variable [,...] ]
    [DROP PROFILES 'profile_name' [,...] ]
    [ADD|MODIFY SETTINGS variable [=value] [MIN [=] min_value] [MAX [=] max_value] [READONLY|WRITABLE|CONST|CHANGEABLE_IN_READONLY] [,...] ]
    [SET variable [=value] [MIN [=] min_value] [MAX [=] max_value] [READONLY|WRITABLE|CONST|CHANGEABLE_IN_READONLY] [,...] ]
    [ADD PROFILES 'profile_name' [,...] ]

ALTER USER를 사용하려면 ALTER USER 권한이 있어야 합니다.

SET variable = valueMODIFY SETTING variable = value의 별칭이에요. 나머지를 유지하면서 단일 설정을 제자리에서 변경합니다. 전체 설정 목록을 교체하고 상속된(부모) 프로필도 모두 제거하는 일반 SETTINGS 절보다는 그것(또는 MODIFY SETTING)을 선호하세요.

GRANTEES Clause

이 사용자가 모든 필요한 접근을 GRANT OPTION으로 부여받았다는 조건으로, 이 사용자로부터 권한을 받을 수 있는 사용자나 역할을 지정해요. GRANTEES 절의 옵션:

  • user — 이 사용자가 권한을 부여할 수 있는 사용자를 지정해요.
  • role — 이 사용자가 권한을 부여할 수 있는 역할을 지정해요.
  • ANY — 이 사용자는 누구에게나 권한을 부여할 수 있어요. 기본 설정입니다.
  • NONE — 이 사용자는 누구에게도 권한을 부여할 수 없어요.

EXCEPT 표현식으로 모든 사용자나 역할을 제외할 수 있어요. 예: ALTER USER user1 GRANTEES ANY EXCEPT user2. 이것은 user1GRANT OPTION으로 부여된 일부 권한을 가지면 user2를 제외한 누구에게나 그 권한을 부여할 수 있다는 뜻입니다.

Examples

할당된 역할을 기본 역할로 설정:

ALTER USER user DEFAULT ROLE role1, role2

역할이 이전에 사용자에게 할당되지 않았다면 ClickHouse는 예외를 던집니다.

할당된 모든 역할을 기본으로 설정:

ALTER USER user DEFAULT ROLE ALL

역할이 미래에 사용자에게 할당되면 자동으로 기본이 됩니다.

role1role2를 제외하고 할당된 모든 역할을 기본으로 설정:

ALTER USER user DEFAULT ROLE ALL EXCEPT role1, role2

john 계정의 사용자가 jack 계정의 사용자에게 자신의 권한을 부여하도록 허용:

ALTER USER john GRANTEES jack;

기존을 유지하면서 사용자에게 새 인증 방법 추가:

ALTER USER user1 ADD IDENTIFIED WITH plaintext_password by '1', bcrypt_password by '2', plaintext_password by '3'

참고:

  1. 이전 버전의 ClickHouse는 여러 인증 방법의 문법을 지원하지 않을 수 있어요. 따라서 ClickHouse 서버에 그러한 사용자가 있고 그것을 지원하지 않는 버전으로 다운그레이드되면, 그러한 사용자는 사용할 수 없게 되고 일부 사용자 관련 연산이 깨집니다. 원활하게 다운그레이드하려면 다운그레이드 전에 모든 사용자가 단일 인증 방법을 포함하도록 설정해야 합니다. 또는 적절한 절차 없이 서버를 다운그레이드했다면 문제가 있는 사용자를 버려야 합니다.
  2. 보안상 이유로 no_password는 다른 인증 방법과 공존할 수 없습니다. 때문에 no_password 인증 방법을 ADD할 수 없습니다. 아래 쿼리는 오류를 던집니다:
ALTER USER user1 ADD IDENTIFIED WITH no_password

사용자의 인증 방법을 버리고 no_password에 의존하려면 아래 교체 형태로 지정해야 합니다.

인증 방법을 재설정하고 쿼리에 지정된 것들을 추가(선행 IDENTIFIED가 ADD 키워드 없이 오는 효과):

ALTER USER user1 IDENTIFIED WITH plaintext_password by '1', bcrypt_password by '2', plaintext_password by '3'

인증 방법을 재설정하고 가장 최근에 추가된 것을 유지:

ALTER USER user1 RESET AUTHENTICATION METHODS TO NEW

사용자의 기본 데이터베이스 변경:

ALTER USER user1 DEFAULT DATABASE database1

DEFAULT DATABASE NONE은 사용자의 기본 데이터베이스를 지웁니다. NONE이라는 이름의 데이터베이스를 사용하려면 백틱으로 이름을 인용하세요:

DEFAULT DATABASE `NONE`

VALID UNTIL Clause

인증 방법의 만료 날짜와 선택적으로 시간을 지정할 수 있게 해줘요. 파라미터로 문자열을 받습니다. datetime은 YYYY-MM-DD [hh:mm:ss] [timezone] 형식을 사용하는 것이 좋아요. 기본적으로 이 파라미터는 'infinity'와 같습니다. 허용된 기한 범위는 1900-01-01 00:00:00 UTC부터 9999-12-31 09:59:59 UTC까지입니다 — 이는 모든 시간대에서 9999년 안에 유지되는 가장 늦은 순간이라, 저장된 순간이 렌더링될 때 클램프되지 않습니다. 과거의 기한은 자격 증명이 이미 만료되었음을 의미해요. 1970-01-01 00:00:01 UTC 이전의 기한은 "이미 만료" 표시로만 허용됩니다. 유닉스 에포크 후 1초(1970-01-01 00:00:01 UTC)인 가장 작은 만료 순간으로 정규화되므로, SHOW CREATE USER는 당신이 쓴 기한 대신 그 순간을 보고합니다. 그 순간부터의 기한은 정확히 저장됩니다.

기한은 절대 순간으로 저장되지만, SHOW CREATE USERsystem.users는 그것을 서버 또는 세션 시간대에서 렌더링하므로, 저장된 같은 순간이 다르게 구성된 서버에서 다른 wall-clock 텍스트로 나타납니다. 예를 들어 위에서 정규화된 만료 순간은 UTC 서버에서는 1970-01-01 00:00:01로, Pacific/Kiritimati 서버에서는 1970-01-01 14:00:01로 렌더링됩니다. 집행은 항상 저장된 순간을 사용하지 그 렌더링을 사용하지 않습니다.

절의 배치는 그것이 적용되는 인증 방법을 결정합니다:

  • IDENTIFIED 절 이전(또는 쿼리가 인증 방법을 전혀 지정하지 않을 때): 기한은 사용자의 모든 인증 방법에 적용되는 사용자 수준 기한이에요.
  • 인증 방법 이후: 기한은 그 방법에만 적용됩니다. 따라서 전체 IDENTIFIED 목록 뒤에 쓰여진 절은 마지막 방법에만 바인딩되고, 앞선 방법은 만료되지 않습니다.

Examples:

  • ALTER USER name1 VALID UNTIL '2025-01-01'
  • ALTER USER name1 VALID UNTIL '2025-01-01 12:00:00 UTC'
  • ALTER USER name1 VALID UNTIL 'infinity'
  • ALTER USER name1 VALID UNTIL '2025-01-01' IDENTIFIED WITH plaintext_password BY 'password_1', bcrypt_password BY 'password_2' — 사용자 수준 기한이 두 방법 모두에 적용됩니다.
  • ALTER USER name1 IDENTIFIED WITH plaintext_password BY 'no_expiration', bcrypt_password BY 'expiration_set' VALID UNTIL '2025-01-01' — 기한은 bcrypt_password 방법에만 적용됩니다; plaintext_password는 만료되지 않아요.

VALID FOR Clause

VALID FOR 절은 VALID UNTIL의 편리한 축약형이에요. 절대 날짜와 시간 대신 interval을 받고, 만료 기한은 쿼리가 실행되는 순간의 현재 시간에 그 간격을 더해 계산됩니다. 결과는 VALID UNTIL 형태로 저장되므로 SHOW CREATE USER는 항상 해석된 절대 기한을 표시합니다. VALID UNTIL과 같은 배치 규칙을 따릅니다. IDENTIFIED 이전(또는 인증 방법 없이)이면 모든 방법에 적용되는 사용자 수준 기한이고, 인증 방법 이후에는 그 방법에만 적용됩니다. 기한은 초 단위로 저장되고 집행되므로, 초 단위 미만 간격(NANOSECOND, MICROSECOND, MILLISECOND)은 거부됩니다. 허용되는 가장 작은 단위는 SECOND입니다. 음수 간격은 자격 증명을 이미 만료로 표시하는 방법으로 허용됩니다. 결과 기한이 1970-01-01 00:00:01 UTC 이전이면 해당 가장 작은 만료 순간으로 정규화되며, VALID UNTIL에서 설명한 대로 서버 또는 세션 시간대에서 렌더링되어 SHOW CREATE USER가 그것을 보고합니다.

Examples:

  • ALTER USER name1 VALID FOR INTERVAL 1 DAY
  • ALTER USER name1 VALID FOR INTERVAL 3 MONTH
  • ALTER USER name1 VALID FOR INTERVAL 30 DAY IDENTIFIED WITH plaintext_password BY 'password_1', bcrypt_password BY 'password_2' — 사용자 수준 기한이 두 방법 모두에 적용됩니다.
  • ALTER USER name1 IDENTIFIED WITH plaintext_password BY 'no_expiration', bcrypt_password BY 'expiration_set' VALID FOR INTERVAL 30 DAY — 기한은 bcrypt_password 방법에만 적용됩니다; plaintext_password는 만료되지 않아요.

GRANTS Clause

특정 인증 방법으로 인증된 세션에 사용 가능한 접근 권한을 제한할 수 있게 해줘요. 자세한 내용은 CREATE USER의 GRANTS 절을 참고하세요.

ADD IDENTIFIED와 함께 이것은 애플리케이션용 토큰을 만드는 편리한 방법을 제공합니다 — 만료 날짜와 제한된 권한 집합을 가진 추가 자격 증명입니다.

Example:

  • ALTER USER name1 ADD IDENTIFIED WITH plaintext_password BY 'app_token' VALID UNTIL '2026-12-31' GRANTS (SELECT ON db.table, INSERT ON db.table)

더 알아보기 (Learn more)