私は新鮮なUbuntu GnomeにMariaDb
をインストールし、 mysql_secure_installation を実行しました。その後、適切な管理者パスワードを設定し、匿名ユーザーを削除しました。
その後、私は管理者パスワードに関するいくつかの奇妙な動作に気づきました:
mysql -u root -p
_を使用して通常のユーザーアカウントからログインしようとすると、常にエラーが発生します:ERROR 1698 (28000): Access denied for user 'root'@'localhost'
Sudo mysql -u root -p
_を使用してコマンドを実行すると、実際に入力したパスワードに関係なく、常にデータベースにアクセスできます...これは正常な動作ですか、何か問題がありますか、それともインストールをなんとかしてしまいましたか?
その動作は、rootユーザーに対して plugin for socket authentication を有効にすることと一貫して聞こえます。MariaDBは、ソケット経由で受信したオペレーティングシステムの資格情報を信頼し、パスワードに依存しません。 Sudo
を使用するか、rootとしてログオンすると、OSのrootになるため、データベースサーバーにrootとして接続できますが、他のOSユーザーはできません。
あなたはそのオプションを削除することができます:
$ Sudo mysql -u root
mysql> use mysql;
mysql> update user set plugin='' where User='root';
mysql> flush privileges;
その後、MariaDBのrootパスワードを持っているすべてのユーザーがrootとしてログオンできるはずの期待される動作が得られます。
もう1つの方法は、完全な管理者特権を持つrootではなく別のユーザーを設定し、管理目的でrootではなくそれを使用することです。
$ Sudo mysql -u root
mysql> CREATE USER 'finley'@'localhost' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'finley'@'localhost'
-> WITH GRANT OPTION;
使用するように指定されたHBruijnからの回答
update user set plugin='' where User='root';
しかし、これは私にとってログインシステムを壊しました。誰もログインできなくなったためです(正しいパスワードを使用しているかどうか、Sudoを使用しているかどうか)。
私がそれを機能させるには、代わりにこれを使用する必要がありました:
update user set plugin="mysql_native_password" where User='root';