Skip to main content
Edit this page

CREATE USER

ユーザーアカウントを作成します。

構文:

CREATE USER [IF NOT EXISTS | OR REPLACE] name1 [, name2 [,...]] [ON CLUSTER cluster_name]
[NOT IDENTIFIED | 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]
[, {[{plaintext_password | sha256_password | sha256_hash | ...}] BY {'password' | 'hash'}} | {ldap SERVER 'server_name'} | {...} | ... [,...]]]
[HOST {LOCAL | NAME 'name' | REGEXP 'name_regexp' | IP 'address' | LIKE 'pattern'} [,...] | ANY | NONE]
[VALID UNTIL datetime]
[IN access_storage_type]
[DEFAULT ROLE role [,...]]
[DEFAULT DATABASE database | NONE]
[GRANTEES {user | role | ANY | NONE} [,...] [EXCEPT {user | role} [,...]]]
[SETTINGS variable [= value] [MIN [=] min_value] [MAX [=] max_value] [READONLY | WRITABLE] | PROFILE 'profile_name'] [,...]

ON CLUSTER句はクラスター上でユーザーを作成することを可能にします。分散DDLを参照してください。

識別

ユーザーの識別には複数の方法があります:

  • IDENTIFIED WITH no_password
  • IDENTIFIED WITH plaintext_password BY 'qwerty'
  • IDENTIFIED WITH sha256_password BY 'qwerty' または IDENTIFIED BY 'password'
  • IDENTIFIED WITH sha256_hash BY 'hash' または IDENTIFIED WITH sha256_hash BY 'hash' SALT 'salt'
  • IDENTIFIED WITH double_sha1_password BY 'qwerty'
  • IDENTIFIED WITH double_sha1_hash BY 'hash'
  • IDENTIFIED WITH bcrypt_password BY 'qwerty'
  • IDENTIFIED WITH bcrypt_hash BY 'hash'
  • IDENTIFIED WITH ldap SERVER 'server_name'
  • IDENTIFIED WITH kerberos または IDENTIFIED WITH kerberos REALM 'realm'
  • IDENTIFIED WITH ssl_certificate CN 'mysite.com:user'
  • IDENTIFIED WITH ssh_key BY KEY 'public_key' TYPE 'ssh-rsa', KEY 'another_public_key' TYPE 'ssh-ed25519'
  • IDENTIFIED WITH http SERVER 'http_server' または IDENTIFIED WITH http SERVER 'http_server' SCHEME 'basic'
  • IDENTIFIED BY 'qwerty'

パスワードの複雑さの要件はconfig.xmlで編集することができます。以下は、パスワードに少なくとも12文字を要求し、1つの数字を含む必要がある例です。各パスワードの複雑さルールは、パスワードと一致する正規表現とルールの説明が必要です。

<clickhouse>
<password_complexity>
<rule>
<pattern>.{12}</pattern>
<message>少なくとも12文字である必要があります</message>
</rule>
<rule>
<pattern>\p{N}</pattern>
<message>少なくとも1つの数字を含む必要があります</message>
</rule>
</password_complexity>
</clickhouse>
Note

ClickHouse Cloudでは、デフォルトでパスワードは次の複雑さ要件を満たす必要があります:

  • 少なくとも12文字である
  • 少なくとも1つの数字を含む
  • 少なくとも1つの大文字を含む
  • 少なくとも1つの小文字を含む
  • 少なくとも1つの特殊文字を含む

  1. 次のユーザー名はname1で、パスワードは不要です - これは明らかにセキュリティを提供しません:

    CREATE USER name1 NOT IDENTIFIED
  2. 平文パスワードを指定するには:

    CREATE USER name2 IDENTIFIED WITH plaintext_password BY 'my_password'
    Tip

    パスワードはSQLテキストファイルに/var/lib/clickhouse/accessに保存されるので、plaintext_passwordを使用するのは良い考えではありません。代わりに次の例で示すようにsha256_passwordを試してください...

  3. 最も一般的なオプションは、SHA-256を使用してハッシュされたパスワードを使用することです。IDENTIFIED WITH sha256_passwordを指定すると、ClickHouseはパスワードをハッシュしてくれます。たとえば:

    CREATE USER name3 IDENTIFIED WITH sha256_password BY 'my_password'

    name3ユーザーは今 my_passwordを使ってログインでき、パスワードは上記のハッシュされた値として保存されます。次のSQLファイルが/var/lib/clickhouse/accessに作成され、サーバー起動時に実行されます:

    /var/lib/clickhouse/access $ cat 3843f510-6ebd-a52d-72ac-e021686d8a93.sql
    ATTACH USER name3 IDENTIFIED WITH sha256_hash BY '0C268556C1680BEF0640AAC1E7187566704208398DA31F03D18C74F5C5BE5053' SALT '4FB16307F5E10048196966DD7E6876AE53DE6A1D1F625488482C75F14A5097C7';
    Tip

    ユーザー名に対して既にハッシュ値と対応するソルト値を作成している場合、IDENTIFIED WITH sha256_hash BY 'hash'IDENTIFIED WITH sha256_hash BY 'hash' SALT 'salt'を使用できます。sha256_hashの識別にSALTを使用する場合 - ハッシュは'password'と'salt'の結合から計算される必要があります。

  4. double_sha1_passwordは通常必要ありませんが、MySQLインターフェースのようにそれを必要とするクライアントで作業する場合に便利です:

    CREATE USER name4 IDENTIFIED WITH double_sha1_password BY 'my_password'

    ClickHouseは次のクエリを生成し実行します:

    CREATE USER name4 IDENTIFIED WITH double_sha1_hash BY 'CCD3A959D6A004B9C3807B728BC2E55B67E10518'
  5. bcrypt_passwordはパスワードを保存する最も安全なオプションです。これは、bcryptアルゴリズムを使用しており、パスワードハッシュが侵害された場合でもブルートフォース攻撃に対して耐性があります。

    CREATE USER name5 IDENTIFIED WITH bcrypt_password BY 'my_password'

    この方法ではパスワードの長さは72文字に制限されています。bcryptのワークファクターパラメーターは、ハッシュの計算とパスワードの検証に必要な計算と時間の量を定義しており、サーバー設定で変更できます:

    <bcrypt_workfactor>12</bcrypt_workfactor>

    ワークファクターは4から31の間でなければならず、デフォルト値は12です。

  6. パスワードの種類を省略することもできます:

    CREATE USER name6 IDENTIFIED BY 'my_password'

    この場合、ClickHouseはサーバー設定で指定されたデフォルトのパスワードタイプを使用します:

    <default_password_type>sha256_password</default_password_type>

    利用可能なパスワードタイプは、plaintext_passwordsha256_passworddouble_sha1_passwordです。

  7. 複数の認証方法を指定できます:

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

注意事項:

  1. 古いバージョンのClickHouseでは、複数の認証方法の構文がサポートされていない可能性があります。したがって、ClickHouseサーバーにそのようなユーザーが存在し、サポートされていないバージョンにダウングレードされた場合、そのようなユーザーは使用不能になり、一部のユーザー関連操作が壊れる可能性があります。ダウングレードするには、事前にすべてのユーザーを1つの認証方法に設定する必要があります。代替案として、サーバーが適切な手順なしでダウングレードされた場合、問題のあるユーザーを削除する必要があります。
  2. セキュリティ上の理由から、no_passwordは他の認証方法と共存できません。したがって、クエリで認証方法が唯一の場合にのみno_passwordを指定できます。

ユーザーホスト

ユーザーホストは、ClickHouseサーバーに接続を確立できるホストです。ホストはHOSTクエリセクションで次の方法で指定できます:

  • HOST IP 'ip_address_or_subnetwork' — 指定されたIPアドレスまたはサブネットワークからのみユーザーはClickHouseサーバーに接続できます。例: HOST IP '192.168.0.0/16', HOST IP '2001:DB8::/32'。本番環境での使用には、HOST IP要素(IPアドレスとそのマスク)のみを指定してください。hosthost_regexpを使用すると余計な遅延が生じる可能性があるためです。
  • HOST ANY — ユーザーはどこからでも接続できます。これはデフォルトのオプションです。
  • HOST LOCAL — ユーザーはローカルのみ接続できます。
  • HOST NAME 'fqdn' — ユーザーホストはFQDNとして指定できます。たとえば、HOST NAME 'mysite.com'
  • HOST REGEXP 'regexp' — ユーザーホストを指定する際にpcre正規表現を使用できます。たとえば、HOST REGEXP '.*\.mysite\.com'
  • HOST LIKE 'template' — ユーザーホストをフィルターするためにLIKE演算子を使用することができます。たとえば、HOST LIKE '%'HOST ANYと同じ意味になります。HOST LIKE '%.mysite.com'mysite.comドメイン内のすべてのホストをフィルタリングします。

ホストを指定する別の方法は、ユーザー名の後に@構文を使用することです。例:

  • CREATE USER mira@'127.0.0.1'HOST IP構文と同等です。
  • CREATE USER mira@'localhost'HOST LOCAL構文と同等です。
  • CREATE USER mira@'192.168.%.%'HOST LIKE構文と同等です。
Tip

ClickHouseはuser_name@'address'を一つのユーザー名として扱います。そのため、技術的には、同じuser_name@の後の異なる構成を持つ複数のユーザーを作成することができます。しかし、それを行うことはお勧めしません。

VALID UNTIL句

認証方法の有効期限と、オプションでその時刻を指定することができます。文字列をパラメータとして受け取ります。日付と時刻にはYYYY-MM-DD [hh:mm:ss] [timezone]形式を使用することを推奨します。既定では、このパラメータは'infinity'に設定されています。 VALID UNTIL句は、クエリで認証方法が指定されている場合に限り指定可能です。認証方法が指定されていない場合、VALID UNTIL句は既存のすべての認証方法に適用されます。

例:

  • CREATE USER name1 VALID UNTIL '2025-01-01'
  • CREATE USER name1 VALID UNTIL '2025-01-01 12:00:00 UTC'
  • CREATE USER name1 VALID UNTIL 'infinity'
  • CREATE USER name1 VALID UNTIL '2025-01-01 12:00:00 `Asia/Tokyo`'
  • CREATE USER name1 IDENTIFIED WITH plaintext_password BY 'no_expiration', bcrypt_password BY 'expiration_set' VALID UNTIL '2025-01-01''

GRANTEES句

このユーザーが持つ権限を付与できるユーザーまたはロールを指定します。このユーザーもまた、GRANT OPTIONで付与されたすべての必要なアクセスを持っている場合にのみです。GRANTEES句のオプション:

  • user — このユーザーが権限を付与できるユーザーを指定します。
  • role — このユーザーが権限を付与できるロールを指定します。
  • ANY — このユーザーは誰にでも権限を付与することができます。これはデフォルト設定です。
  • NONE — このユーザーは誰にも権限を付与できません。

EXCEPT式を使用して、任意のユーザーまたはロールを除外できます。たとえば、CREATE USER user1 GRANTEES ANY EXCEPT user2と言えば、user1GRANT OPTION付きでいくつかの権限を持っている場合、それらの権限をuser2を除く誰にでも付与できるという意味です。

qwertyというパスワードで保護されたユーザーアカウントmiraを作成します:

CREATE USER mira HOST IP '127.0.0.1' IDENTIFIED WITH sha256_password BY 'qwerty';

miraはClickHouseサーバーが稼働しているホストでクライアントアプリケーションを起動する必要があります。

ユーザーアカウントjohnを作成し、ロールを割り当て、それらをデフォルトにします:

CREATE USER john DEFAULT ROLE role1, role2;

将来のすべてのロールをデフォルトにするユーザーアカウントjohnを作成します:

CREATE USER john DEFAULT ROLE ALL;

将来的にjohnにロールが割り当てられると、それが自動的にデフォルトになります。

ユーザーアカウントjohnを作成し、role1role2を除く将来のすべてのロールをデフォルトにし:

CREATE USER john DEFAULT ROLE ALL EXCEPT role1, role2;

ユーザーアカウントjohnを作成し、自分の権限をjackアカウントを持つユーザーに付与できるようにします:

CREATE USER john GRANTEES jack;