# MySQL認可

拡張認可は、MySQLとの統合による認可検証をサポートします。

::: tip 注意

拡張認可はEMQX Serverlessのデプロイメントではサポートされていません。

:::

## テーブル構造とクエリ文

MySQLオーソライザーは、複数テーブルの結合クエリやビューからのクエリを含む任意のテーブル構造をサポートできます。ユーザーはクエリSQLテンプレートを提供する必要があり、クエリ結果には以下のフィールドを含める必要があります。

- `permission`：操作権限を指定し、値は `allow` または `deny` です。
- `action`：現在のルールが適用される操作を指定し、値は `publish`、`subscribe`、`all` のいずれかです。
- `topic`：現在のルールが適用されるトピックを指定し、トピックフィルターやトピックプレースホルダーを使用できます。
- `qos`：（オプション）ルールが適用されるメッセージのQoSを指定し、値は `0`、`1`、`2` または複数のQoSをカンマ区切りで指定（例：`0,1`）できます。デフォルトはすべてのQoSレベルです。
- `retain`：（オプション）現在のルールがリテインメッセージのパブリッシュをサポートするかを指定し、値は `0`、`1` で、デフォルトはリテインメッセージを許可します。

テーブル構造の例：

```sql
CREATE TABLE `mqtt_acl` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(100) NOT NULL,
  `permission` varchar(5) NOT NULL,
  `action` varchar(9) NOT NULL,
  `topic` varchar(100) NOT NULL,
  `qos` tinyint(1),
  `retain` tinyint(1),
  INDEX username_idx(username),
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
```

::: tip

システム内に大量の権限データが存在する場合、クエリに使用するテーブルを最適化し、有効なインデックスを利用して多数の接続時のデータ検索速度を向上させ、EMQXの負荷を軽減してください。

:::

### クエリ文

EMQXで以下のクエリパラメータを設定し、mqtt_aclテーブルとusernameを条件に認可データを検索します。

```sql
SELECT 
  permission, action, topic, qos, retain 
FROM mqtt_acl 
  WHERE username = ${username}
```

## MySQL認可の設定

デプロイメント画面で **Access Control** -> **Authorization** -> **Extended Authorization** をクリックし、**MySQL Authorization** を選択して **Configure** をクリックします。

以下の指示に従い関連設定を完了できます。

- **Server**：MySQLサーバーのアドレス（host:port）を入力します。
- **Database**：MySQLのデータベース名を入力します。
- **Username**（任意）：ユーザー名を入力します。
- **Password**（任意）：パスワードを入力します。
- **Enable TLS**：TLSを有効にするかどうかを設定します。
- **SQL**：テーブル構造に応じたクエリSQLを入力します。詳細は「SQLテーブル構造とクエリ文」を参照してください。

::: tip

- 現在のデプロイメントが専用版の場合、VPCピアリング接続を作成する必要があり、サーバーアドレスは内部ネットワークアドレスにしてください。
- 現在のデプロイメントがBYOC版の場合、ご利用のパブリッククラウドコンソールでVPCピアリング接続を作成してください。詳細は[BYOCデプロイメントの作成 - VPCピアリング接続の設定](../create/byoc.md#vpc-peering-connection-configuration)を参照してください。サーバーアドレスは内部ネットワークアドレスにしてください。

「Init resource failure!」が発生した場合は、サーバーアドレスの正確性とセキュリティグループの開放状況を確認してください。

:::
