同じアクセスエンティティを、両方の設定方法で同時に管理することはできません。
ClickHouse Cloud console のユーザーを管理したい場合は、こちらのページを参照してください
SHOW ACCESS ステートメントを使用します。
概要
default ユーザーアカウントが用意されています。このアカウントでは SQL ベースのアクセス制御とアカウント管理 は使用できませんが、すべての権限を持っています。default ユーザーアカウントは、ユーザー名が定義されていないあらゆる場合に使用されます。たとえば、クライアントからのログイン時や分散クエリで使用されます。分散クエリ処理では、server またはクラスター の設定で 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 server への接続を許可するホスト。
- 割り当て済みのロールとデフォルトロール。
- ユーザーログイン時にデフォルトで適用される、制約付きの設定。
- 割り当てられた設定プロファイル。
適用される設定
- ユーザーアカウントの設定。
- ユーザーアカウントのデフォルトロールの設定。ある設定が複数のロールで構成されている場合、その設定の適用順序は未定義です。
- ユーザーまたはそのデフォルトロールに割り当てられた設定プロファイルの設定。ある設定が複数のプロファイルで構成されている場合、その設定の適用順序は未定義です。
- サーバー全体に既定で適用される設定、または default profile で適用される設定。
ロール
- 権限
- 設定と制約
- 割り当てられたロールの一覧
ROW POLICY
ROW POLICY が有効なのは、readonly アクセス権限がある場合に限られます。テーブルを変更したり、テーブル間でパーティションをコピーしたりできる場合、ROW POLICY による制限は実質的に意味をなさなくなります。
SETTINGS PROFILE
- CREATE SETTINGS PROFILE
- ALTER SETTINGS PROFILE
- DROP SETTINGS PROFILE
- SHOW CREATE SETTINGS PROFILE
- SHOW PROFILES
QUOTA
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ユーザーとロールの定義
SQL ユーザーモードを有効にする
users.xmlファイルの<default>ユーザー配下で SQL ユーザーモードを有効にします。
default ユーザーは、新規インストール時に作成される唯一のユーザーであり、デフォルトではノード間通信に使用されるアカウントでもあります。本番環境では、ノード間通信を SQL 管理ユーザーで構成し、<secret>、クラスター認証情報、および/またはノード間 HTTP とトランスポートプロトコルの認証情報を設定した後は、このユーザーを無効にすることを推奨します。default アカウントはノード間通信に使用されるためです。- 変更を適用するため、ノードを再起動します。
-
ClickHouse client を起動します。
ユーザーの作成
- SQL 管理者アカウントを作成します。
- 新しいユーザーにすべての管理者権限を付与します。
ALTER の権限
ALTER ステートメントを使用する際に権限がどのように機能するかについて理解を深めることを目的としています。
ALTER ステートメントはいくつかのカテゴリに分かれており、階層構造を持つものと、持たないため明示的に定義する必要があるものがあります。
DB、テーブル、およびユーザー設定の例
- 管理者ユーザーで、サンプルユーザーを作成します
- サンプルデータベースを作成する
- サンプルテーブルを作成する
- 権限の付与と取り消しを行うためのサンプル管理者ユーザーを作成する
権限を付与または取り消すには、admin ユーザーに 権限を
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 権限の一部だけが必要な場合は、それぞれを個別に付与できます。また、その権限に下位権限がある場合は、それらも自動的に付与されます。
例えば:
- Users and Roles から
ALTER権限を取り消す
REVOKE ステートメントは GRANT ステートメントと同様に動作します。
ユーザー/ロールにサブ権限が付与されている場合、そのサブ権限を直接取り消すか、継承元の上位権限を取り消すことができます。
例えば、ユーザーに ALTER ADD COLUMN 権限が付与されている場合
WITH GRANT OPTION を持つだけでなく、その権限自体も保有しているユーザーに限られます。
- adminユーザーにその権限を付与し、さらに複数の権限を管理できるようにするには 以下に例を示します:
ALTER COLUMN およびすべてのサブ権限を付与または取り消すことができます。
テスト
SELECT権限を付与します
- ユーザーにカラム追加権限を付与する
- 権限が制限されたユーザーでログインする
- カラムの追加を試す
- カラムの削除を試す
- 権限を付与して alter admin を検証する
- alter admin ユーザーとしてログインする
- 下位権限を付与する
- alter admin ユーザーが持っておらず、かつ admin ユーザーに付与されている権限の下位権限でもない権限の付与をテストします。
ALTER 権限は、テーブルおよびビューに対する ALTER では階層的ですが、その他の ALTER ステートメントには当てはまりません。権限は細かい粒度で設定することも、まとめて設定することもでき、同様に取り消すこともできます。権限を付与または取り消すユーザーは、自分自身を含むユーザーに権限を設定するための WITH GRANT OPTION を持っている必要があり、さらに対象の権限をすでに持っていなければなりません。操作を行うユーザー自身に WITH GRANT OPTION がない場合、自分自身の権限を取り消すことはできません。