1. ホーム
  2. mysql

[解決済み] エラー 1698 (28000)。ユーザー 'root'@'localhost' のアクセスが拒否されました。

2022-03-17 13:24:52

質問

新しいサーバーを立ち上げているのですが、この問題に何度も遭遇しています。

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

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

ターミナル(SSH)で接続しても、(1)で接続しても、(2)で接続しても、(3)で接続しても問題ない。 phpMyAdmin またはMySQLクライアントなど。 ナビキャット . これらはすべて失敗します。

で調べました。 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 |
+------------------+-------------------+

ご覧の通り、ユーザー ルート はアクセスできるはずです。

Serverは、ここしばらくトラブルシューティングを試みたので、非常にシンプルです。

動作しているのは Ubuntu 16.04.1 LTS (Xenial Xerus) で、Apache, MySQL, PHP でウェブサイトをホストし、iRedMail 0.9.5-1 でメールをホストすることができます。

iRedMailをインストールする前にMySQLデータベースにログインすると正常に動作します。また、iRedMailだけをインストールしてみましたが、rootも機能しません。

または、既存のMySQLの上にiRedMailをインストールするにはどうすればよいですか?そして、はい、私は インストールのヒント と表示され、設定ファイルにそれらの変数が見当たりません。

解決方法は?

Ubuntu などの一部のシステムでは、MySQL が UNIX auth_socket プラグイン をデフォルトで使用します。

基本的にはそのような意味です。 これを使用するdb_usersは、quot;authenticated"で認証されます。 システムのユーザー資格情報。 を確認することができます。 root のユーザーがこのように設定されている場合は、次のようにしてください。

sudo mysql -u root # I had to use "sudo" since it was a 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. を新規に作成することができます。 db_usersystem_user (推奨)

オプション1:

sudo mysql -u root # I had to use "sudo" since it was new installation

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

sudo 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 'YOUR_PASSWD';
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;

sudo service mysql restart

オプション #2 を使用する場合は、MySQL にシステムユーザー名で接続する必要があることに注意してください ( mysql -u YOUR_SYSTEM_USER ).

一部のシステムで(例. Debian 9 (Stretch)) 'auth_socket' プラグインは、以下のように呼ばれます。 'unix_socket'(ユニックスソケット ということで、対応するSQLコマンドは、以下のようになります。 UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';

andy のコメントから、MySQL 8.x.x が更新/置換されたようです。 auth_socket に対して caching_sha2_password . 私はこれをテストするためにMySQL 8.x.xのシステムセットアップを持っていません。しかし、上記の手順は、問題を理解するのに役立つはずです。以下はその回答です。

MySQL 8.0.4 での変更点として、新しいデフォルトの認証プラグインが 'caching_sha2_password' になったことが挙げられます。新しい 'YOUR_SYSTEM_USER' はこの認証プラグインを持ち、Bash シェルから "mysql -u YOUR_SYSTEM_USER -p" でログインでき、このユーザーのパスワードをプロンプトで提供します。UPDATE user SET plugin"のステップは必要ありません。

8.0.4のデフォルト認証プラグインのアップデートについては https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/