MySQL認可
拡張認可は、MySQLとの統合による認可検証をサポートします。
注意
拡張認可は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ピアリング接続の設定を参照してください。サーバーアドレスは内部ネットワークアドレスにしてください。
「Init resource failure!」が発生した場合は、サーバーアドレスの正確性とセキュリティグループの開放状況を確認してください。