ClickHouseでのユーザーとロールの作成
ClickHouseは、RBACアプローチに基づくアクセス制御管理をサポートしています。
ClickHouseのアクセスエンティティ:
アクセスエンティティは以下を使用して構成できます:
我々はSQL駆動のワークフローの使用を推奨します。両方の構成方法は同時に機能し、サーバーの構成ファイルを使用してアカウントおよびアクセス権を管理している場合、SQL駆動のワークフローにスムーズに切り替えることができます。
同じアクセスエンティティを両方の構成方法で同時に管理することはできません。
ClickHouse Cloud Consoleユーザーを管理する場合は、このページを参照してください。
すべてのユーザー、ロール、プロファイルなど、及びそのすべての権限を表示するには、SHOW ACCESS
文を使用してください。
概要
デフォルトでは、ClickHouseサーバはdefault
ユーザーアカウントを提供しており、このアカウントはSQL駆動のアクセス制御およびアカウント管理を使用することは許可されていませんが、すべての権利と権限を持っています。default
ユーザーアカウントは、ユーザー名が定義されていない場合、例としてクライアントからのログインや分散クエリの処理で使用されます。分散クエリ処理では、サーバーまたはクラスタの設定がuser and passwordプロパティを指定していない場合に、デフォルトのユーザーアカウントが使用されます。
ClickHouseの使用を始めたばかりの場合、次のシナリオを検討してください:
default
ユーザーのSQL駆動アクセス制御およびアカウント管理を有効にする。default
ユーザーアカウントにログインし、必要なすべてのユーザーを作成します。管理者アカウントを作成することを忘れないでください(GRANT ALL ON *.* TO admin_user_account WITH GRANT OPTION
)。default
ユーザーの権限を制限するとともに、SQL駆動のアクセス制御およびアカウント管理を無効にします。
現在のソリューションの特性
- 存在しないデータベースやテーブルに対しても権限を付与できます。
- テーブルが削除された場合、このテーブルに対応するすべての権限が取り消されることはありません。つまり、後で同じ名前の新しいテーブルを作成した場合でも、すべての権限が有効なままです。削除されたテーブルに対応する権限を取り消すには、例えば
REVOKE ALL PRIVILEGES ON db.table FROM ALL
クエリを実行する必要があります。 - 権限に対する有効期限の設定はありません。
ユーザーアカウント
ユーザーアカウントは、ClickHouse内で何かを認証することを可能にするアクセスエンティティです。ユーザーアカウントには以下が含まれます:
- 身元情報。
- ユーザーが実行できるクエリの範囲を定義する特権。
- ClickHouseサーバーに接続を許可されているホスト。
- 割り当てられたロールおよびデフォルトのロール。
- ユーザーのログイン時にデフォルトで適用される制約を持つ設定。
- 割り当てられた設定プロファイル。
特権は、GRANTクエリによってユーザーアカウントに付与することができ、またはロールを割り当てることによって付与できます。ユーザーから特権を取り消すには、ClickHouseはREVOKEクエリを提供します。ユーザーの特権をリストするには、SHOW GRANTS文を使用します。
管理クエリ:
設定の適用
設定は、ユーザーアカウント、付与されたロール、および設定プロファイルに対して異なって構成できます。ユーザーのログイン時に、設定が異なるアクセスエンティティに対して構成されている場合、この設定の値と制約は以下のように優先順位が適用されます(高い方から低い方へ):
- ユーザーアカウント設定。
- ユーザーアカウントのデフォルトロールの設定。ロールのいくつかに設定が構成されている場合、設定の適用順序は未定義です。
- ユーザーまたはそのデフォルトロールに割り当てられた設定プロファイルの設定。いくつかのプロファイルに設定が構成されている場合、設定の適用順序は未定義です。
- デフォルトでサーバ全体に適用される設定、またはデフォルトプロファイルからの設定。
ロール
ロールは、ユーザーアカウントに付与できるアクセスエンティティのコンテナです。
ロールは以下を含みます:
- 特権
- 設定と制約
- 割り当てられたロールのリスト
管理クエリ:
特権はGRANTクエリによってロールに与えられることができます。ロールから特権を取り消すために、ClickHouseはREVOKEクエリを提供します。
行ポリシー
行ポリシーは、ユーザーまたはロールにどの行が利用可能かを定義するフィルターです。行ポリシーは特定のテーブルのフィルターを含み、この行ポリシーを使用すべきロールおよび/またはユーザーのリストも含みます。
行ポリシーは、読み取り専用アクセスを持つユーザーにのみ意味があります。ユーザーがテーブルを修正したり、テーブル間でパーティションをコピーできる場合、行ポリシーの制限は無効になります。
管理クエリ:
設定プロファイル
設定プロファイルは、設定のコレクションです。設定プロファイルには、設定と制約、およびこのプロファイルが適用されるロールやユーザーのリストが含まれています。
管理クエリ:
- CREATE SETTINGS PROFILE
- ALTER SETTINGS PROFILE
- DROP SETTINGS PROFILE
- SHOW CREATE SETTINGS PROFILE
- SHOW PROFILES
クォータ
クォータはリソース使用を制限します。詳細はクォータを参照してください。
クォータには、一定の期間にわたる制限のセットと、このクォータを使用すべきロールやユーザーのリストが含まれています。
管理クエリ:
SQL駆動のアクセス制御およびアカウント管理の有効化
-
構成保存用ディレクトリをセットアップします。
ClickHouseは、access_control_pathサーバ構成パラメータで設定されたフォルダーにアクセスエンティティの構成を保存します。
-
少なくとも1つのユーザーアカウントのSQL駆動のアクセス制御およびアカウント管理を有効にします。
デフォルトでは、すべてのユーザーに対してSQL駆動のアクセス制御およびアカウント管理は無効です。
users.xml
構成ファイルで少なくとも1つのユーザーを構成し、access_management
、named_collection_control
、show_named_collections
、show_named_collections_secrets
の各設定の値を1に設定する必要があります。
SQLユーザーとロールの定義
ClickHouse Cloudで作業している場合は、Cloudアクセス管理を参照してください。
この記事では、SQLユーザーとロールを定義する基本と、それらの特権や権限をデータベース、テーブル、行、カラムに適用する方法を示します。
SQLユーザーモードの有効化
-
users.xml
ファイルの<default>
ユーザーの下でSQLユーザーモードを有効にします:注記default
ユーザーは、新しいインストール時にのみ作成される唯一のユーザーであり、デフォルトではノード間通信にも使用されます。本番環境では、このユーザーをSQL管理者ユーザーでノード間通信が設定された後に無効にすることをお勧めします。なぜなら、
default
アカウントはノード間通信に使用されるからです。 -
変更を適用するためにノードを再起動します。
-
ClickHouseクライアントを起動します:
ユーザーの定義
- SQL管理者アカウントを作成します:
- 新しいユーザーに完全な管理権限を付与します:
ALTER権限
この記事は、権限を定義する方法と、特権ユーザーがALTER
文を使用する際に権限がどのように機能するかを理解するのに役立つことを目的としています。
ALTER
文は、いくつかのカテゴリに分かれており、一部は階層的で、一部は明示的に定義する必要があります。
サンプルDB、テーブル、ユーザー構成
- 管理者ユーザーでサンプルユーザーを作成します:
- サンプルデータベースを作成します:
- サンプルテーブルを作成します:
- 権限の付与や取り消しをするためのサンプル管理ユーザーを作成します:
権限の付与や取り消しを行うには、管理ユーザーがWITH GRANT OPTION
特権を有している必要があります。例えば:
権限をGRANT
またはREVOKE
するには、ユーザー自身がそれらの権限を最初に持っている必要があります。
権限の付与または取り消し
ALTER
の階層:
- ユーザーまたはロールに
ALTER
権限を付与する
GRANT ALTER on *.* TO my_user
を使用することで、トップレベルのALTER TABLE
およびALTER VIEW
にのみ影響します。他のALTER
文は個別に付与または取り消す必要があります。
例えば、基本的なALTER
権限を付与します:
権限のセットをリストします:
これにより、上記の例のALTER TABLE
およびALTER VIEW
の下にあるすべての権限が付与されますが、ALTER ROW POLICY
などの特定の他のALTER
権限は付与されません(階層に戻ってみると、ALTER ROW POLICY
はALTER TABLE
やALTER VIEW
の子ではないことがわかります)。これらは明示的に付与または取り消す必要があります。
もし必要なのがALTER
権限のサブセットだけであれば、それぞれを個別に付与できます。もしその権限にサブ権限がある場合、それらも自動的に付与されます。
例えば:
付与された権限は以下のようになります:
これにより、以下のサブ権限も付与されます:
- ユーザーとロールから
ALTER
権限を取り消す
REVOKE
文はGRANT
文と同様に機能します。
ユーザー/ロールにサブ権限が付与されている場合、そのサブ権限を直接取り消すか、上位レベルの権限を取り消すことができます。
例えば、ユーザーにALTER ADD COLUMN
が付与されている場合:
権限は個別に取り消すことができます:
または、上位のすべてのレベルから取り消すことができます(COLUMNサブ権限のすべてを取り消します):
追加情報
権限は、WITH GRANT OPTION
を持つだけでなく、その権限自体を持つユーザーによって付与されなければなりません。
- 管理ユーザーにその権限を付与し、さらに権限のセットを管理できるようにする 以下はその例です:
これにより、ユーザーはALTER COLUMN
およびすべてのサブ権限を付与または取り消すことができます。
テスト
SELECT
権限を追加します:
- ユーザーに追加カラム権限を追加します:
- 制限されたユーザーでログインします:
- カラムを追加するテストを実施します:
- カラム削除のテスト:
- アルタ管理者によって権限を付与するテスト:
- アルタ管理者ユーザーでログインします:
- サブ権限を付与します:
- アルタ管理者ユーザーが持っていない権限を付与するテスト(管理者ユーザーの付与のサブ権限でない):
まとめ
ALTER
権限は、テーブルおよびビューに対しては階層的ですが、他のALTER
文についてはそうではありません。権限は細かく設定することも、権限のグループとして設定することもでき、同様に取り消すことができます。権限を付与または取り消すユーザーは、ユーザーに対して権限を設定するために、WITH GRANT OPTION
を持っている必要があり、またその権限を最初に持っていなければなりません。操作を行うユーザーが自分自身の権限を取り消すことはできません。