544

新しいサーバーをセットアップしていますが、この問題が発生し続けています。

root ユーザーで MySQL データベースにログインしようとすると、次のエラーが表示されます。

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

端末 (SSH) を介して接続するか、 phpMyAdminを介して接続するか、 Navicatなどの 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 |
+------------------+-------------------+

ご覧のとおり、ユーザーrootにアクセス権が必要です。

サーバーは非常にシンプルです。これについては、しばらくの間トラブルシューティングを試みました。

Ubuntu 16.04.1 LTS (Xenial Xerus) と Apache、MySQL、および PHP を実行しているため、Web サイトをホストでき、iRedMail 0.9.5-1 を使用してメールをホストできます。

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

MySQL ログインの問題を解決するにはどうすればよいですか、または既存の MySQL インストールに iRedMail をインストールするにはどうすればよいですか? はい、インストールのヒントを試しましたが、構成ファイルにそれらの変数が見つかりません。

4

21 に答える 21

1552

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

基本的には、それを使用する db_usersは、システム ユーザー資格情報によって「認証」されます。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_userあなたと一緒に新しいものを作成できますsystem_user(推奨)

オプション1:

sudo mysql -u root # I had to use "sudo" since it was a 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 it was a 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 -u YOUR_SYSTEM_USER) として MySQL に接続する必要があることに注意してください。

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

andy のコメントから、MySQL 8.xx が for を更新/置き換えたauth_socketようですcaching_sha2_password。これをテストするための MySQL 8.xx のシステム設定がありません。ただし、上記の手順は問題を理解するのに役立ちます。返信は次のとおりです。

MySQL 8.0.4 での 1 つの変更点は、新しいデフォルトの認証プラグインが「caching_sha2_password」であることです。新しい「YOUR_SYSTEM_USER」にはこの認証プラグインがあり、「mysql -u YOUR_SYSTEM_USER -p」を使用して Bash シェルからログインし、プロンプトでこのユーザーのパスワードを指定できます。「UPDATE user SET plugin」ステップは必要ありません。

8.0.4 デフォルト認証プラグインの更新については、 MySQL 8.0.4: 新しいデフォルト認証プラグイン: caching_sha2_passwordを参照してください。

于 2017-03-12T01:17:59.197 に答える
11

ステップ1。sudo mysql -u root -p

ステップ2。USE mysql;

ステップ 3。ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'admin';

ここで「admin」は新しいパスワードですが、変更できます。

ステップ 4。exit

これで完了です。

于 2018-12-01T11:04:02.257 に答える
9

ここで何の解決策もなく何時間も苦労した後、これは私にとってはうまくいきました。パスワード列がauthentication_stringと呼ばれるようになったという YouTubeビデオを見つけました。

そのため、次のようにパスワードを変更できました。

まず、ターミナルから MySQL クライアントに入ります。

sudo mysql

次に、 mysql内で、次のように入力しmysql>ます。

mysql> use mysql
mysql> update user set authentication_string=PASSWORD("mypass") where user='root';
mysql> flush privileges;
mysql> quit;

この時点で、MySQL クライアントを終了し、通常の端末の場所に戻ります。これを有効にするには、MySQL クライアントを再起動する必要があります。そのタイプについては、次のとおりです。

sudo service mysql restart

理解を深めるために、このビデオ リンクを参照してください。

于 2020-01-29T17:09:07.117 に答える
8

MySQL接続を削除することをお勧めします-

これは MySQL バージョン 5.5 用です。バージョンが異なる場合は、それに応じて最初の行を変更してください。

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
于 2017-03-10T12:25:10.463 に答える
4

これは私のために働いた:

mysql --user=root mysql
CREATE USER 'some_user'@'%' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON *.* TO 'some_user'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
于 2018-12-30T21:19:12.917 に答える
4

私も初めて同じ問題に直面しました。

これで修正されました:

まず、/etc/mysql/mysql.conf.d/mysqld.cnfファイルをコピーして に貼り付けます/etc/mysql/my.cnf

次のコマンドで実行できます。

sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/my.cnf

それでは、パスワードをリセットしましょう。

端末で次のコマンドを使用します。

sudo service mysql stop
sudo service mysql start
sudo mysql -u root

これで、MySQL コンソール内にいます。

次に、root パスワードをリセットするクエリをいくつか書きましょう。

USE mysql
update mysql.user set authentication_string=password('newpass') where user='root' and Host ='localhost';
update user set plugin="mysql_native_password";
flush privileges;
quit

これで、 をきれいにすることができます/etc/mysql/my.cng

上記のファイルをエディターで開き、ファイル内の行全体を削除します。

その後、MySQL を再起動します。

sudo mysql service restart

次に、新しく作成したパスワードで MySQL を使用しましょう。

sudo mysql -u root -p

最後に、新しく作成したパスワードを入力します。

于 2019-07-18T11:42:50.537 に答える