# ユーザー管理

EMQX Tables は、デプロイメントレベルのアクセス制御のためにカスタムユーザーをサポートしています。ユーザーを作成し、データベースおよびテーブルへのアクセス権を割り当て、EMQX ブローカーや外部クライアントが EMQX Tables に接続する際にこれらのユーザーを使用できます。

ユーザー管理は新しい EMQX Tables デプロイメントでのみ利用可能です。新しいデプロイメントでは、デプロイメント詳細にデフォルトのユーザー名やパスワードが返されないため、EMQX ブローカーや外部クライアントを接続する前にユーザーを作成する必要があります。古いデプロイメントではカスタムユーザーや権限設定がサポートされておらず、デプロイメント詳細に表示されるデフォルトの認証情報を使用する場合があります。

::: tip 注意

各 EMQX Tables デプロイメントは最大10ユーザーまでサポートします。

:::

## ユーザーの表示

ユーザーを表示するには：

1. EMQX Cloud コンソールにログインし、対象の EMQX Tables デプロイメントを開きます。
2. 左メニューから **ユーザー管理** をクリックします。
3. 既存のユーザー、その権限、アクセス制御設定、最終更新日時を確認します。

![emqx_tables_user_management](./_assets/user_management.png)

### ユーザーの追加

1. **ユーザー管理** ページで **+ ユーザー追加** をクリックします。
2. 以下の情報を入力します：
   - **ユーザー名**：カスタムのユーザー名を入力します。
   - **パスワード**：ユーザーのパスワードを入力します。パスワードは後から取得できず、リセットのみ可能なので忘れないようにしてください。
   - **権限**：プリセットされた権限グループのいずれかを選択するか、**カスタム** を選択して [権限](#privileges) のドロップダウンから手動で権限を選択します。
   - **アクセス制御**：データベースレベルまたはテーブルパターンレベルのアクセス権を付与します。
3. **確認** をクリックします。

![emqx_tables_add_user](./_assets/add_user.png)

デプロイメントにすでに10ユーザーが存在する場合、**+ ユーザー追加** は無効化されます。ボタンにカーソルを合わせると制限の注意が表示されます。

### ユーザーの編集

1. **ユーザー管理** ページで、**アクション** 列の編集アイコンをクリックします。
2. パスワード、権限、アクセス制御設定を更新します。
3. **確認** をクリックします。

ユーザー名は編集時に変更できません。現在のパスワードを保持する場合は、**パスワード** フィールドを空のままにしてください。

### ユーザーの削除

**ユーザー管理** ページで、**アクション** 列の削除アイコンをクリックし、操作を確認します。

ユーザーを削除する前に、そのユーザー名を使用しているアクティブなコネクターや外部クライアントがないことを必ず確認してください。削除されたユーザーを使った接続は認証に失敗します。

## 権限

権限は、ユーザーが EMQX Tables 内で実行できる操作を定義します。

| 権限 | 説明 |
| --- | --- |
| `SqlSelect` | SQL を使ってデータをクエリする権限。 |
| `SqlInsert` | SQL または Line Protocol を使ってデータを書き込む権限。 |
| `SqlDelete` | SQL を使ってデータを削除する権限。 |
| `DatabaseCreate` | データベースを作成する権限。 |
| `DatabaseAlter` | データベースを変更する権限。 |
| `DatabaseDrop` | データベースを削除する権限。 |
| `TableCreate` | テーブルを作成する権限。 |
| `TableDrop` | テーブルを削除する権限。 |
| `TableAlter` | テーブル定義を変更する権限。 |
| `TriggerCreate` | トリガーを作成する権限。 |
| `TriggerDrop` | トリガーを削除する権限。 |
| `TriggerAlter` | トリガーを変更する権限。 |

EMQX Cloud では、EMQX Tables ユーザーに対して `Admin`、`FlowCreate`、`FlowDrop` 権限はサポートされていません。

プリセットされた権限グループは以下の通りです：

| プリセット | 含まれる権限 |
| --- | --- |
| **読み取り専用** | `SqlSelect` |
| **書き込み専用** | `SqlInsert`、`SqlDelete`、`TableCreate`、`TableAlter`、`TableDrop`、`TriggerCreate`、`TriggerDrop`、`TriggerAlter`、`DatabaseCreate`、`DatabaseAlter`、`DatabaseDrop` |
| **読み書き両方** | **読み取り専用** + **書き込み専用** の権限 |
| **ブローカー連携** | `SqlSelect`, `SqlInsert` |
| **カスタム** | SQL、テーブル、データベース、トリガーの各グループから1つ以上の権限を手動で選択 |

![emqx_tables_custom_privileges](./_assets/custom_privileges.png)

::: tip

EMQX ブローカーのデータ統合コネクターで EMQX Tables ユーザーを使用する場合、そのユーザーは `SqlSelect` と `SqlInsert` の両方の権限を持っている必要があります。これらの権限を付与するには、**ブローカー連携** プリセットを選択してください。

:::

## アクセス制御

アクセス制御は、ユーザーがアクセスできるデータベースおよびテーブルを定義します。EMQX Tables は以下の2つのアクセス制御モードをサポートしています：

- **データベースを選択**：選択したデータベース内のすべてのテーブルへのアクセスを許可します。
- **各データベースにパターンを使用**：各データベースに設定された正規表現パターンに一致するテーブル名のみアクセスを許可します。例：`^tmp_.*` は名前が `tmp_` で始まるテーブルにマッチします。

![emqx_tables_use_pattern_for_each_database](./_assets/add_user_use_pattern_for_each_database.png)

ACL エントリーは同一ユーザーに対して混合モードをサポートしません。データベースレベルのアクセスかパターンベースのアクセスのいずれか一方を一貫して設定してください。

EMQX ブローカーのデータ統合コネクターでユーザーを使用する場合、選択したユーザー名は対象の **データベース名** にアクセスできる必要があります。**データベース名** を入力または変更すると、EMQX Cloud は選択されたユーザー名に対して検証を行い、アクセス権がない場合はエラーを表示します。

## データ統合でのユーザー利用

EMQX ブローカーのデプロイメントから EMQX Tables コネクターを作成する際、**ユーザー名** ドロップダウンからユーザーを選択します。このドロップダウンには選択された EMQX Tables デプロイメントのすべてのユーザーが表示されます。コンソールは権限やデータベースアクセスによるフィルターは行いません。

ユーザーを選択した後、ユーザーのパスワードと対象のデータベース名を入力します。コネクターは以下を検証します：

- 選択したユーザーが `SqlSelect` と `SqlInsert` の両方の権限を持っているか。
- 選択したユーザーが対象のデータベースにアクセスできるか。

詳細なコネクター設定手順は、[EMQX Tables への MQTT データ取り込み](../data_integration/emqx_tables.md#create-an-emqx-tables-connector) を参照してください。
