メインコンテンツへスキップ
ClickHouse は、RBAC に基づくアクセス制御をサポートしています。 ClickHouse のアクセスエンティティ: アクセスエンティティは、次の方法で設定できます。 SQL-driven ワークフローの使用を推奨します。これら 2 つの設定方法は同時に利用できるため、アカウントやアクセス権の管理にサーバー設定ファイルを使用している場合でも、SQL-driven ワークフローへスムーズに移行できます。
同じアクセスエンティティを、両方の設定方法で同時に管理することはできません。
ClickHouse Cloud console のユーザーを管理したい場合は、こちらのページを参照してください
すべてのユーザー、ロール、プロファイルなどと、それらに付与されているすべての grant を確認するには、SHOW ACCESS ステートメントを使用します。

概要

デフォルトでは、ClickHouse server には default ユーザーアカウントが用意されています。このアカウントでは SQL ベースのアクセス制御とアカウント管理 は使用できませんが、すべての権限を持っています。default ユーザーアカウントは、ユーザー名が定義されていないあらゆる場合に使用されます。たとえば、クライアントからのログイン時や分散クエリで使用されます。分散クエリ処理では、server またはクラスター の設定で user and password プロパティが指定されていない場合、デフォルトのユーザーアカウントが使用されます。 ClickHouse を使い始めたばかりであれば、次の手順を検討してください。
  1. default ユーザーに対して 有効化 し、SQL ベースのアクセス制御とアカウント管理 を有効にします。
  2. default ユーザーアカウントにログインし、必要なユーザーをすべて作成します。管理者アカウント (GRANT ALL ON *.* TO admin_user_account WITH GRANT OPTION) の作成も忘れないでください。
  3. default ユーザーの 権限を制限し、そのユーザーに対する SQL ベースのアクセス制御とアカウント管理 を無効にします。

現行ソリューションの特性

  • データベースやテーブルが存在しなくても、それらに対する権限を付与できます。
  • テーブルが削除されても、そのテーブルに対応するすべての権限は取り消されません。つまり、後で同じ名前の新しいテーブルを作成した場合でも、すべての権限は引き続き有効です。削除されたテーブルに対応する権限を取り消すには、たとえば REVOKE ALL PRIVILEGES ON db.table FROM ALL クエリを実行する必要があります。
  • 権限に有効期限の設定はありません。

ユーザーアカウント

ユーザーアカウントは、ClickHouse でユーザーを認可するためのアクセスエンティティです。ユーザーアカウントには、次の情報が含まれます。
  • 識別情報。
  • ユーザーが実行できるクエリの範囲を定義する権限
  • ClickHouse server への接続を許可するホスト。
  • 割り当て済みのロールとデフォルトロール。
  • ユーザーログイン時にデフォルトで適用される、制約付きの設定。
  • 割り当てられた設定プロファイル。
ユーザーアカウントには、GRANT クエリまたはロールの割り当てによって権限を付与できます。ユーザーから権限を取り消すには、ClickHouse では REVOKE クエリを使用します。ユーザーの権限を一覧表示するには、SHOW GRANTS ステートメントを使用します。 管理クエリ:

適用される設定

設定は、ユーザーアカウント、付与されたロール、設定プロファイルごとにそれぞれ異なる内容を構成できます。ユーザーのログイン時に、同じ設定が複数のアクセスエンティティに対して構成されている場合、その設定の値と制約は次の順序で適用されます (優先度の高い順) :
  1. ユーザーアカウントの設定。
  2. ユーザーアカウントのデフォルトロールの設定。ある設定が複数のロールで構成されている場合、その設定の適用順序は未定義です。
  3. ユーザーまたはそのデフォルトロールに割り当てられた設定プロファイルの設定。ある設定が複数のプロファイルで構成されている場合、その設定の適用順序は未定義です。
  4. サーバー全体に既定で適用される設定、または default profile で適用される設定。

ロール

ロールは、アクセスエンティティをまとめたもので、ユーザーアカウントに付与できます。 ロールには次のものが含まれます。
  • 権限
  • 設定と制約
  • 割り当てられたロールの一覧
管理用クエリ: 権限は、GRANT クエリを使用してロールに付与できます。ロールから権限を取り消すには、ClickHouse では REVOKE クエリを使用します。

ROW POLICY

ROW POLICY は、ユーザーまたはロールがアクセスできる行を定義するフィルターです。ROW POLICY には、特定のテーブルに対するフィルターに加えて、この ROW POLICY を適用するロールやユーザーの一覧が含まれます。
ROW POLICY が有効なのは、readonly アクセス権限がある場合に限られます。テーブルを変更したり、テーブル間でパーティションをコピーしたりできる場合、ROW POLICY による制限は実質的に意味をなさなくなります。
管理用クエリ:

SETTINGS PROFILE

SETTINGS PROFILE は、設定の集合です。SETTINGS PROFILE には、設定や制約に加え、このプロファイルが適用されるロールやユーザーの一覧が含まれます。 管理用クエリ:

QUOTA

QUOTA はリソース使用量を制限します。詳細は Quotas を参照してください。 QUOTA には、一定期間ごとの一連の制限と、この QUOTA を使用するロールやユーザーの一覧が含まれます。 管理用クエリ:

SQL ベースのアクセス制御とアカウント管理を有効にする

  • 設定の保存先となるディレクトリを用意します。 ClickHouse は、access_control_path サーバー設定パラメーターで指定されたフォルダーに、アクセスエンティティの設定を保存します。
  • 少なくとも 1 つのユーザーアカウントで、SQL ベースのアクセス制御とアカウント管理を有効にします。 デフォルトでは、SQL ベースのアクセス制御とアカウント管理はすべてのユーザーで無効になっています。users.xml 設定ファイルで少なくとも 1 人のユーザーを設定し、access_managementnamed_collection_controlshow_named_collectionsshow_named_collections_secrets の各設定を 1 に設定する必要があります。

SQLユーザーとロールの定義

ClickHouse Cloud を利用している場合は、クラウドアクセス管理を参照してください。
この記事では、SQLユーザーとロールを定義する基本と、それらの権限をデータベース、テーブル、行、カラムに適用する方法を説明します。

SQL ユーザーモードを有効にする

  1. users.xml ファイルの <default> ユーザー配下で SQL ユーザーモードを有効にします。
default ユーザーは、新規インストール時に作成される唯一のユーザーであり、デフォルトではノード間通信に使用されるアカウントでもあります。本番環境では、ノード間通信を SQL 管理ユーザーで構成し、<secret>、クラスター認証情報、および/またはノード間 HTTP とトランスポートプロトコルの認証情報を設定した後は、このユーザーを無効にすることを推奨します。default アカウントはノード間通信に使用されるためです。
  1. 変更を適用するため、ノードを再起動します。
  2. ClickHouse client を起動します。

ユーザーの作成

  1. SQL 管理者アカウントを作成します。
  2. 新しいユーザーにすべての管理者権限を付与します。

ALTER の権限

この記事では、権限の定義方法と、特権ユーザーが ALTER ステートメントを使用する際に権限がどのように機能するかについて理解を深めることを目的としています。 ALTER ステートメントはいくつかのカテゴリに分かれており、階層構造を持つものと、持たないため明示的に定義する必要があるものがあります。 DB、テーブル、およびユーザー設定の例
  1. 管理者ユーザーで、サンプルユーザーを作成します
  1. サンプルデータベースを作成する
  1. サンプルテーブルを作成する
  1. 権限の付与と取り消しを行うためのサンプル管理者ユーザーを作成する
権限を付与または取り消すには、admin ユーザーに WITH GRANT OPTION 権限が付与されている必要があります。 たとえば、次のようにします。
権限を GRANT または REVOKE するには、まずその権限をユーザー自身が持っている必要があります。
権限の付与または取り消し ALTER の階層:
  1. ユーザーまたはロールへの ALTER 権限の付与
GRANT ALTER on *.* TO my_user を実行しても、対象となるのは上位レベルの ALTER TABLEALTER VIEW のみで、その他の ALTER ステートメントは個別に付与または取り消す必要があります。 たとえば、基本的な ALTER 権限を付与する場合:
結果として得られる権限一覧:
これにより、上記の例にある ALTER TABLEALTER VIEW 配下のすべての権限が付与されますが、ALTER ROW POLICY など、その他の一部の ALTER 権限は付与されません (階層に戻って確認すると、ALTER ROW POLICYALTER TABLEALTER VIEW の子ではないことがわかります) 。これらは明示的に付与または取り消す必要があります。 ALTER 権限の一部だけが必要な場合は、それぞれを個別に付与できます。また、その権限に下位権限がある場合は、それらも自動的に付与されます。 例えば:
権限は次のように設定します:
これにより、以下のサブ権限も付与されます:
  1. Users and Roles から ALTER 権限を取り消す
REVOKE ステートメントは GRANT ステートメントと同様に動作します。 ユーザー/ロールにサブ権限が付与されている場合、そのサブ権限を直接取り消すか、継承元の上位権限を取り消すことができます。 例えば、ユーザーに ALTER ADD COLUMN 権限が付与されている場合
権限は個別に取り消すことができます:
または、上位レベルのいずれかから取り消すこともできます (COLUMNのすべてのサブ権限を取り消す場合) :
追加 権限を付与できるのは、WITH GRANT OPTION を持つだけでなく、その権限自体も保有しているユーザーに限られます。
  1. adminユーザーにその権限を付与し、さらに複数の権限を管理できるようにするには 以下に例を示します:
これにより、ユーザーは ALTER COLUMN およびすべてのサブ権限を付与または取り消すことができます。 テスト
  1. SELECT 権限を付与します
  1. ユーザーにカラム追加権限を付与する
  1. 権限が制限されたユーザーでログインする
  1. カラムの追加を試す
  1. カラムの削除を試す
  1. 権限を付与して alter admin を検証する
  1. alter admin ユーザーとしてログインする
  1. 下位権限を付与する
  1. alter admin ユーザーが持っておらず、かつ admin ユーザーに付与されている権限の下位権限でもない権限の付与をテストします。
概要 ALTER 権限は、テーブルおよびビューに対する ALTER では階層的ですが、その他の ALTER ステートメントには当てはまりません。権限は細かい粒度で設定することも、まとめて設定することもでき、同様に取り消すこともできます。権限を付与または取り消すユーザーは、自分自身を含むユーザーに権限を設定するための WITH GRANT OPTION を持っている必要があり、さらに対象の権限をすでに持っていなければなりません。操作を行うユーザー自身に WITH GRANT OPTION がない場合、自分自身の権限を取り消すことはできません。
最終更新日 2026年6月12日