[7] MySQL は、データベースです。
[2] TLS が有効かどうかは SHOW STATUS LIKE "Ssl_cipher"
で確認できます。
適当な cipher が返ってきたら、 TLS が有効です。
[3] mysql コマンドほかいくつかのクライアントライブラリーは
TLS が指定されていてもそれが適用されなかった場合にも、これをエラーとしないので、
注意が必要です。
[33] mysql クライアントから ClearDB サーバーに接続するには
$ mysql --user=XXX --password=XXX --host=XXX XXX --ssl-ca=cleardb-ca.pem --ssl-cert=XXX-cert.pem --ssl-key=XXX-key.pem
最初の4つのXXXは Heroku の設定変数として設定されている CLEARDB_DATABASE_URL の値から採る。最後の3つのファイルは Heroku の設定ページから ClearDB のページに行き、ダウンロードする (ログイン必要なのでブラウザで保存する)。
秘密鍵のエラーが出る時は (OpenSSL のバージョンの問題らしい)、
$ openssl rsa -in XXX-key.pem -out XXX-key-pkcs1.pem
... として作られたファイルを指定すれば良い。本当に SSL で接続できたかは
SHOW STATUS LIKE 'Ssl_cipher';
... で値が空文字列になっていないかどうかで確認できる。
[34] Perl の DBI で接続する時は
DBI:mysql:database=%s;host=%s;user=%s;password=%s;mysql_ssl=1;mysql_ssl_ca_file=%s;mysql_ssl_client_cert=%s;mysql_ssl_client_key=%s
... のような dsn で同じ要領で接続できる。ただし DBD::mysql は標準では SSL 無効でコンパイルされる。その場合 mysql_ssl* は無視されるので注意しないといけない。無視されるがエラーにならずに平文で接続できてしまう。DBD::mysql インストール時の Makefile.PL でオプション --ssl をつけると SSL 付きでコンパイルされる。 cpanm でインストールするなら --configure-args=--ssl をつければ良い。 pmbp.pl を使うなら今日の版以降は標準で --ssl 付きでコンパイルされる。
SSL なしで接続できてしまうのは怖いが、 MySQL で SSL 固定にするには GRANT ほにゃららを実行するらしい。 ClearDB では GRANT を実行する権限がなさそう (未確認)。
接続時に SHOW STATUS LIKE 'Ssl_cipher' して確認する実装にしておかないと怖い。
[35] AnyEvent::MySQL は SSL に対応していない。
[45]
MySQL :: MySQL 8.0.4 : New Default Authentication Plugin : caching_sha2_password, https://dev.mysql.com/blog-archive/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/
[50]
MySQL :: Preparing your Community Connector for MySQL 8 – part 2 – SHA256, https://dev.mysql.com/blog-archive/preparing-your-community-connector-for-mysql-8-part-2-sha256/
[46] MySQL: Caching_sha2_password information, https://dev.mysql.com/doc/dev/mysql-server/latest/page_caching_sha2_authentication_exchanges.html
[47]
caching_sha2_passwordの仕様の話 - amamanamam, https://amamanamam.hatenablog.com/entry/2023/11/20/215121
[48]
MySQL: Protocol::HandshakeResponse:, https://dev.mysql.com/doc/dev/mysql-server/latest/page_protocol_connection_phase_packets_protocol_handshake_response.html
[49]
ひたすら面倒になっただけに見えるんだが... これ意味あるのかなあ?
[37] Client/Server Protocol - MariaDB Knowledge Base
()
https://mariadb.com/kb/en/library/clientserver-protocol/
[38] library/mariadb - Docker Hub
()
https://hub.docker.com/_/mariadb/
[39] mysql - SQLSTATE[HY000]: General error: 1835 Malformed communication packet on LARAVEL - Stack Overflow
()
https://stackoverflow.com/questions/64677836/sqlstatehy000-general-error-1835-malformed-communication-packet-on-laravel
[40] [MDEV-24121] Recent MariaDB update appears to have introduced a DB connection issue for PHP < 7.3 (or anything using PDO) - Jira
()
https://jira.mariadb.org/browse/MDEV-24121
[44] MariaDB
Can't initialize timers