一般アクセス管理クエリ
セルフマネージドの 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 コンソールには 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
などのロールを作成し、特定のユーザーに付与するなど、より複雑なアクセス制御構成を導入できます。 例えば:
Test admin privileges
ユーザー default
からログアウトし、ユーザー clickhouse_admin
として再ログインします。
これらすべてが成功するはずです:
Non-admin users
ユーザーは必要な権限を持っている必要があり、すべてが管理者ユーザーである必要はありません。この文書の残りの部分では、例となるシナリオと必要な役割が提供されます。
Preparation
例で使用するために、これらのテーブルとユーザーを作成します。
Creating a sample database, table, and rows
-
テストデータベースを作成します
-
テーブルを作成します
-
テーブルにサンプル行を入力します
-
テーブルを確認します:
-
特定のカラムへのアクセス制限をデモするために使用される通常のユーザーを作成します:
-
特定の値を持つ行へのアクセス制限をデモするために使用される通常のユーザーを作成します:
Creating roles
以下の例セットで:
- カラムや行に対するさまざまな権限のためのロールが作成されます
- 権限がロールに付与されます
- 各ロールにユーザーが割り当てられます
ロールは、各ユーザーを個別に管理する代わりに、特定の権限のためのユーザーグループを定義するために使用されます。
-
このロールのユーザーがデータベース
db1
のtable1
でcolumn1
のみを表示できるように制限するロールを作成します: -
column1
の閲覧を許可する権限を設定します -
column_user
ユーザーをcolumn1_users
ロールに追加します -
このロールのユーザーが選択された行のみを表示できるように制限するロールを作成します。この場合、
column1
にA
を含む行のみです。 -
row_user
をA_rows_users
ロールに追加します -
column1
がA
の値を持つ行のみを表示できるポリシーを作成します -
データベースおよびテーブルに権限を設定します
-
他のロールがすべての行にアクセスできるように明示的な権限を付与します
注記テーブルにポリシーを添付すると、システムはそのポリシーを適用し、定義されたユーザーおよびロールのみがテーブルで操作を行うことができるようになり、それ以外はすべての操作が拒否されます。他のユーザーに制限を適用しないためには、通常のアクセスや他のタイプのアクセスを許可する別のポリシーを定義する必要があります。
Verification
Testing role privileges with column restricted user
-
clickhouse_admin
ユーザーで ClickHouse クライアントにログインします -
管理者ユーザーとしてデータベース、テーブル、およびすべての行へのアクセスを確認します。
-
column_user
ユーザーで ClickHouse クライアントにログインします -
すべてのカラムを使用して
SELECT
をテストします注記すべてのカラムが指定されたため、アクセスが拒否されています。ユーザーは
id
とcolumn1
のみアクセス権を持っています。 -
許可されたカラムのみを指定した
SELECT
クエリを確認します:
Testing role privileges with row restricted user
-
row_user
を使用して ClickHouse クライアントにログインします -
利用可能な行を表示します
注記上記の2行のみが返されることを確認します。
column1
にB
の値を持つ行は除外されるべきです。
Modifying Users and Roles
ユーザーには必要な権限の組み合わせのために複数のロールが割り当てられることがあります。複数のロールを使用する場合、システムは権限を決定するためにロールを組み合わせ、ロールの権限は累積的な効果を持つことになります。
たとえば、role1
が column1
のみを選択することを許可し、role2
が column1
と column2
の選択を許可する場合、ユーザーは両方のカラムにアクセスできるようになります。
-
管理者アカウントを使用して、デフォルトのロールで行とカラムの両方で制限する新しいユーザーを作成します
-
A_rows_users
ロールの以前の権限を削除します -
A_rows_users
ロールにcolumn1
のみを選択することを許可します -
row_and_column_user
を使用して ClickHouse クライアントにログインします -
すべてのカラムを含むクエリをテストします:
-
許可されたカラムのみを指定してテストします:
Troubleshooting
権限が交差または組み合わさることで予期しない結果が生じることがあります。以下のコマンドを使用して、管理者アカウントを使用して問題を特定できます。
Listing the grants and roles for a user
List roles in ClickHouse
Display the policies
View how a policy was defined and current privileges
Example commands to manage roles, policies, and users
以下のコマンドを使用して:
- 権限を削除する
- ポリシーを削除する
- ユーザーをロールから外す
- ユーザーとロールを削除する
これらのコマンドは管理者ユーザーまたは default
ユーザーとして実行してください。
Remove privilege from a role
Delete a policy
Unassign a user from a role
Delete a role
Delete a user
Summary
この記事では、SQLユーザーとロールの基本的な作成方法を示し、ユーザーとロールの権限を設定および変更する手順を提供しました。各詳細については、ユーザーガイドおよびリファレンス文書を参照してください。