跳到主要内容
跳到主要内容

常见访问管理查询

自管理

如果您正在使用自管理的 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 角色允许非管理员用户被授予任何实例的只读或完全访问权限。管理员需要配置此访问权限。可以使用 GRANTREVOKE 命令来调整角色,以更好地满足特定实例的需求,并且对这些角色所做的任何修改将被持久化。

细粒度访问控制

此访问控制功能还可以手动配置以实现用户级别的细粒度控制。在将新的 sql_console_* 角色分配给用户之前,应创建与命名空间 sql-console-role:<email> 匹配的 SQL 控制台用户特定数据库角色。例如:

当检测到匹配角色时,它将分配给用户,而不是使用模板角色。这引入了更复杂的访问控制配置,例如创建角色 sql_console_sa_rolesql_console_pm_role 并将其授予特定用户。例如:

Test admin privileges

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

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

Non-admin users

ユーザーは必要な権限を持っている必要があり、すべてが管理者ユーザーである必要はありません。この文書の残りの部分では、例となるシナリオと必要な役割が提供されます。

Preparation

例で使用するために、これらのテーブルとユーザーを作成します。

Creating a sample database, table, and rows

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

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

  3. テーブルにサンプル行を入力します

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

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

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

Creating roles

以下の例セットで:

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

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

  1. このロールのユーザーがデータベース db1table1column1 のみを表示できるように制限するロールを作成します:

  2. column1 の閲覧を許可する権限を設定します

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

  4. このロールのユーザーが選択された行のみを表示できるように制限するロールを作成します。この場合、column1A を含む行のみです。

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

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

  7. データベースおよびテーブルに権限を設定します

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

    备注

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

Verification

Testing role privileges with column restricted user

  1. clickhouse_admin ユーザーで ClickHouse クライアントにログインします

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

  3. column_user ユーザーで ClickHouse クライアントにログインします

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

    备注

    すべてのカラムが指定されたため、アクセスが拒否されています。ユーザーは idcolumn1 のみアクセス権を持っています。

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

Testing role privileges with row restricted user

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

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

    备注

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

Modifying Users and Roles

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

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

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

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

  3. A_rows_users ロールに column1 のみを選択することを許可します

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

  5. すべてのカラムを含むクエリをテストします:

  6. 許可されたカラムのみを指定してテストします:

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ユーザーとロールの基本的な作成方法を示し、ユーザーとロールの権限を設定および変更する手順を提供しました。各詳細については、ユーザーガイドおよびリファレンス文書を参照してください。