Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Aurora MySQL 8.4リリース! Rubyistが備えること / what-ruby...

Aurora MySQL 8.4リリース! Rubyistが備えること / what-rubyist-should-prepare-for-aurora-mysql-8-4

関西Ruby会議09の関西LT保安協会「Aurora MySQL 8.4リリース!Rubyistが備えること」の発表スライド
https://regional.rubykaigi.org/kansai09/ #kanrk09

Avatar for Yuki Fukuma

Yuki Fukuma

July 18, 2026

More Decks by Yuki Fukuma

Other Decks in Technology

Transcript

  1. ⾃⼰紹介 • ふくま ◦ @fkm_y @fkmy ◦ ⼤阪在住2年⽬ ◦ 参加コミュニティ

    ▪ Kyobashi.rb ◦ 初参加の関⻄Ruby会議は04 ◦ 株式会社Leaner Technologies 2
  2. MySQLのLTSと各DBaaSの対応状況 MySQL LTS v5.7 ––––––––––––– v8.0 ––––––––––––– v8.4 ––––––––––––– v8.4

    v9.7 Aurora MySQL 待望の MySQL v8.4 対応! ※LTSはまだ公開されていない DBaaS v8.4 提供開始 Amazon RDS for MySQL 2024-11-21 Amazon Aurora MySQL 2026-05-21 ★ Google Cloud SQL for MySQL 2024-10-01 Azure Database for MySQL 2025-09 5
  3. MySQL互換のDatabase Adapter trilogy MySQL プロトコル‧認証‧TLSを⾃前実装。 ssl_mode等の挙動はすべて⾃分で定義。 Rails → trilogy gem

    ⾃前実装 → OpenSSL → MySQL mysql2 認証‧TLSは MySQLクライアントライブラリ(libmysqlclient / libmariadb)に移譲 Rails → mysql2 gem → libmysqlclient → OpenSSL → MySQL 6
  4. TLS(SSL)のデフォルト有効化 [mysqld] require_secure_transport = ON ※Aurora MySQL 8.4のデフォルト値 デフォルト値なので後からの変更は可能 対応しないとどうなるか?

    エラーが表⽰されて接続できなくなる Connections using insecure transport are prohibited while --require_secure_transport=ON. (ActiveRecord::ConnectionNotEstablished) ※利⽤アダプタによってメッセージに追記あり 9
  5. TLS(SSL)のデフォルト有効化への対応 ローカルで動いてたのに本番でエラー…とならないために! ローカル MySQL8.4 require_secure_transport 本番 Aurora MySQL 8.4 require_secure_transport

    OFF(デフォルト) DISABLED trilogy ssl_mode → DISABLED trilogy ssl_mode ✔ 接続成功 ON(デフォルト) ❌ 接続失敗 対応: ローカルのMySQLでも require_secure_transport を ON にしておく 10
  6. TLS(SSL)のデフォルト有効化への対応 database.yml で ssl_mode の設定 ssl_mode値 説明 disabled TLS不使⽤(平⽂) preferred

    TLSを試み、ダメなら平⽂ required TLS必須、証明書検証なし verify_ca TLS必須 + CA検証 verify_identity TLS必須 + CA検証 + ホスト名検証 ← trilogyのデフォルト値 mysql2のデフォルト値は MySQLクライアントライブラリ に依存 TLS必須化の要件を満たすには、最低限 preferred 以上 が必要で required 以上が推奨 11
  7. TLS(SSL)のデフォルト有効化への対応 database.yml の設定例(trilogy) default: &default adapter: trilogy 環境毎にssl_modeを変えることもできます # 本番

    production: <<: *default ssl_mode: verify_identity ssl_ca: /path/to/global-bundle.pem # ローカル開発 development: <<: *default ssl_mode: required 本番環境では TLS必須 + CA検証 + ホスト名検証 ローカルでは 最低限の TLS必須のみ mysql2では sslca 12
  8. Aurora MySQL v8.4の主な変更 1 2 TLS(SSL)のデフォルト有効化 require_secure_transport が デフォルトONに。TLS 未設定のアプリは繋がらなくなる。

    デフォルト認証プラグインの変更 mysql_native_password → caching_sha2_password へ ※デフォルト認証プラグインの変更は、コミュニティ版 MySQL では v8.0 から変更済み。 Aurora にとっては 8.4 が初めての変更 13
  9. デフォルト認証プラグインの変更 クライアント MySQLサーバー 接続要求 nonce + 認証プラグイン名 アカウントに紐づく 認証プラグインによるフロー 認証レスポンス

    アカウントA 認証プラグイン: mysql_native_password アカウントB 認証プラグイン: mysql_native_password アカウントC 認証プラグイン: caching_sha2_password デフォルト認証プラグイン mysql_native_password OK / NG → caching_sha2_password 14
  10. mysql_native_password クライアント MySQLサーバー nonce + “mysql_native_password”(プラグイン名) token = SHA1(password) XOR

    SHA1(nonce || stored_hash) token mask = SHA1(nonce || stored_hash) token XOR mask から SHA1(password) を得る SHA1(SHA1(password)) == stored_hash を確認 OK / NG 15
  11. caching_sha2_password(Fast Authentication) クライアント MySQLサーバー nonce + “caching_sha2_password”(プラグイン名) token = SHA256(password)

    XOR SHA256(known || nonce) token mask = SHA256(known || nonce) token XOR mask から SHA256(password) を得る SHA256(SHA256(password)) == known を確認 OK / NG 16
  12. caching_sha2_password(Full Authentication)SSLあり クライアント MySQLサーバー nonce + “caching_sha2_password”(プラグイン名) token Full Auth

    要求 SSLあり キャッシュにないことを確認 平⽂パスワード OK / NG 検証後キャッシュに追加 17
  13. caching_sha2_password(Full Authentication)SSLなし クライアント MySQLサーバー nonce + “caching_sha2_password”(プラグイン名) token Full Auth

    要求 SSLなし キャッシュにないことを確認 RSA公開鍵の要求 RSA公開鍵 RSA暗号化パスワード OK / NG 検証後キャッシュに追加 18
  14. デフォルト認証プラグインの変更への対応 認証プラグインの選択はDB側 trilogy/mysql2 が caching_sha2_passwordのプラグインをサポートしているか caching_sha2_password 対応バージョン ケース trilogy mysql2

    TLS接続 v2.8.0 PR #165 (2024-03-22) MySQLクライアントライブラリに依存 (MySQL 8.0以降) ⾮TLS接続 v2.11.0 PR #262 (2026-01-30) v0.5.7 PR #1377 (2024-09-06) get_server_public_keyオプション追加 19
  15. デフォルト認証プラグインの変更への対応 MySQL 8.0 から caching_sha2_password がデフォルト Aurora MySQL v3(MySQL8.0互換)をお使いの⽅のローカルのMySQLはv8.0… 既にローカル環境のユーザーの認証プラグインは

    caching_sha2_password に なっている可能性が⾼い! つまり、gemのバージョンアップ対応が不要の可能性が⾮常に⾼い! ※ Vanilla MySQL 9.xで mysql_native_password は削除済みなので そのうちAurora MySQLでも削除されると思うのでどこかのタイミングで移⾏は必要そう 20
  16. まとめ • 待望のAurora MySQL 8.4 がリリースされて、 TLS‧認証プラグインのデ フォルト設定などが変更された • TLS必須に対してはtrilogyは設定変更が必須、mysql2はMySQLクライアン

    トライブラリ依存…required以上にしておこう • 認証プラグイン caching_sha2_password に対応する場合、 gemを対応バージョンまで上げる必要があるが、 既に対応するバージョンになっている可能性が⾼い 21