AuditConsoleとMySQL8

AuditConsoleとMySQL8

久しぶりにAuditConsoleでも見てみるかとアクセスしてみると、認証が通らない。
どうしたことかとログをみると、MySQL側で認証を弾いている。おかしいなあ。

リセットしてみる。
MySQLにつなげて以下。

mysql> update USERS set password='md5:.....' where login='admin' ;

md5:以下の文字列は標準出力からmd5sumに食わせてだしたもの。

これで再起動。やっぱりNG。うーんなぜだ。

あそうか

MySQLってパスワード形式が新しくなって、古いクライアントからだとNGなんだっけ。MySQL側にこんなログがでてる。

2020-06-25T06:15:15.265888Z      3478 Connect   Client does not support authentication protocol requested by server; consider upgrading MySQL client

えーとそうすると、MySQLに接続するときのユーザ名に対する認証を古いパスワード形式で保存すればいいかな。ということでやってみる。

古い形式でパスワードを保存

mysql>alter user 'wacUser'@'hogehoge' identified with mysql_native_password by 'hogehoge' ;

さらに /etc/my.cnfに以下の一行を追加してMySQLを再起動。

default_authentication_plugin = mysql_native_password

でもNGだ

これでクライアントからDBへ接続はできるようになった。しかしながら、DBへのフェッチやinsertはできない。AuditConsoleにこんなログがでてる。

java.sql.SQLException: Unknown system variable 'tx_isolation' 

なんだろとGoogle先生に聞いたところ、このアイテム、MySQL 8.0 移行で変更になったとのこと。
DB側のログにもこんな感じでてていました。

/* mysql-connector-java-5.1.10 ( Revision: ${svn.Revision} ) */SHOW VARIABLES WHERE Variable_name ='language' OR Variable_name = 'net_write_timeout' OR Variable_name = 'interactive_timeout' OR Variable_name = 'wait_timeout' OR Variable_name = 'character_set_client' OR Variable_name = 'character_set_connection' OR Variable_name = 'character_set' OR Variable_name = 'character_set_server' OR Variable_name = 'tx_isolation' OR Variable_name = 'transaction_isolation' OR Variable_name = 'character_set_results' OR Variable_name = 'timezone' OR Variable_name = 'time_zone' OR Variable_name = 'system_time_zone' OR Variable_name = 'lower_case_table_names' OR Variable_name = 'max_allowed_packet' OR Variable_name = 'net_buffer_length' OR Variable_name = 'sql_mode' OR Variable_name = 'query_cache_type' OR Variable_name = 'query_cache_size' OR Variable_name = 'init_connect'

このvariable_nameはMySQL 8.0ではtransaction_isolationに替わってる。うーん、そうするとAuditConsoleそのものに手をいれないとダメっぽいなぁ。
開発は随分前にとまってるみたい。
たぶんここだけじゃないだろうし。諦めるっていう手もある。一番コストが低い。