一般的なアクセス管理クエリ
セルフマネージドの ClickHouse を使用している場合は、SQL ユーザーとロールを参照してください。
この記事では、SQL ユーザーとロールの定義と、それらの特権と許可をデータベース、テーブル、行、カラムに適用する基本を示します。
管理者ユーザー
ClickHouse Cloud サービスには、サービス作成時に作成される default
という管理者ユーザーがあります。 パスワードはサービスの作成時に提供され、Admin ロールを持つ ClickHouse Cloud ユーザーによってリセットできます。
ClickHouse Cloud サービスに追加の SQL ユーザーを追加する場合、それらには SQL ユーザー名とパスワードが必要です。 管理者レベルの特権を持たせたい場合は、新しいユーザーに default_role
のロールを割り当てます。 例えば、ユーザー clickhouse_admin
を追加する場合:
SQL コンソールを使用する場合、SQL ステートメントは default
ユーザーとして実行されません。 代わりに、ステートメントは sql-console:${cloud_login_email}
という名前のユーザーとして実行されます。ここで、cloud_login_email
は現在クエリを実行しているユーザーのメールアドレスです。
これらの自動生成された SQL コンソールユーザーは default
ロールを持っています。
パスワードなし認証
SQL コンソールには、sql_console_admin
および sql_console_read_only
の2つのロールがあります。 sql_console_admin
は default_role
と同じ権限を持ち、sql_console_read_only
は読み取り専用の権限を持っています。
管理者ユーザーにはデフォルトで sql_console_admin
ロールが割り当てられているため、彼らにとっては何も変更されません。 ただし、sql_console_read_only
ロールは、非管理者ユーザーに読み取り専用またはフルアクセスを任意のインスタンスに対して付与できます。このアクセスは管理者によって設定する必要があります。ロールは GRANT
または REVOKE
コマンドを使用してインスタンス固有の要件に適合させることができ、これらのロールに対する変更は永続化されます。
グラニュラーアクセス制御
このアクセス制御機能は、ユーザー レベルの粒度で手動で構成することもできます。 新しい sql_console_*
ロールをユーザーに割り当てる前に、名前空間 sql-console-role:<email>
に対応する SQL コンソールユーザー専用のデータベースロールを作成する必要があります。 例えば:
一致するロールが検出されると、それはテンプレートのロールの代わりにユーザーに割り当てられます。 これにより、sql_console_sa_role
や sql_console_pm_role
などのより複雑なアクセス制御構成を作成し、特定のユーザーに付与することができます。 例えば:
テスト管理者権限
ユーザー default
からログアウトし、ユーザー clickhouse_admin
として再ログインします。
これらすべてが成功するはずです:
非管理者ユーザー
ユーザーは必要な権限を持っていなければならず、すべてが管理者ユーザーである必要はありません。このドキュメントの残りの部分では、例となるシナリオと必要な役割を提供します。
準備
以下のテーブルとユーザーを作成して、例で使用します。
サンプルデータベース、テーブル、行の作成
-
テストデータベースを作成します。
-
テーブルを作成します。
-
サンプル行でテーブルにデータを入れます。
-
テーブルを確認します:
-
特定のカラムへのアクセスを制限するために使用されるレギュラーユーザーを作成します:
-
特定の値を持つ行へのアクセスを制限するために使用されるレギュラーユーザーを作成します:
ロールの作成
この例のセットで:
- 列や行に対する異なる権限のためのロールが作成されます。
- 権限がロールに付与されます。
- ユーザーが各ロールに割り当てられます。
ロールは、各ユーザーを個別に管理するのではなく、特定の権限のためのユーザーのグループを定義するために使用されます。
-
db1
のtable1
において、ユーザーがcolumn1
のみを見ることができるように制限するロールを作成します: -
column1
のビューを許可する権限を設定します。 -
column_user
ユーザーをcolumn1_users
ロールに追加します。 -
このロールのユーザーが、
column1
にA
の値を持つ行のみを見ることができるように制限するロールを作成します。 -
row_user
をA_rows_users
ロールに追加します。 -
column1
がA
の値を持つ行のみを表示するポリシーを作成します。 -
データベースとテーブルに権限を設定します。
-
他のロールがすべての行にアクセスできるようにするための明示的な権限を付与します。
注記テーブルにポリシーを添付すると、システムはそのポリシーを適用し、定義されたユーザーとロールのみがテーブルの操作を行うことができ、他のすべてのユーザーには操作が拒否されます。他のユーザーのために制限されない行ポリシーを適用しないようにするためには、他のユーザーやロールが通常または他のタイプのアクセスを持てるようにする別のポリシーを定義する必要があります。
検証
カラム制限ユーザーによるロールの権限テスト
-
clickhouse_admin
ユーザーを使用して ClickHouse クライアントにログインします。 -
管理者ユーザーでデータベース、テーブル、およびすべての行へのアクセスを確認します。
-
column_user
ユーザーを使用して ClickHouse クライアントにログインします。 -
すべてのカラムを使用して
SELECT
をテストします。注記すべてのカラムが指定されたため、アクセスが拒否されました。ユーザーは
id
とcolumn1
のみアクセスがあります。 -
許可されたカラムのみを指定して
SELECT
クエリを確認します。
行制限ユーザーによるロールの権限テスト
-
row_user
を使用して ClickHouse クライアントにログインします。 -
利用可能な行を表示します。
注記上記の2行のみが返されることを確認します。
column1
にB
の値を持つ行は除外されるべきです。
ユーザーとロールの変更
ユーザーには、必要な権限の組み合わせのために複数のロールを割り当てることができます。複数のロールを使用すると、システムは権限を決定するためにロールを組み合わせます。最終的な効果は、ロールの権限が累積的になることです。
たとえば、role1
が column1
のみの選択を許可し、role2
が column1
および column2
の選択を許可する場合、ユーザーは両方のカラムにアクセスできます。
-
管理者アカウントを使用して、行とカラムで制限された新しいユーザーをデフォルトのロールで作成します。
-
A_rows_users
ロールの以前の権限を削除します。 -
A_row_users
ロールにcolumn1
からのみ選択を許可します。 -
row_and_column_user
を使用して ClickHouse クライアントにログインします。 -
すべてのカラムでテストします:
-
許可されたカラムを限定してテストします。
トラブルシューティング
権限が交差したり組み合わさったりして予期しない結果が生じる場合がありますが、次のコマンドを使用して管理者アカウントを使用して問題を特定できます。
ユーザーの権限とロールのリスト
ClickHouse のロールのリスト
ポリシーの表示
ポリシーの定義方法と現在の権限の表示
ロール、ポリシー、ユーザーを管理するための例コマンド
次のコマンドを使用して:
- 権限を削除する
- ポリシーを削除する
- ユーザーをロールから解除する
- ユーザーとロールを削除する
これらのコマンドは管理者ユーザーまたは default
ユーザーとして実行します。
ロールから権限を削除する
ポリシーを削除する
ユーザーをロールから解除する
ロールを削除する
ユーザーを削除する
まとめ
この記事では、SQLユーザーとロールを作成する基本を示し、ユーザーとロールの権限を設定および変更する手順を提供しました。各内容の詳細情報については、ユーザーガイドとリファレンス文書を参照してください。