メインコンテンツまでスキップ
メインコンテンツまでスキップ

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

  1. 次のユーザー名はname1で、パスワードは必要ありません - これは明らかにあまり安全ではありません。

  2. プレーンテキストのパスワードを指定するには:

    ヒント

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

  3. 最も一般的な選択肢は、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で識別する場合、ハッシュは'パスワード'と'ソルト'の連結から計算される必要があります。

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

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

  5. bcrypt_passwordはパスワードを保存するための最も安全なオプションです。これは、パスワードハッシュが漏洩した場合でもブルートフォース攻撃に対して耐性のあるbcryptアルゴリズムを使用します。

    この方法では、パスワードの長さは72文字に制限されます。ハッシュを計算し、パスワードを検証するために必要な計算と時間の量を定義するbcryptの作業係数パラメータは、サーバー設定で変更できます:

    作業係数は4から31の間である必要があり、デフォルト値は12です。

  6. パスワードタイプも省略できます:

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

    利用可能なパスワードタイプは次のとおりです: plaintext_password, sha256_password, double_sha1_password

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

注意事項:

  1. 古いバージョンのClickHouseは複数の認証方法の構文をサポートしていない場合があります。そのため、ClickHouseサーバーにそのようなユーザーが含まれていて、サポートしていないバージョンにダウングレードすると、そのようなユーザーは使用不可能になり、一部のユーザー関連の操作が壊れます。ダウングレードを適切に行うには、ダウングレードする前にすべてのユーザーを単一の認証方法を含むように設定する必要があります。または、適切な手順を踏まずにサーバーをダウングレードした場合、故障したユーザーを削除する必要があります。
  2. セキュリティ上の理由から、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アドレスとそのマスク)のみを指定してください。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ドメイン内のすべてのホストをフィルタリングします。

ホストを指定するもう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。これは、user1GRANT OPTIONで付与された特権を持っている場合、user2を除いて誰にでもその特権を付与できることを意味します。

Examples

ユーザーアカウントmiraをパスワードqwertyで保護します。

miraはClickHouseサーバーが実行されているホストでクライアントアプリを起動する必要があります。

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

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

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

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

ユーザーアカウントjohnを作成し、彼にjackアカウントのユーザーに特権を付与できるようにします。