エラー1698(28000)。ユーザー 'root'@'localhost&#39 のアクセスが拒否されました。

私は新しいサーバーをセットアップしていますが、この問題に直面しています。

MySQLデータベースにrootユーザーでログインしようとすると、以下のようなエラーが発生します。

ERROR 1698 (28000):Access denied for user 'root'@'localhost'

ターミナル(SSH)から接続しても、PHPMyAdminから接続しても、MySQLクライアント(Navicatなど)から接続しても同じです。どれも失敗します。

mysql.userテーブルを見てみると、以下のようになっています。

+------------------+-------------------+
| user             | host              |
+------------------+-------------------+
| root             | %                 |
| root             | 127.0.0.1         |
| amavisd          | localhost         |
| debian-sys-maint | localhost         |
| iredadmin        | localhost         |
| iredapd          | localhost         |
| mysql.sys        | localhost         |
| phpmyadmin       | localhost         |
| root             | localhost         |
| roundcube        | localhost         |
| vmail            | localhost         |
| vmailadmin       | localhost         |
| amavisd          | test4.folkmann.it |
| iredadmin        | test4.folkmann.it |
| iredapd          | test4.folkmann.it |
| roundcube        | test4.folkmann.it |
| vmail            | test4.folkmann.it |
| vmailadmin       | test4.folkmann.it |
+------------------+-------------------+

見ての通り、rootがアクセスできるはずです。

このサーバーは非常にシンプルで、私は今までにこれをトラブルシューティングしようとしたことがあります。

Ubuntu 16.04.1 LTSを使用しており、Apache、MySQL、PHPを使用してウェブサイトをホストし、iRedMail 0.9.5-1を使用してメールをホストしています。

iRedMailをインストールする前に、MySQLデータベースへのログインは問題なくできました。また、iRedMailをインストールするだけではなく、root権限でのログインも試してみましたが、こちらもうまくいきませんでした...。

もし誰かが、私のMySQLログイン問題を解決する方法や、既存のMySQLインストールの上にiRedMailをインストールする方法を教えてくれれば幸いです。はい、Installation Tipsを試してみましたが、設定ファイルにそれらの変数を見つけることができません。

ソリューション

Ubuntuなどのシステムでは、mysqlはデフォルトでUNIX auth_socket pluginを使用しています。

基本的には以下のようになります。このプラグインを使用しているdb_usersは、システムユーザーのcredentiasによって"auth"されます。 あなたのrootユーザーがこのように設定されているかどうかは、次のようにして確認することができます。

$ sudo mysql -u root # I had to use "sudo" since is new installation

mysql> USE mysql;
mysql> SELECT User, Host, plugin FROM mysql.user;

+------------------+-----------------------+
| User             | plugin                |
+------------------+-----------------------+
| root             | auth_socket           |
| mysql.sys        | mysql_native_password |
| debian-sys-maint | mysql_native_password |
+------------------+-----------------------+

クエリを見ればわかるように、root ユーザーは auth_socket プラグインを使用しています。

これを解決するには2つの方法があります。

1.ルートユーザが mysql_native_password プラグインを使うように設定する。 2.system_user "で新しい "db_user "を作成する(推奨)。

オプション1:__

$ sudo mysql -u root # I had to use "sudo" since is new installation

mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;

$ service mysql restart

選択肢2:__ (YOUR_SYSTEM_USERをあなたが持っているユーザー名に置き換えてください)

$ sudo mysql -u root # I had to use "sudo" since is new installation

mysql> USE mysql;
mysql> CREATE USER 'YOUR_SYSTEM_USER'@'localhost' IDENTIFIED BY '';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'YOUR_SYSTEM_USER'@'localhost';
mysql> UPDATE user SET plugin='auth_socket' WHERE User='YOUR_SYSTEM_USER';
mysql> FLUSH PRIVILEGES;
mysql> exit;

$ service mysql restart

オプション2を使用する場合、システムユーザー名でmysqlに接続しなければならないことを覚えておいてください(mysql -u YOUR_SYSTEM_USER)。

注意: 一部のシステム(例:Debian stretch)では 'auth_socket' プラグインは 'unix_socket'と呼ばれているため、対応するSQLコマンドは次のようになります。UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';

**アップデート @andyさんのコメントによると、mysql 8.x.xではcaching_sha2_passwordのためのauth_socketが更新され、置き換えられたようです。以下はその回答です。

MySQL 8.0.4での1つの変更点は、新しいデフォルトの認証プラグインが 'caching_sha2_password'であることです。新しい 'YOUR_SYSTEM_USER'にはこの認証プラグインが入っているので、bashシェルから "mysql -u YOUR_SYSTEM_USER -p"でログインして、プロンプトでこのユーザのパスワードを入力することができます。UPDATE user SET plugin" のステップは必要ありません。8.0.4のdefault authプラグインのアップデートについては、https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/を参照してください。

解説 (23)

私は、Mysqlの接続を削除することをお勧めします。

UPDATE-これはMysqlバージョン5.5用ですが、あなたのバージョンが異なる場合は、1行目を適宜変更してください。

sudo apt-get purge mysql-server mysql-client mysql-common mysql-server-core-5.5 mysql-client-core-5.5
sudo rm -rf /etc/mysql /var/lib/mysql
sudo apt-get autoremove
sudo apt-get autoclean

そして再度インストールしますが、今回はrootのパスワードを自分で設定してください。 これでかなりの手間が省けます。

sudo apt-get update
sudo apt-get install mysql-server
解説 (3)

MySQLにrootユーザーでアクセスしたいが、rootの正しいパスワードを教えていない。

rootの新しいパスワードを設定する必要がある場合は、MySQLのサイトにその方法についての素晴らしいドキュメントがあります。http://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html

上記のリンク先にあるMySQLのドキュメント分かりやすく簡潔なので、ここではその手順を紹介しません**。

解説 (3)