users.xml 構成ファイルの users セクションには、ユーザー設定が含まれています。
ClickHouse は、ユーザー管理のための SQL ベースのワークフロー もサポートしています。こちらの使用を推奨します。
users セクションの構造:
user_name/password
-
平文でパスワードを設定するには (非推奨) 、
password要素に記述します。 たとえば、<password>qwerty</password>です。パスワードは空のままでもかまいません。
-
SHA256 ハッシュを使ってパスワードを設定するには、
password_sha256_hex要素に記述します。 たとえば、<password_sha256_hex>65e84be33532fb784c48129675f9eff3a682b27168c0ea744b2cf58ee02337c5</password_sha256_hex>です。 シェルからパスワードを生成する例:結果の 1 行目がパスワードで、2 行目が対応する SHA256 ハッシュです。
-
MySQL クライアントとの互換性のため、パスワードはダブル SHA1 ハッシュで指定することもできます。
password_double_sha1_hex要素に記述します。 たとえば、<password_double_sha1_hex>08b4a0f1de6ad37da17359e592c8d74788a83eb0</password_double_sha1_hex>です。 シェルからパスワードを生成する例:結果の 1 行目がパスワードで、2 行目が対応するダブル SHA1 ハッシュです。
TOTP 認証の設定
users.xml 設定ファイルで設定できます。
なお、SQL ベースのアクセス制御ではまだサポートされていません。
TOTP を使用して認証するには、ユーザーはプライマリパスワードに加えて、TOTP アプリで生成されたワンタイムパスワードを指定する必要があります。指定方法は、--one-time-password コマンドラインオプションを使うか、メインパスワードの末尾に ’+’ 文字を付けて連結します。
たとえば、プライマリパスワードが some_password で、生成された TOTP コードが 345123 の場合、ClickHouse への接続時に --password some_password+345123 または --password some_password --one-time-password 345123 を指定できます。パスワードを指定しない場合、clickhouse-client は対話形式で入力を求めます。
ユーザーの TOTP 認証を有効にするには、users.xml で time_based_one_time_password セクションを設定します。このセクションでは、secret、有効期間、桁数、hash アルゴリズムなどの TOTP 設定を定義します。
例
password や password_sha256_hex など) に加えて、time_based_one_time_password セクションを追加します。
TOTP シークレットの QR コードを生成するには、qrencode ツールを使用できます。
username/ssh-key
この設定では、SSH鍵を使って認証できます。 次のような SSH 鍵 (ssh-keygen で生成したものなど) があるとします。
ssh_key 要素には次の内容が入ることが想定されています
ssh-ed25519 を ssh-rsa または ecdsa-sha2-nistp256 に置き換えてください。
複数の認証方式
1 人のユーザーに対して、<auth_methods> 要素を使って複数の認証方式を設定できます。これにより、ユーザーは一覧にあるいずれか 1 つの方式で認証できます。たとえば、あるユーザーにパスワードと LDAP 認証情報の両方が設定されている場合、そのどちらでログインしても成功します。
<auth_methods> の各子要素は、任意の名前を付けられるラッパー要素で、その中には認証タイプをちょうど 1 つだけ含めます。ラッパー名 (例: <method1>、<primary>、<a1>) は重要ではなく、実際に使われるのは内側の認証要素だけです。
例: 複数のパスワード
<auth_methods> 内では、次の認証タイプがサポートされています。
password— 平文パスワードpassword_sha256_hex— SHA256 パスワードハッシュpassword_scram_sha256_hex— SCRAM-SHA-256 パスワードハッシュpassword_double_sha1_hex— ダブル SHA1 パスワードハッシュldap— LDAP サーバー認証kerberos— Kerberos 認証ssl_certificates— SSL 証明書認証ssh_keys— SSH 鍵認証http_authentication— HTTP 認証
<auth_methods>は、ユーザーレベルで指定する認証方法と 併用できません。どちらか一方の方式のみを使用し、両方を同時に使用しないでください。<auth_methods>には、少なくとも 1 つの認証方法を含める必要があります。<auth_methods>内の各ラッパー要素には、認証タイプを必ず 1 つだけ含める必要があります (後方互換性のため、複数含められる<ssh_keys>は例外です) 。- TOTP (
<time_based_one_time_password>) はユーザーレベル (<auth_methods>の外側) で指定し、リスト内のすべてのパスワードベースの方式に適用されます。TOTP を有効にする場合は、少なくとも 1 つのパスワードベースの方式が必要です。
auth_methods
<password>) に適用される一方、LDAP 方式は外部サーバーに対して独立して認証を行います。
access_management
この設定は、そのユーザーに対して SQL による Access Control and Account Management を使用するかどうかを有効または無効にします。 設定可能な値:- 0 — 無効。
- 1 — 有効。
grants
この設定では、選択したユーザーに任意の権限を付与できます。 リスト内の各要素は、付与先を指定しないGRANT クエリである必要があります。
例:
dictionaries、access_management、named_collection_control、show_named_collections_secrets、allow_databases の各設定と同時に指定することはできません。
user_name/networks
ユーザーが ClickHouseサーバーに接続できるネットワークの一覧です。 リストの各要素には、次のいずれかの形式を指定できます。-
<ip>— IP アドレスまたはネットワークマスク。 例:213.180.204.3,10.0.0.1/8,10.0.0.1/255.255.255.0,2a02:6b8::3,2a02:6b8::3/64,2a02:6b8::3/ffff:ffff:ffff:ffff::. -
<host>— ホスト名。 例:example01.host.ru. アクセス確認時には DNS クエリが実行され、返されたすべての IP アドレスが接続元アドレスと比較されます。 -
<host_regexp>— ホスト名に対する正規表現。 例:^example\d\d-\d\d-\d\.host\.ru$アクセス確認時には、まず接続元アドレスに対して DNS PTR クエリ が実行され、その後で指定した正規表現が適用されます。次に、PTR クエリの結果に対して別の DNS クエリが実行され、返されたすべてのアドレスが接続元アドレスと比較されます。正規表現は $ で終わるようにすることを強く推奨します。
ファイアウォールが適切に設定されているか、またはサーバーがインターネットに直接接続されていない場合を除き、任意のネットワークからのアクセスを許可するのは安全ではありません。
user_name/profile
ユーザーには設定プロファイルを割り当てることができます。設定プロファイルは、users.xml ファイル内の別のセクションで設定します。詳しくは、設定プロファイル を参照してください。
user_name/quota
クォータを使用すると、一定期間におけるリソース使用量を追跡したり、制限したりできます。クォータは、users.xml 設定ファイルの quotas
セクションで設定します。
ユーザーにはクォータセットを割り当てることができます。クォータの設定の詳細については、Quotas を参照してください。
user_name/databases
このセクションでは、現在のユーザーが実行するSELECT クエリに対して ClickHouse が返す行を制限することで、基本的な行レベルセキュリティを実装できます。
例
次の設定では、ユーザー user1 が SELECT クエリの結果として、table1 のうち id フィールドの値が 1000 である行のみを参照できるようにします。
filter には、UInt8 型の値を返す任意の式を指定できます。通常は、比較や論理演算子が含まれます。database_name.table1 のうち、filter の結果が 0 になる行は、このユーザーには返されません。このフィルタリングは PREWHERE 操作と互換性がなく、WHERE→PREWHERE 最適化も無効にします。
ロール
事前定義ロールは、user.xml の roles セクションを使用して任意に作成できます。
roles セクションの構造:
users セクションでユーザーに付与することもできます。