MariaDBでrootでログインしている場合はノンパスワードでshellからコネクトする
こんな感じ
これでいきなりログインできるようにしたい。
sudo mysql -u root MariaDB [(none)]>
MariaDBによるとrootのシェル取ってるんだから、MariaDBで認証してても無駄ですよねって。そりゃそーだ。
やり方
unix_socketというプラグインを使うとできるということで、これを有効にする。
プラグインの状況を確認してインストール
まず、パスワード付きでmariadbに接続
mysql -u root -p
プラグインの状態確認
show plugins;
で
| unix_socket | ACTIVE | AUTHENTICATION | auth_socket.so | GPL |
と出ていればいいんだけど、多分まだ出てないんですよね。なのでMySQLコマンドで、
INSTALL SONAME 'auth_socket';
としてインストール。
もし
| unix_socket | DISABLED | AUTHENTICATION | auth_socket.so | GPL |
となっていれば、
UNINSTALL PLUGIN unix_socket; INSTALL PLUGIN unix_socket;
として再インストールする。
MariaDBの再起動時にも有効にするために、/etc/my.cnf を
[mysqld] plugin_load_add = auth_socket
として永続化する。
rootがunix_socketを使えるようにする
以下のUPDATE文を走らせる。
UPDATE mysql.user SET plugin = 'unix_socket' WHERE user = 'root' AND host = 'localhost'; flush privileges;
これでパスワード無しでいける。
SELECT user, host, plugin FROM mysql.user WHERE user = 'root'; +------+-----------+-------------+ | user | host | plugin | +------+-----------+-------------+ | root | localhost | unix_socket | +------+-----------+-------------+
となっていればOK。ちなみに、MySQLの場合はunix_socketではなくauth_socket
プラグインをロードする前にrootにunix_socketを使わせるUPDATE文を実行してしまった場合
残念ながら、mysql -u root しても、 ERROR 1524 (HY000): Plugin 'unix_socket' is not loaded となってMariaDBに接続できない。
落ち着いて、MariaDBをsafeモードで再起動する
systemctl stop mariadb mysqld_safe --skip-grant-tables --skip-networking &
--skip-grant-tables:ユーザー認証なしですべての操作が可能--skip-networking:外部アクセス禁止(安全対策)
すると、 mysql -u root で入れるので
UPDATE mysql.user SET plugin = '' WHERE user = 'root' AND host = 'localhost';
として元のパスワードありに戻す。
戻したら、ps auxw|grep mysqld_safe で出てきたPIDをkillして、MariaDBを起動