Skip to content

MySQL認可

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

注意

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

テーブル構造とクエリ文

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認可の設定

デプロイメント画面で 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!」が発生した場合は、サーバーアドレスの正確性とセキュリティグループの開放状況を確認してください。