> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-fix-nav-issues.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# データベースユーザーの管理

> このページでは、管理者がデータベースユーザーを追加し、割り当てを管理し、削除する方法について説明します

export const Image = ({img, alt, size}) => {
  return <Frame>
      <img src={img} alt={alt} />
    </Frame>;
};

このガイドでは、データベースユーザーを管理する方法として、SQLコンソール上で行う方法と、データベースで直接行う方法の2つを紹介します。

<div id="sql-console-passwordless-authentication">
  ### SQL コンソールのパスワードレス認証
</div>

SQL コンソールのユーザーはセッションごとに作成され、自動的に更新される X.509 証明書を使用して認証されます。セッションが終了すると、そのユーザーは削除されます。監査用のアクセスリストを作成する際は、コンソールで該当サービスの Settings タブに移動し、データベース内に存在するデータベースユーザーに加えて、SQL コンソールのアクセス権も確認してください。カスタムロールが設定されている場合、ユーザーのアクセス権は、そのユーザーのユーザー名で終わるロールに表示されます。

<div id="sql-console-users-and-roles">
  ## SQL コンソールのユーザーとロール
</div>

基本的な SQL コンソールのロールは、Service Read Only および Service Admin の権限を持つユーザーに割り当てることができます。詳細については、[SQL Console ロール割り当ての管理](/ja/products/cloud/guides/security/cloud-access-management/manage-sql-console-role-assignments)を参照してください。このガイドでは、SQL コンソールユーザー用のカスタムロールを作成する方法を説明します。

SQL コンソールユーザー用のカスタムロールを作成し、それに汎用ロールを付与するには、次のコマンドを実行します。メールアドレスは、コンソール上のユーザーのメールアドレスと一致している必要があります。

<Steps>
  <Step>
    #### `database_developer` を作成して権限を付与する

    `database_developer` ロールを作成し、`SHOW`、`CREATE`、`ALTER`、`DELETE` 権限を付与します。

    ```sql theme={null}
    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;
    ```
  </Step>

  <Step>
    #### SQL コンソールユーザー用ロールを作成する

    SQL コンソールユーザー [my.user@domain.com](mailto:my.user@domain.com) 用のロールを作成し、`database_developer` ロールを割り当てます。

    ```sql theme={null}
    CREATE ROLE OR REPLACE `sql-console-role:my.user@domain.com`;
    GRANT database_developer TO `sql-console-role:my.user@domain.com`;
    ```
  </Step>

  <Step>
    #### ユーザーが SQL コンソールを使用すると新しいロールが割り当てられる

    ユーザーが SQL コンソールを使用するたびに、そのメールアドレスに関連付けられたロールが割り当てられます。
  </Step>
</Steps>

<div id="database-authentication">
  ## データベース認証
</div>

<div id="database-user-id--password">
  ### データベースユーザー ID とパスワード
</div>

パスワードを安全に保護するため、[ユーザーアカウントを作成する](/ja/reference/statements/create/user)際は、SHA256\_hash 方式を使用してください。ClickHouse のデータベースパスワードは、12 文字以上で、複雑さの要件を満たしている必要があります。つまり、大文字、小文字、数字、特殊文字のうち必要な種類を含める必要があります。

<Tip>
  **パスワードは安全に生成してください**

  管理者権限を持たないユーザーは自分でパスワードを設定できないため、アカウント設定を依頼する前に、[こちら](https://tools.keycdn.com/sha256-online-generator) のような生成ツールを使って、ユーザー自身にパスワードをハッシュ化してもらってください。
</Tip>

```sql theme={null}
CREATE USER userName IDENTIFIED WITH sha256_hash BY 'hash';
```

<div id="database-ssh">
  ### Secure Shell (SSH) 認証を使用するデータベースユーザー
</div>

ClickHouse Cloud のデータベースユーザーに SSH 認証を設定するには、次の手順を実行します。

1. ssh-keygen を使用して鍵ペアを作成します。
2. 公開鍵を使用してユーザーを作成します。
3. ユーザーにロールや権限を割り当てます。
4. 秘密鍵を使用してサービスに認証します。

例を含む詳しい手順については、ナレッジベースの [SSH 鍵を使用して ClickHouse Cloud に接続する方法](/ja/resources/support-center/knowledge-base/cloud-services/how-to-connect-to-ch-cloud-using-ssh-keys) を参照してください。

<div id="database-permissions">
  ## データベース権限
</div>

SQLの[GRANT](/ja/reference/statements/grant)ステートメントを使用して、サービスおよびデータベースで以下を設定します。

| Role  | Description                                                 |
| :---- | :---------------------------------------------------------- |
| デフォルト | サービスに対する完全な管理アクセス                                           |
| カスタム  | SQLの[`GRANT`](/ja/reference/statements/grant)ステートメントを使用して設定 |

* データベースロールは加算的です。つまり、ユーザーが2つのロールのメンバーである場合、そのユーザーにはその2つのロールのうち、より広いアクセス権が適用されます。ロールを追加してもアクセス権が失われることはありません。
* データベースロールは他のロールに付与できるため、階層構造にできます。ロールは、自身がメンバーであるロールのすべての権限を継承します。
* データベースロールはサービスごとに一意であり、同じサービス内の複数のデータベースに適用できます。

以下の図は、ユーザーに権限を付与するさまざまな方法を示しています。

<Image img="https://mintcdn.com/private-7c7dfe99-fix-nav-issues/pb3p2qvhHWkIWhRw/images/cloud/security/cloud-access-management/user_grant_permissions_options.png?fit=max&auto=format&n=pb3p2qvhHWkIWhRw&q=85&s=e08805d117462cf6ed994e52878cfb36" alt="ユーザーに権限を付与するさまざまな方法を示す図" size="md" background="black" width="626" height="501" data-path="images/cloud/security/cloud-access-management/user_grant_permissions_options.png" />

<div id="initial-settings">
  ### 初期設定
</div>

データベースには `default` というアカウントがあり、サービスの作成時に自動的に追加され、default\_role が付与されます。サービスを作成したユーザーには、サービス作成時に `default` アカウントに割り当てられる、自動生成されたランダムなパスワードが表示されます。このパスワードは初期設定後には表示されませんが、後からコンソールで Service Admin 権限を持つユーザーであれば変更できます。また、このアカウント、またはコンソール内で Service Admin 権限を持つアカウントを使用して、追加のデータベースユーザーやロールをいつでも設定できます。

<Note>
  コンソールで `default` アカウントに割り当てられたパスワードを変更するには、左側の Services メニューから対象のサービスを開き、Settings タブに移動して、Reset password ボタンをクリックします。
</Note>

個人にひも付く新しいユーザーアカウントを作成し、そのユーザーに default\_role を付与することを推奨します。これにより、ユーザーが実行した操作をそのユーザー ID にひも付けて識別でき、`default` アカウントは緊急時対応用の操作のために確保できます。

```sql theme={null}
  CREATE USER userID IDENTIFIED WITH sha256_hash by 'hashed_password';
  GRANT default_role to userID;
```

適切な複雑さを備えた12文字以上のパスワードは、SHA256ハッシュジェネレーターや Python の `hashlib` などの関数を使って SHA256 文字列に変換し、その文字列をパスワードとしてシステム管理者に渡すことができます。これにより、管理者が平文のパスワードを見たり取り扱ったりせずに済みます。

<div id="database-access-listings-with-sql-console-users">
  ### SQL コンソール ユーザーのデータベースアクセス一覧
</div>

以下の手順で、組織内の SQL コンソール とデータベース全体にわたる完全なアクセス一覧を生成できます。

<Steps>
  <Step>
    #### すべてのデータベース権限の一覧を取得する

    以下のクエリを実行して、データベース内のすべての権限の一覧を取得します。

    ```sql theme={null}
    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;
    ```
  </Step>

  <Step>
    #### 権限一覧を SQL コンソール にアクセスできる Console ユーザーに関連付ける

    この一覧を、SQL コンソール にアクセスできる Console ユーザーに関連付けます。

    a. Console に移動します。

    b. 該当するサービスを選択します。

    c. 左側で Settings を選択します。

    d. SQL コンソール access セクションまでスクロールします。

    e. データベースにアクセスできるユーザー数を示すリンク `There are # users with access to this service.` をクリックして、ユーザー一覧を表示します。
  </Step>
</Steps>

<div id="warehouse-users">
  ## ウェアハウスユーザー
</div>

ウェアハウスユーザーは、同じウェアハウス内の各サービス間で共有されます。詳細については、[ウェアハウスのアクセス制御](/ja/products/cloud/features/infrastructure/warehouses#access-controls)を参照してください。
