# Vitess v23.0.8

> Storage & Data · 2026-10-13

SQLインジェクションと認可に関する脆弱性を修正し、SQL の解釈、文字セット、解析、テーブル ACL、`VExplain` の実行条件を厳格化した保守リリースです。`sql_mode` や接続文字セットなどの設定によっては、運用環境の構成変更が必要になります。

## 要対応
- **[security]** グローバル `SET` 変数名処理修正
  - グローバル `SET` 変数名を経由した SQL インジェクションを修正しました。`GHSA-m282-7w35-g77m` に対応しています。
- **[security]** 日時リテラル処理修正
  - `DATE`、`TIME`、`TIMESTAMP` リテラルを経由した SQL インジェクションを修正しました。`GHSA-9248-hccp-qf8f` に対応しています。
- **[security]** `SET_VAR` ヒントのセッション変数値処理修正
  - `SET_VAR` ヒントに含まれるセッション変数値を経由した SQL インジェクションを修正しました。`GHSA-9rx3-8pwm-c228` に対応しています。
- **[security]** 末尾コメント内 SQL の解析と ACL チェック修正
  - 末尾コメントに隠された SQL が解析とテーブル ACL のチェックをすり抜ける問題を修正しました。`GHSA-pfg5-ppc7-ff45` に対応しています。
- **[security]** 数値バインド変数の処理修正
  - 形式不正な数値バインド変数を経由した SQL インジェクションを修正しました。`GHSA-xf67-9r78-xv82` に対応しています。
- **[breaking]** 空の名前の拒否
  - 空の文字セット名、照合順序名、エンジン名、パーティション用テーブルスペース名が拒否されるようになりました。
- **[breaking]** `ENCRYPTION` 値の引用符必須化
  - `ENCRYPTION` に指定する値に引用符が必要になりました。

## 影響確認
- **[security]** 全テーブル権限を持つ呼び出し元のテーブル ACL 判定
  - 適用対象はリリースノートに明記されていません。
  - `"table_names_or_prefixes": ["%"]` で全テーブルを対象にするテーブルグループについて、読み取り、書き込み、管理者のすべての権限を持つ呼び出し元は、文が触れる可能性のあるテーブルで全ロールを持つと判定されます。そのため、`DO`、`REPAIR`、`OPTIMIZE`、部分的に解析された `CREATE TABLE` が実行されるようになりました。対象となる設定には `--queryserver-config-strict-table-acl` と `--queryserver-config-acl-exempt-acl` があります。`GHSA-w6mx-2f8x-pqf4` に対応しています。
- **[security]** 接続文字セットの許可範囲変更
  - `--db-charset` を設定している場合に適用されます。
  - `--db-charset` を含む MySQL 接続の文字セット設定で、`sjis`、`cp932`、`gb18030`、`gbk`、`big5`、`ucs2`、`utf16`、`utf16le`、`utf32` が、文字セット名でも照合順序名でも受け付けられなくなりました。`GHSA-c28j-qmfx-4gxp` に対応しています。
- **[security]** `VExplain` の実行文とトランザクション制限
  - `VExplain` を使用している場合に適用されます。
  - 対象のモードで `VTAdmin` が受け付けるのは、`INTO`、シーケンスの next-value、アドバイザリロック関数を含まない `SELECT` だけになりました。実行は読み取り専用トランザクションで行われ、常にロールバックされます。`GHSA-c2r8-grjp-w8c2` に対応しています。
- **[security]** `VStream` の LastPK 値経由の SQL インジェクション修正
  - `VStream` を実行している場合に適用されます。
  - `VStream` の LastPK 値を経由した SQL インジェクションを修正しました。`GHSA-73pp-99vw-h5g8` に対応しています。
- **[security]** `VStream` フィルターの `convert_tz()` 引数処理修正
  - `VStream` を実行している場合に適用されます。
  - `VStream` フィルターの `convert_tz()` 引数を経由した SQL インジェクションを修正しました。`GHSA-92cc-q2h6-m2vr` に対応しています。
- **[security]** Online DDL のテーブル名処理修正
  - Online DDL を実行している場合に適用されます。
  - Online DDL 文のテーブル名を経由した SQL インジェクションを修正しました。`GHSA-8w3p-4xg5-rm9w` に対応しています。
- **[security]** クエリー注釈の caller ID 処理修正
  - `--queryserver-config-annotate-queries` を設定している場合に適用されます。
  - クエリー注釈の caller ID を経由した SQL インジェクションを修正しました。対象設定は `--queryserver-config-annotate-queries` です。`GHSA-x56j-8c72-5xgg` に対応しています。
- **[security]** `VTAdmin` の状態変更 API におけるクロスサイト `GET` 対策
  - `VTAdmin` を実行している場合に適用されます。
  - クラスタ状態を変更する `VTAdmin` API ルートが、サイトをまたぐ `GET` リクエストを受け付けていた問題を修正しました。`GHSA-3fr2-mqr5-r5x5` に対応しています。
- **[security]** `ReloadSchemaShard` の RBAC 検証
  - `ReloadSchemaShard` を使用している場合に適用されます。
  - `VTAdmin` の `ReloadSchemaShard` が RBAC を確認していなかった問題を修正しました。`GHSA-78h7-x6qm-xpr8` に対応しています。
- **[breaking]** `VTGate` の `sql_mode` 割り当て検証
  - `VTGate` を実行している場合に適用されます。
  - `VTGate` が MySQL 8.x の `sql_mode` 割り当て semantics を実装し、すべての割り当てを検証するようになりました。
- **[breaking]** `IGNORE_SPACE` と `HIGH_NOT_PRECEDENCE` の拒否
  - `sql_mode` を設定している場合に適用されます。
  - `IGNORE_SPACE` と `HIGH_NOT_PRECEDENCE` も拒否されるようになりました。
- **[breaking]** `sql_mode` の不正値に対する MySQL 互換エラー
  - `sql_mode` を設定している場合に適用されます。
  - 不明なモード名と無効な数値には、MySQL と同じエラーが返されます。通常の不正値には `ER_WRONG_VALUE_FOR_VAR` (1231)、MySQL 8.0 で削除されたモードのビットには `ER_UNSUPPORTED_SQL_MODE` (3899) が使われます。
- **[breaking]** `VTTablet` の `sql_mode` 検証
  - `VTTablet` を実行している場合に適用されます。
  - `VTTablet` でも各エントリポイントで同じ検証を行い、同じエラーを返すようになりました。
- **[breaking]** 接続時の `sql_mode` から解釈変更モードを除去
  - `sql_mode` を設定している場合に適用されます。
  - Vitess が作成するすべての MySQL 接続で、サーバーのグローバル値から継承したセッション `sql_mode` から、SQL テキストの解釈を変えるモードが取り除かれます。

## その他の記録された変更
- 7 (value_changed 7)

[分析の詳細](https://ratatosk.io/ja/releases/vitess/v23.0.8)

[元のリリースノート](https://github.com/vitessio/vitess/releases/tag/v23.0.8)
