メインコンテンツまでスキップ
メインコンテンツまでスキップ

一般的なアクセス管理クエリ

セルフマネージド

セルフマネージドの 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_admindefault_role と同じ権限を持ち、sql_console_read_only は読み取り専用の権限を持っています。

管理者ユーザーにはデフォルトで sql_console_admin ロールが割り当てられているため、彼らにとっては何も変更されません。 ただし、sql_console_read_only ロールは、非管理者ユーザーに読み取り専用またはフルアクセスを任意のインスタンスに対して付与できます。このアクセスは管理者によって設定する必要があります。ロールは GRANT または REVOKE コマンドを使用してインスタンス固有の要件に適合させることができ、これらのロールに対する変更は永続化されます。

グラニュラーアクセス制御

このアクセス制御機能は、ユーザー レベルの粒度で手動で構成することもできます。 新しい sql_console_* ロールをユーザーに割り当てる前に、名前空間 sql-console-role:<email> に対応する SQL コンソールユーザー専用のデータベースロールを作成する必要があります。 例えば:

一致するロールが検出されると、それはテンプレートのロールの代わりにユーザーに割り当てられます。 これにより、sql_console_sa_rolesql_console_pm_role などのより複雑なアクセス制御構成を作成し、特定のユーザーに付与することができます。 例えば:

テスト管理者権限

ユーザー default からログアウトし、ユーザー clickhouse_admin として再ログインします。

これらすべてが成功するはずです:

非管理者ユーザー

ユーザーは必要な権限を持っていなければならず、すべてが管理者ユーザーである必要はありません。このドキュメントの残りの部分では、例となるシナリオと必要な役割を提供します。

準備

以下のテーブルとユーザーを作成して、例で使用します。

サンプルデータベース、テーブル、行の作成

  1. テストデータベースを作成します。

  2. テーブルを作成します。

  3. サンプル行でテーブルにデータを入れます。

  4. テーブルを確認します:

  5. 特定のカラムへのアクセスを制限するために使用されるレギュラーユーザーを作成します:

  6. 特定の値を持つ行へのアクセスを制限するために使用されるレギュラーユーザーを作成します:

ロールの作成

この例のセットで:

  • 列や行に対する異なる権限のためのロールが作成されます。
  • 権限がロールに付与されます。
  • ユーザーが各ロールに割り当てられます。

ロールは、各ユーザーを個別に管理するのではなく、特定の権限のためのユーザーのグループを定義するために使用されます。

  1. db1table1 において、ユーザーが column1 のみを見ることができるように制限するロールを作成します:

  2. column1 のビューを許可する権限を設定します。

  3. column_user ユーザーを column1_users ロールに追加します。

  4. このロールのユーザーが、column1A の値を持つ行のみを見ることができるように制限するロールを作成します。

  5. row_userA_rows_users ロールに追加します。

  6. column1A の値を持つ行のみを表示するポリシーを作成します。

  7. データベースとテーブルに権限を設定します。

  8. 他のロールがすべての行にアクセスできるようにするための明示的な権限を付与します。

    注記

    テーブルにポリシーを添付すると、システムはそのポリシーを適用し、定義されたユーザーとロールのみがテーブルの操作を行うことができ、他のすべてのユーザーには操作が拒否されます。他のユーザーのために制限されない行ポリシーを適用しないようにするためには、他のユーザーやロールが通常または他のタイプのアクセスを持てるようにする別のポリシーを定義する必要があります。

検証

カラム制限ユーザーによるロールの権限テスト

  1. clickhouse_admin ユーザーを使用して ClickHouse クライアントにログインします。

  2. 管理者ユーザーでデータベース、テーブル、およびすべての行へのアクセスを確認します。

  3. column_user ユーザーを使用して ClickHouse クライアントにログインします。

  4. すべてのカラムを使用して SELECT をテストします。

    注記

    すべてのカラムが指定されたため、アクセスが拒否されました。ユーザーは idcolumn1 のみアクセスがあります。

  5. 許可されたカラムのみを指定して SELECT クエリを確認します。

行制限ユーザーによるロールの権限テスト

  1. row_user を使用して ClickHouse クライアントにログインします。

  2. 利用可能な行を表示します。

    注記

    上記の2行のみが返されることを確認します。column1B の値を持つ行は除外されるべきです。

ユーザーとロールの変更

ユーザーには、必要な権限の組み合わせのために複数のロールを割り当てることができます。複数のロールを使用すると、システムは権限を決定するためにロールを組み合わせます。最終的な効果は、ロールの権限が累積的になることです。

たとえば、role1column1 のみの選択を許可し、role2column1 および column2 の選択を許可する場合、ユーザーは両方のカラムにアクセスできます。

  1. 管理者アカウントを使用して、行とカラムで制限された新しいユーザーをデフォルトのロールで作成します。

  2. A_rows_users ロールの以前の権限を削除します。

  3. A_row_users ロールに column1 からのみ選択を許可します。

  4. row_and_column_user を使用して ClickHouse クライアントにログインします。

  5. すべてのカラムでテストします:

  6. 許可されたカラムを限定してテストします。

トラブルシューティング

権限が交差したり組み合わさったりして予期しない結果が生じる場合がありますが、次のコマンドを使用して管理者アカウントを使用して問題を特定できます。

ユーザーの権限とロールのリスト

ClickHouse のロールのリスト

ポリシーの表示

ポリシーの定義方法と現在の権限の表示

ロール、ポリシー、ユーザーを管理するための例コマンド

次のコマンドを使用して:

  • 権限を削除する
  • ポリシーを削除する
  • ユーザーをロールから解除する
  • ユーザーとロールを削除する
ヒント

これらのコマンドは管理者ユーザーまたは default ユーザーとして実行します。

ロールから権限を削除する

ポリシーを削除する

ユーザーをロールから解除する

ロールを削除する

ユーザーを削除する

まとめ

この記事では、SQLユーザーとロールを作成する基本を示し、ユーザーとロールの権限を設定および変更する手順を提供しました。各内容の詳細情報については、ユーザーガイドとリファレンス文書を参照してください。