CREATE USER
ユーザーアカウントを作成します。
構文:
ON CLUSTER 句を使用すると、クラスター全体にユーザーを作成できます。詳しくは Distributed DDL を参照してください。
識別
ユーザーを識別する方法には、以下のようなものがあります:
IDENTIFIED WITH no_passwordIDENTIFIED 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 Cloud では、パスワードは既定で次の複雑性要件を満たす必要があります。
- 12文字以上であること
- 少なくとも1文字の数字を含むこと
- 少なくとも1文字の大文字を含むこと
- 少なくとも1文字の小文字を含むこと
- 少なくとも1文字の特殊文字を含むこと
例
-
次のユーザー名は
name1であり、パスワードは不要です。つまり、当然ながらセキュリティはほとんど確保されません。 -
プレーンテキストのパスワードを指定するには:
ヒントパスワードは
/var/lib/clickhouse/accessの SQL テキストファイルに保存されるため、plaintext_passwordを使うのは推奨されません。代わりに、次の例で示すようにsha256_passwordを使用してください。 -
最も一般的なオプションは、SHA-256 でハッシュされたパスワードを使用する方法です。
IDENTIFIED WITH sha256_passwordを指定すると、ClickHouse がパスワードをハッシュします。例えば:これで
name3ユーザーはmy_passwordを使ってログインできますが、パスワードは上記のハッシュ値として保存されます。次の SQL ファイルが/var/lib/clickhouse/accessに作成され、サーバー起動時に実行されます。ヒントすでに特定のユーザー名に対するハッシュ値と、それに対応する salt 値を作成済みの場合は、
IDENTIFIED WITH sha256_hash BY 'hash'またはIDENTIFIED WITH sha256_hash BY 'hash' SALT 'salt'を使用できます。SALTを使ってsha256_hashで識別する場合、ハッシュは 'password' と 'salt' を連結した値から計算する必要があります。 -
double_sha1_passwordは通常は不要ですが、(MySQL インターフェイスのような)それを必要とするクライアントを扱う際に便利です。ClickHouse は次のクエリを生成して実行します。
-
bcrypt_passwordはパスワードを保存する方法として最も安全なオプションです。bcrypt アルゴリズムを使用しており、パスワードハッシュが漏洩した場合でも総当たり攻撃に対して強固です。この方法では、パスワード長は 72 文字に制限されます。 ハッシュの計算およびパスワード検証に必要な計算量と時間を定義する bcrypt のワークファクター (work factor) パラメータは、サーバー設定で変更できます。
ワークファクターは 4〜31 の範囲で指定でき、デフォルト値は 12 です。
注記高頻度で認証が発生するアプリケーションでは、 高いワークファクター時の bcrypt の計算オーバーヘッドを考慮し、 別の認証方式の利用も検討してください。
-
パスワードのタイプを省略することもできます。
この場合、ClickHouse はサーバー設定で指定されたデフォルトのパスワードタイプを使用します。
利用可能なパスワードタイプは、
plaintext_password、sha256_password、double_sha1_passwordです。 -
複数の認証方式を指定することもできます。
Notes:
- 古いバージョンの ClickHouse では、複数の認証方式を用いる構文をサポートしていない場合があります。そのため、ClickHouse サーバーにそのようなユーザーが存在した状態で、これをサポートしないバージョンにダウングレードすると、そのユーザーは利用不能になり、一部のユーザー関連の操作が失敗します。正常にダウングレードするには、ダウングレード前にすべてのユーザーが単一の認証方式のみを持つように設定しておく必要があります。あるいは、適切な手順を踏まずにサーバーをダウングレードしてしまった場合は、問題のあるユーザーを削除する必要があります。
- セキュリティ上の理由から、
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やhost_regexpを使用すると追加のレイテンシが発生する可能性があるため、HOST IP要素(IP アドレスとそのマスク)のみを指定することを推奨します。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構文と等価です。
ClickHouse は user_name@'address' 全体を 1 つのユーザー名として扱います。そのため、技術的には同じ 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 のように指定します。これは、user1 が GRANT OPTION 付きでいくつかの権限を付与されている場合、それらの権限を user2 を除く全員に付与できることを意味します。
さらに詳しくは GRANT ステートメントの権限に関する項目 と GRANT OPTION の説明 を参照してください。
例
パスワード qwerty で保護されたユーザーアカウント mira を作成します:
mira は、ClickHouse サーバーが稼働しているホスト上でクライアントアプリケーションを起動する必要があります。
ユーザーアカウント john を作成し、そのアカウントにロールを割り当て、これらのロールをデフォルトとして設定します。
ユーザーアカウント john を作成し、その後付与するすべてのロールをデフォルトロールとして設定します:
将来 john にロールを割り当てると、それらは自動的にデフォルトロールになります。
ユーザーアカウント john を作成し、将来割り当てられるロールのうち role1 と role2 以外はすべて自動的にデフォルトロールになるように設定します:
ユーザーアカウント john を作成し、john が自分の権限を jack アカウントのユーザーに付与できるようにします:
クエリパラメータを使用してユーザーアカウント john を作成します。