Skip to content

MySQL 認可

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

注意

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

テーブル構造とクエリ文

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

  • permission:操作権限を指定し、値は allow または deny
  • action:現在のルールが適用される操作を指定し、値は publishsubscribeall のいずれか。
  • topic:現在のルールが適用されるトピックを指定し、トピックフィルターやトピックプレースホルダーを使用可能。
  • qos:(オプション)ルールが適用されるメッセージの QoS(サービス品質)を指定し、値は 012 または複数の QoS をカンマ区切りで指定(例:0,1)。デフォルトはすべての QoS レベル。
  • retain:(オプション)現在のルールがリテインドメッセージのパブリッシュを許可するかを指定し、値は 01。デフォルトはリテインドメッセージを許可。

テーブル構造の例:

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! が発生した場合は、サーバーアドレスが正しいか、セキュリティグループが開放されているかを確認してください。