MySQL 認可
拡張認可は、MySQLとの統合による認可検証をサポートします。
注意
拡張認可は EMQX サーバレスのデプロイメントではサポートされていません。
テーブル構造とクエリ文
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 認可の設定
デプロイメント画面で アクセス制御 -> 認可 -> 拡張認可 をクリックし、MySQL 認可 を選択して 設定 をクリックします。
以下の手順に従って関連設定を完了できます。
- サーバー:MySQL サーバーのアドレス(host:port)を入力します。
- データベース:MySQL のデータベース名を入力します。
- ユーザー名(任意):ユーザー名を入力します。
- パスワード(任意):パスワードを入力します。
- TLS を有効化:TLS を有効にするかどうかを設定します。
- SQL:テーブル構造に応じたクエリ SQL を入力します。詳細は「SQL テーブル構造とクエリ文」を参照してください。
TIP
- 現在のデプロイメントが Dedicated Flex エディションの場合、VPC ピアリング接続を作成する必要があり、サーバーアドレスは内部ネットワークアドレスを指定してください。
- 現在のデプロイメントが BYOC エディションの場合は、ご利用のパブリッククラウドコンソールで VPC ピアリング接続を作成してください。詳細は BYOC デプロイメントの作成 - VPC ピアリング接続の設定 を参照してください。サーバーアドレスは内部ネットワークアドレスを指定してください。
Init resource failure! が発生した場合は、サーバーアドレスが正しいか、セキュリティグループが開放されているかを確認してください。