CREATE USER
Creates ユーザーアカウント.
Syntax:
ON CLUSTER
句は、クラスター上でユーザーを作成することを許可します。詳しくは 分散DDL を参照してください。
Identification
ユーザーの識別にはいくつかの方法があります:
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 Cloud では、デフォルトでパスワードは以下の複雑性要件を満たす必要があります:
- 12文字以上であること
- 少なくとも1つの数値を含むこと
- 少なくとも1つの大文字を含むこと
- 少なくとも1つの小文字を含むこと
- 少なくとも1つの特殊文字を含むこと
Examples
-
次のユーザー名は
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
に作成され、サーバー起動時に実行されます:ヒントすでにユーザー名のハッシュ値と対応するソルト値を作成した場合は、
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の作業ファクターのパラメータは、サーバー設定で変更できます:
作業ファクターは4から31の間でなければならず、デフォルト値は12です。
-
パスワードの型も省略可能です:
この場合、ClickHouse はサーバー設定で指定されたデフォルトのパスワードタイプを使用します:
利用可能なパスワードタイプは:
plaintext_password
,sha256_password
,double_sha1_password
です。 -
複数の認証メソッドを指定できます:
注意:
- ClickHouse の古いバージョンでは複数の認証方法の構文がサポートされていない場合があります。そのため、ClickHouse サーバーにそのようなユーザーが存在し、サポートされていないバージョンにダウングレードされると、そのユーザーは使用できなくなり、いくつかのユーザー関連の操作が壊れてしまいます。ダウングレードをスムーズに行うためには、ダウングレード前にすべてのユーザーを単一の認証方式に設定する必要があります。そうでない場合、サーバーが適切な手順なしにダウングレードされた場合は、その不具合のあるユーザーを削除する必要があります。
- 複数の認証メソッドのためのセキュリティ上、
no_password
は他の認証メソッドと共存することはできません。そのため、no_password
はクエリ内で唯一の認証方式である場合にのみ指定できます。
User Host
ユーザーのホストとは、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アドレスおよびそのマスク)のみを指定してください。host
とhost_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
構文と同等です。
ClickHouse は user_name@'address'
をユーザー名全体として扱います。したがって、技術的には同じ user_name
で異なる構文を持つ複数のユーザーを作成できますが、それは推奨しません。
VALID UNTIL Clause
検証メソッドの有効期限を指定することができます。このクエリは、パラメータとして文字列を受け取ります。日付の形式は 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 Clause
このユーザーから 権限 を受け取ることが許可されているユーザーまたはロールを指定します。このユーザーには、GRANT OPTION で必要なアクセスが付与されています。GRANTEES
句のオプション:
user
— このユーザーが権限を付与できるユーザーを指定します。role
— このユーザーが権限を付与できるロールを指定します。ANY
— このユーザーは誰にでも権限を付与できます。デフォルトの設定です。NONE
— このユーザーは権限を一切付与できません。
EXCEPT
式を使うことで任意のユーザーやロールを除外できます。例えば、CREATE USER user1 GRANTEES ANY EXCEPT user2
。これは、user1
が GRANT OPTION
でいくつかの権限を持っている場合、user2
を除く誰にでもその権限を付与できることを意味します。
Examples
ユーザーアカウント mira
を、パスワード qwerty
で保護して作成します:
mira
は、ClickHouse サーバーが稼働するホストでクライアントアプリを起動する必要があります。
ユーザーアカウント john
を作成し、ロールを割り当て、そしてこれらのロールをデフォルトにします:
ユーザーアカウント john
を作成し、今後のすべてのロールをデフォルトにします:
将来的に john
に割り当てられたロールは自動的にデフォルトになります。
ユーザーアカウント john
を作成し、今後のすべてのロールをデフォルトにし、role1
と role2
を除外します:
ユーザーアカウント john
を作成し、jack
アカウントを持つユーザーに権限を付与できるようにします: