![如何使用 MariaDB 客户端对 ed25519 进行身份验证?](https://linux22.com/image/1170268/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20MariaDB%20%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%AF%B9%20ed25519%20%E8%BF%9B%E8%A1%8C%E8%BA%AB%E4%BB%BD%E9%AA%8C%E8%AF%81%EF%BC%9F.png)
在发射时通过 Docker 进行 MariaDB使用MYSQL_ALLOW_EMPTY_PASSWORD
我被提示运行/usr/bin/mysql_secure_installation
。这是有道理的,但是(像其他人一样)我更喜欢以非交互式的方式配置事物,因此开始研究该脚本运行的 SQL 命令。其中一条评论到本文包括以下 SQL:
UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE User = 'root';
这又让我找到了 MariaDB建议使用ed25519
而不是mysql_native_password
。
因此我将以下内容添加到.cnf
提供给 Docker 容器中并重新启动了容器。
[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 身份验证?
答案1
共享库似乎存在于容器内(mariadb:10.4),但不存在于 Ubuntu 18.04 apt 包中mariadb-client
。
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
apt 包mariadb-server
做包括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
或至少是 ,Suggested
可能会有所帮助mariadb-client
。