起動中に Dockerを介してMariaDB を使用してMYSQL_ALLOW_EMPTY_PASSWORD
を実行するように求められました/usr/bin/mysql_secure_installation
。これは理にかなっていますが、( 他のように )非対話的に構成することを好むので、このスクリプトが実行するSQLコマンドを調べ始めました。 コメントの1つ から この記事 には、次のSQLが含まれています。
UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE User = 'root';
これにより、MariaDBが見つかりました アドバイスed25519
ではなくmysql_native_password
を使用しました。
そこで、Dockerコンテナーに提供されている.cnf
に以下を追加し、コンテナーを再起動しました。
[mariadb]
plugin_load_add=auth_ed25519
次に、mysql
クライアント(apt install mariadb-client
から)に接続して実行しました。
MariaDB [(none)]> ALTER USER root IDENTIFIED VIA ed25519 USING PASSWORD('secret');
MariaDB [(none)]> \q
次に、再接続しようとすると、次のエラーが表示されます。
$ mysql --protocol=tcp --user=root -psecret
ERROR 2059 (HY000): Authentication plugin 'client_ed25519' cannot be loaded: /usr/lib/x86_64-linux-gnu/mariadb18/plugin/client_ed25519.so: cannot open shared object file: No such file or directory
$ mysql --version
mysql Ver 15.1 Distrib 10.1.43-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
なぜそのエラーが発生するのか、およびMariaDBクライアントでed25519認証を有効にするにはどうすればよいですか?
共有ライブラリはコンテナ( mariadb:10.4 )内に存在するようですが、mariadb-client
のUbuntu 18.04 aptパッケージにはありません。
find / -iregex '.*ed25519.so'
/var/lib/docker/overlay2/5607d87792ae2f4989aa5a72188f1c47f86b19ce42a92139b50b697a39ecb798/diff/usr/lib/mysql/plugin/auth_ed25519.so
/var/lib/docker/overlay2/5607d87792ae2f4989aa5a72188f1c47f86b19ce42a92139b50b697a39ecb798/diff/usr/lib/mysql/plugin/client_ed25519.so
/var/lib/docker/overlay2/38451e628c3926f60d07e9852332f751486471b4a008d9a1b1e7f04d30b2eba1/merged/usr/lib/mysql/plugin/auth_ed25519.so
/var/lib/docker/overlay2/38451e628c3926f60d07e9852332f751486471b4a008d9a1b1e7f04d30b2eba1/merged/usr/lib/mysql/plugin/client_ed25519.so
mariadb-server
doesのaptパッケージにはauth_ed25519.so
が含まれていますが、mariadb-client
パッケージ(またはその依存関係)にパートナーの兆候はありません。
$ apt-file list mariadb-server-10.1 | grep ed25519.so
mariadb-server-10.1: /usr/lib/x86_64-linux-gnu/mariadb18/plugin/auth_ed25519.so
$ dpkg --listfiles mariadb-client-10.1 mariadb-client-core-10.1 mariadb-common | grep ed25519.so
$
そのファイルを見つけることができる唯一の場所は、ライブラリのみを含むlibmariadbclient18
というパッケージです。
$ apt-file find client_ed25519.so
libmariadbclient18: /usr/lib/x86_64-linux-gnu/mariadb18/plugin/client_ed25519.so
$ apt-file list libmariadbclient18
libmariadbclient18: /usr/lib/x86_64-linux-gnu/libmariadbclient.so.18
libmariadbclient18: /usr/lib/x86_64-linux-gnu/libmariadbclient.so.18.0.0
libmariadbclient18: /usr/lib/x86_64-linux-gnu/mariadb18/plugin/client_ed25519.so
libmariadbclient18: /usr/lib/x86_64-linux-gnu/mariadb18/plugin/dialog.so
libmariadbclient18: /usr/lib/x86_64-linux-gnu/mariadb18/plugin/disks.so
libmariadbclient18: /usr/lib/x86_64-linux-gnu/mariadb18/plugin/mysql_clear_password.so
libmariadbclient18: /usr/share/doc/libmariadbclient18/changelog.Debian.gz
libmariadbclient18: /usr/share/doc/libmariadbclient18/copyright
ライブラリをインストールした後、接続は成功します。
$ apt install libmariadbclient18
$ mysql --protocol=tcp --user=root -psecret
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 17
Server version: 10.4.11-MariaDB-1:10.4.11+maria~bionic mariadb.org binary distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
私はこれが特に明白な一連の問題ではないことを発見したので、他の人や将来の自分に必要な場合に備えて、ここに残しておくと思いました。 mariadb-plugins
のような名前を付けるか、少なくともmariadb-client
でSuggested
にすると便利でしょう。