CREATE USER
ユーザーアカウントを作成します。user accounts。
構文:
ON CLUSTER
句を使用すると、クラスタ内でユーザーを作成できます。詳しくはDistributed 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
で識別する場合、ハッシュは'パスワード'と'ソルト'の連結から計算される必要があります。 -
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
ドメイン内のすべてのホストをフィルタリングします。
ホストを指定するもう1つの方法は、ユーザー名の後に@
構文を使用することです。例:
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
句は、認証方法が指定されている場合にのみ指定できます。クエリに認証方法が指定されていない場合は、すべての既存の認証方法に適用されます。
例:
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
このユーザーからprivilegesを受け取ることができるユーザーまたはロールを指定します。このユーザーにも必要なすべてのアクセスが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
アカウントのユーザーに特権を付与できるようにします。