Slide 1

Slide 1 text

Confidential 1 MariaDB Connector/C のcaching_sha2_password プラグインの仕様について MyNA(日本MySQLユーザ会) 望年LT大会2025@新宿 @amamanamam

Slide 2

Slide 2 text

Confidential Confidential 自己紹介 2 くぼ ● DBREやってます ● MySQL 8.0から仲良くなり始めました ● クラフトビールをよく飲みます ● Xはこちら ○ https://twitter.com/amamanam am

Slide 3

Slide 3 text

Confidential Confidential 現場の効率化から経営改善まで一元管理できる クラウド型建設プロジェクト管理サービス 社 内 社 外 営業 / 監督 / 設計 事務 / 管理職 職人 / 業者 メーカー / 流通 案件管理 資料 工程表 写真 報告 チャット 黒板 図面 受発注 ● ● ● 
 3 ANDPADとは

Slide 4

Slide 4 text

Confidential Confidential 発表元の記事 4 https://tech.andpad.co.jp/entry/2025/06/17/100000

Slide 5

Slide 5 text

Confidential Confidential 目次 背景 caching_sha2_passwordの復習 caching_sha2_password移行で起きた事象 MariaDB Connector/Cのプラグインについて まとめ 1 2 3 4 5 5

Slide 6

Slide 6 text

Confidential Confidential 背景 6 ● Aurora MySQLの認証プラグインを caching_sha2_password 認証へ移行中 ● Aurora V3.04(compatible MySQL8.0.28) ではまだmysql_native_passwordは使える ● プロダクトの多さを見越して先に着手

Slide 7

Slide 7 text

Confidential Confidential caching_sha2_passwordの復習 7 ● パスワードハッシュ方式(SHA-256)に基づいた認証 ● 初回の接続時にSSL/TLSなどセキュアな通信経路を必要と する ● 一度、接続が成功したらその認証情報をDBサーバが キャッシュし、2回目からはそのキャッシュを用いて認証 を行う ● そのため2回目以降はセキュアな通信経路を必要としない

Slide 8

Slide 8 text

Confidential Confidential caching_sha2_passwordの復習 8 ↓認証フローチャートはこちら https://dev.mysql.com/doc/de v/mysql-server/latest/page_ca ching_sha2_authentication_ex changes.html

Slide 9

Slide 9 text

Confidential Confidential caching_sha2_passwordの復習 9 https://speakerdeck.com/boro1234/caching-sha2-passwordnohanasi

Slide 10

Slide 10 text

Confidential Confidential caching_sha2_password移行で起きた事象 10 ● Redashのcaching_sha2_password認証の 対応状況の調査 ● ローカル環境は接続できるのに、staging 環境が接続できない現象に遭遇 ● それぞれのDBクライアントのバージョン は同じ(mysqlclient 2.2.1 で非対応) なぜローカルで接続できる??

Slide 11

Slide 11 text

Confidential Confidential caching_sha2_password移行で起きた事象 11 ローカル環境 Staging環境 cachign_sha2_password接続 できる できない 環境 MySQL on Dockerコンテナ Aurora MySQL DBドライバ mysqlclient 2.2.1 mysqlclient 2.2.1

Slide 12

Slide 12 text

Confidential Confidential caching_sha2_password移行で起きた事象 12 ● Redashではstagingもローカルも共に libmariadb3を利用している ● ローカルでmariadbコマンドクライアント で接続を試したところ、接続可能だった クライアントライブラリレベル の差が原因であると予想

Slide 13

Slide 13 text

Confidential Confidential MariaDB Connector/Cのプラグインについて 13 ● libmariadb3のパッケージに caching_sha2_passwordに関するプラグ インが存在することが分かった ● ただし、MariaDB Connector/Cのバー ジョン3.0.8以上の場合に存在する https://github.com/mariadb-corporation/mariadb-connector-c/blob/4 61a2c79ea63406065a6237bf1043a250099565d/plugins/auth/caching _sha2_pw.c

Slide 14

Slide 14 text

Confidential Confidential MariaDB Connector/Cのプラグインについて 14 /* if no public key file was specified or if we couldn't read the file, we ask server to send public key */ if (!filebuffer) { unsigned char request= REQUEST_PUBLIC_KEY; if (vio->write_packet(vio, &request, 1) || (packet_length=vio->read_packet(vio, &packet)) == -1) { mysql->methods->set_error(mysql, CR_AUTH_PLUGIN_ERR, "HY000", "Couldn't read RSA public key from server"); return CR_ERROR; } } ● 実際にソースを見ると公開鍵のリクエスト している部分が見られた

Slide 15

Slide 15 text

Confidential Confidential MariaDB Connector/Cのプラグインについて 15 ● DBドライバ側で 公開鍵の受け渡しに対応 していなくても、MariaDB Connector/C が自動的にやりとりし、初回のセキュアな 経路は確保できる libmariadb3のバージョンを上げれ ばstagingでも疎通できるはず

Slide 16

Slide 16 text

Confidential Confidential caching_sha2_password移行で起きた事象 16 ローカル環境 Staging環境 cachign_sha2_password接続 できる できない 環境 MySQL on Dockerコンテナ Aurora MySQL DBドライバ mysqlclient 2.2.1 mysqlclient 2.2.1 クライアントライブラリ MariaDB Connector/C 3.08以上 MariaDB Connector/C 3.08未満

Slide 17

Slide 17 text

Confidential Confidential MariaDB Connector/Cのプラグインについて 17 RSA Encryption not supported - caching_sha2_password plugin was built with GnuTLS support …と思ったが別のエラーが発生

Slide 18

Slide 18 text

Confidential Confidential MariaDB Connector/Cのプラグインについて 18 ● MariaDB Connector/Cをビルドする際にcmakeのオプ ションでWITH_SSL=GNUTLSが指定されている場 合、エラーを常に返す #if defined(HAVE_GNUTLS) mysql->methods->set_error(mysql, CR_AUTH_PLUGIN_ERR, "HY000", "RSA Encryption not supported - caching_sha2_password plugin was built with GnuTLS support"); return CR_ERROR;

Slide 19

Slide 19 text

Confidential Confidential MariaDB Connector/Cのプラグインについて 19 ● stagingのlibmariadb3はGnuTLSを指定してビルド していそうなことが判明 ● ローカルで問題なく接続ができた理由はGnuTLSで なくOpenSSLを使うようにビルドされていたため ● Debian 12(bookworm)でのlibmariadb3は OpenSSLを使うようにビルドされているようで、 Debian 10(buster)はGnuTLSを使うようにビル ドされていた Redashのバージョンを上げて解決

Slide 20

Slide 20 text

Confidential Confidential caching_sha2_password移行で起きた事象 20 ローカル環境 Staging環境 cachign_sha2_password接続 できる できない 環境 MySQL on Dockerコンテナ Aurora MySQL DBドライバ mysqlclient 2.2.1 mysqlclient 2.2.1 クライアントライブラリ MariaDB Connector/C 3.08以上 MariaDB Connector/C 3.08以上 OS Debian 12(bookworm) Debian 10(buster)

Slide 21

Slide 21 text

Confidential Confidential まとめ 21 ● MariaDB Connector/C は caching_sha2_password 認証の初回接続 時のセキュアな通信経路確保を自動的に行 なってくれる ● しかし、これには OpenSSLでビルドされ ている必要がある

Slide 22

Slide 22 text

Confidential Confidential 参考 22 ● Protecting MySQL Passwords With the sha256_password Plugin ● MySQL 8.0.4 : New Default Authentication Plugin : caching_sha2_password ● Caching_sha2_password information