常见访问管理查询
如果您正在使用自管理的 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
,其权限与 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ユーザーとロールの基本的な作成方法を示し、ユーザーとロールの権限を設定および変更する手順を提供しました。各詳細については、ユーザーガイドおよびリファレンス文書を参照してください。