このガイドでは、データベースユーザーを管理する方法として、SQLコンソール上で行う方法と、データベースで直接行う方法の2つを紹介します。
SQL コンソールのパスワードレス認証
SQL コンソールのユーザーはセッションごとに作成され、自動的に更新される X.509 証明書を使用して認証されます。セッションが終了すると、そのユーザーは削除されます。監査用のアクセスリストを作成する際は、コンソールで該当サービスの Settings タブに移動し、データベース内に存在するデータベースユーザーに加えて、SQL コンソールのアクセス権も確認してください。カスタムロールが設定されている場合、ユーザーのアクセス権は、そのユーザーのユーザー名で終わるロールに表示されます。
SQL コンソールのユーザーとロール
基本的な SQL コンソールのロールは、Service Read Only および Service Admin の権限を持つユーザーに割り当てることができます。詳細については、SQL Console ロール割り当ての管理を参照してください。このガイドでは、SQL コンソールのユーザー用のカスタムロールを作成する方法を説明します。
SQL コンソールのユーザー用のカスタムロールを作成し、それに汎用ロールを付与するには、次のコマンドを実行します。メールアドレスは、コンソール上のユーザーのメールアドレスと一致している必要があります。
[object Object]
database_developer ロールを作成し、SHOW、CREATE、ALTER、DELETE 権限を付与します。
CREATE ROLE OR REPLACE database_developer;
GRANT SHOW ON * TO database_developer;
GRANT CREATE ON * TO database_developer;
GRANT ALTER ON * TO database_developer;
GRANT DELETE ON * TO database_developer;SQL コンソールのユーザー用ロールを作成する
SQL コンソールのユーザー my.user@domain.com 用のロールを作成し、database_developer ロールを割り当てます。
CREATE ROLE OR REPLACE `sql-console-role:my.user@domain.com`;
GRANT database_developer TO `sql-console-role:my.user@domain.com`;ユーザーが SQL コンソールを使用すると新しいロールが割り当てられる
ユーザーが SQL コンソールを使用するたびに、そのメールアドレスに関連付けられたロールが割り当てられます。
データベース認証
データベースユーザー ID とパスワード
パスワードを安全に保護するため、ユーザーアカウントを作成する際は、SHA256_hash 方式を使用してください。ClickHouse のデータベースパスワードは、12 文字以上で、複雑さの要件を満たしている必要があります。つまり、大文字、小文字、数字、特殊文字のうち必要な種類を含める必要があります。
CREATE USER userName IDENTIFIED WITH sha256_hash BY 'hash';Secure Shell (SSH) 認証を使用するデータベースユーザー
ClickHouse Cloud のデータベースユーザーに SSH 認証を設定するには、次の手順を実行します。
- ssh-keygen を使用して鍵ペアを作成します。
- 公開鍵を使用してユーザーを作成します。
- ユーザーにロールや権限を割り当てます。
- 秘密鍵を使用してサービスに認証します。
例を含む詳しい手順については、ナレッジベースの SSH 鍵を使用して ClickHouse Cloud に接続する方法 を参照してください。
データベース権限
SQLのGRANTステートメントを使用して、サービスおよびデータベースで以下を設定します。
| Role | Description |
|---|---|
| デフォルト | サービスに対する完全な管理アクセス |
| カスタム | SQLのGRANTステートメントを使用して設定 |
- データベースロールは加算的です。つまり、ユーザーが2つのロールのメンバーである場合、そのユーザーにはその2つのロールのうち、より広いアクセス権が適用されます。ロールを追加してもアクセス権が失われることはありません。
- データベースロールは他のロールに付与できるため、階層構造にできます。ロールは、自身がメンバーであるロールのすべての権限を継承します。
- データベースロールはサービスごとに一意であり、同じサービス内の複数のデータベースに適用できます。
以下の図は、ユーザーに権限を付与するさまざまな方法を示しています。

初期設定
データベースには default というアカウントがあり、サービスの作成時に自動的に追加され、default_role が付与されます。サービスを作成したユーザーには、サービス作成時に default アカウントに割り当てられる、自動生成されたランダムなパスワードが表示されます。このパスワードは初期設定後には表示されませんが、後からコンソールで Service Admin 権限を持つユーザーであれば変更できます。また、このアカウント、またはコンソール内で Service Admin 権限を持つアカウントを使用して、追加のデータベースユーザーやロールをいつでも設定できます。
個人にひも付く新しいユーザーアカウントを作成し、そのユーザーに default_role を付与することを推奨します。これにより、ユーザーが実行した操作をそのユーザー ID にひも付けて識別でき、default アカウントは緊急時対応用の操作のために確保できます。
CREATE USER userID IDENTIFIED WITH sha256_hash by 'hashed_password';
GRANT default_role to userID;適切な複雑さを備えた12文字以上のパスワードは、SHA256ハッシュジェネレーターや Python の hashlib などの関数を使って SHA256 文字列に変換し、その文字列をパスワードとしてシステム管理者に渡すことができます。これにより、管理者が平文のパスワードを見たり取り扱ったりせずに済みます。
SQL コンソールのユーザーのデータベースアクセス一覧
以下の手順で、組織内の SQL コンソール とデータベース全体にわたる完全なアクセス一覧を生成できます。
すべてのデータベース権限の一覧を取得する
以下のクエリを実行して、データベース内のすべての権限の一覧を取得します。
SELECT grants.user_name,
grants.role_name,
users.name AS role_member,
grants.access_type,
grants.database,
grants.table
FROM system.grants LEFT OUTER JOIN system.role_grants ON grants.role_name = role_grants.granted_role_name
LEFT OUTER JOIN system.users ON role_grants.user_name = users.name
UNION ALL
SELECT grants.user_name,
grants.role_name,
role_grants.role_name AS role_member,
grants.access_type,
grants.database,
grants.table
FROM system.role_grants LEFT OUTER JOIN system.grants ON role_grants.granted_role_name = grants.role_name
WHERE role_grants.user_name is null;権限一覧を SQL コンソール にアクセスできる Console ユーザーに関連付ける
この一覧を、SQL コンソール にアクセスできる Console ユーザーに関連付けます。
a. Console に移動します。
b. 該当するサービスを選択します。
c. 左側で Settings を選択します。
d. SQL コンソールのアクセス権 セクションまでスクロールします。
e. データベースにアクセスできるユーザー数を示すリンク There are # users with access to this service. をクリックして、ユーザー一覧を表示します。
Warehouse ユーザー
Warehouse ユーザーは、同じ Warehouse 内のサービス間で共有されます。詳しくは、Warehouse のアクセス制御を参照してください。