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


382

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

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をApache、MySQL、PHPで実行しているため、ウェブサイトをホストでき、iRedMail 0.9.5-1でメールをホストできます。

MySQLデータベースにログインすると、iRedMailをインストールする前に問題なく動作します。私も試してみましたが、iRedMailをインストールしただけで、その後rootも機能しません...

既存のMySQLインストールに加えて、MySQLログインの問題を修正する方法やiRedMailをインストールする方法を誰かに教えてもらえたら。そして、はい、インストールのヒントを試しましたが、構成ファイルでこれらの変数を見つけることができません。


私は、このリンクをたどっし、最初のオプションは、私の仕事:askubuntu.com/questions/763336/...
ミカエルArhelger

3
sudo mysql_secure_installationそれを修正する最も簡単な方法
セルゲイポ

回答:


1121

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

基本的には、次のことを意味します。それを使用するdb_users は、システムユーザー資格情報によって「認証」されます。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プラグインを使用するようにrootユーザーを設定できます
  2. あなたdb_userと一緒に新しいものを作成できますsystem_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ストレッチなど)では、「auth_socket」プラグインは「unix_socket」と呼ばれます。ため、対応するSQLコマンドは次のようになります。UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';

更新: @andyのコメントから、mysql 8.xxがauth_socketfor /caching_sha2_password、私はこれをテストするためにmysqlの8.xxとシステムのセットアップを持っていない、しかし、上記のステップは、あなたが問題を理解するのに役立つはずです。これが返事です:

MySQL 8.0.4の1つの変更は、新しいデフォルトの認証プラグインが「caching_sha2_password」であるということです。新しい「YOUR_SYSTEM_USER」にはこの認証プラグインがあり、「mysql -u YOUR_SYSTEM_USER -p」を使用してbashシェルからログインし、プロンプトでこのユーザーのパスワードを入力できます。「ユーザー設定プラグインの更新」手順は不要です。8.0.4のデフォルトの認証プラグインの更新については、https: //mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/を参照してください


5
オプション1がうまくいきました。しかし、それから私も走る必要がありましたsudo gedit /etc/phpmyadmin/config.inc.php。次に、それをAllowNoPassword含む両方の行を検索し、コメントを外しました。その後、パスワードなしでrootとしてログインできました。
Joe

7
オプション2が機能します。新しいユーザーを作成し、そこにrootを残して使用することが常にベストプラクティスだと思います。
PasinduJay

2
IDENTIFIED BY ''ビットは、おそらくする必要がありますIDENTIFIED BY 'YOUR_PASSWD'
YakovL

4
最後に、実際に動作する答え!! do mysqld_safe --skip-grant-tablesetc と言って無数の答えが出ており、それは機能していません。
スチュワート

4
sudo mysql -u root -p許可しない場合、どうすればいいですか?
Hrvoje T

173

ここをチェックしてください:

新しいバージョンのMYSQLはこの方法でそれを行います。

新しいmy-sqlでは、インストール中にパスワードが空のままになっていると、auth_socketプラグインに基づいています。

正しい方法は、sudo特権を使用してmy-sqlにログインすることです。

$ sudo mysql -u root -p

そして、以下を使用してパスワードを更新します。

$ ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new-password';

これが完了stop and startすると、mysqlサーバーが実行されます。

$  sudo service mysql stop
$  sudo service mysql start

詳細については、このリンクを参照してください

疑問がある場合はコメントしてください。


4
これは、Ubuntu 18を使用する私にとってはうまくいきました。どうもありがとうございました。
Peter Drinnan

10
ubuntu 18.04
sgtkuncoro

2
まさに私が探していたもの。ありがとうございました:) Ubuntu 18で
作業

2
これは魅力のように機能しました、lubuntu 19.04
Kvvaradha

3
これはうまくいきます。リンクは役に立ちます。
kjohri

9

この問題は、Windows 10デスクトップのPuttyを介して操作していたDebian 8 VMで発生していました。

ここでさまざまな提案を試しましたが、何もうまくいかず、DebianホストでMariaDBを実行しています。最終的に、セーフモードでdbサーバーを起動できないことがわかりましたが、必要がなく、次のコマンドが実際に機能しました。つまり、新しく作成されたMySqlユーザーがMySql / MariaDBサーバーにログインできるようにします。

sudo service mysql restart
sudo mysql # logs in automatically into MariaDB
use mysql;
update user set plugin='' where user='your_user_name';
flush privileges;
exit;
sudo service mysql restart # restarts the mysql service

上記の方法でうまくいかない場合は、上記のzetacuの投稿(zetacu)でている手順に従ってから、私の手順に従ってください。

これで、リモートターミナルクライアントを使用し、次のコマンドを使用してmysqlに安全にログインできるはずです。

mysql -u your_user_name -p

*プロンプトが表示されたらパスワードを入力します


とても簡単です。さて、最初のコマンドだけでは2番目のコマンドを実行できません。編集を調整します-正しいかどうか確認してください...
kokbira

7

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

@ingernet多分それはあなたが再びインストールしている間にあなたが無視した他のいくつかの問題のためです
Eminem347

@PJBrunetが原因でMysqlのバージョンが異なる可能性があります
Eminem347

十分に公平ですが、万能のソリューションが最善です。
PJ Brunet 2017

6

ここで何の解決策もなく何時間も苦労した後、これは私にとってはうまくいきました、そして私はそれがパスワード列が今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

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


5

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

ステップ2。 USE mysql;

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

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

ステップ4。 exit

ありがとう。完了です。


5

sudoは不要

データベースは2つの全特権アカウントで初期化されます。最初のアカウントはアクセスできない "root"で、2つ目はユーザー名(コマンドで確認)です。 whoami)です。

rootアカウントへのアクセスを有効にするには、ユーザー名でログインする必要があります

mysql -u $(whoami)

ルートのパスワードを手動で変更する

use mysql;
set password for 'root'@'localhost' = password('YOUR_ROOT_PASSWORD_HERE');
flush privileges;
quit

「ルート」としてログイン

mysql -u root -p

あなたはmysqlの実際のバージョンの正解です、ありがとうございます!
Hugo S

3

最初のステップ:/etc/phpmyadmin/config.inc.phpに移動し、AllowNoPasswordがある行のコメントを外します。2番目のステップ:mysqlのデフォルトアカウントにログインする

mysql -u root -p
use mysql;
update user set plugin="" where user='root';
flush privilege;

そしてそれだけです!


3

それは私のために働きました:

mysql --user=root mysql
CREATE USER 'some_user'@'%' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON *.* TO 'some_user'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

3

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

今では修正されています:

まず、/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コンソール内にいます。

次に、いくつかのクエリを作成して、ルートパスワードをリセットします

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

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


1
うまくいきました!しかし、あなたの答えは更新する必要があります!! /etc/mysql/my.cnfではなく/etc/mysql/my.cnfおよびサービスの場合は、そのsudoサービスmysql restartを再起動します
essayoub

3

私はここで何時間もの調査をした後、自分の解決策を見つけました。

MySQLを停止する

sudo service mysql stop

MySQLサービスディレクトリを作成します。

sudo mkdir /var/run/mysqld

MySQLユーザーにサービスディレクトリへの書き込み権限を付与します。

sudo chown mysql: /var/run/mysqld

権限チェックやネットワーキングなしで、MySQLを手動で起動します。

sudo mysqld_safe --skip-grant-tables --skip-networking &

パスワードなしでログインします。

 mysql -uroot mysql

パスワードを更新する

UPDATE mysql.user SET authentication_string=PASSWORD('YOURNEWPASSWORD'), plugin='mysql_native_password' WHERE User='root' AND Host='%';
EXIT;

MySQLをオフにします。

sudo mysqladmin -S /var/run/mysqld/mysqld.sock shutdown

MySQLサービスを通常どおり開始します。

sudo service mysql start

これにより、他に何もしないときにmysqlプロンプトが表示されました。ありがとう!
UserX

2

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

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

私はよ、ここでの処理を示していないので、MySQLのドキュメント上記のリンクには、それを明確かつ簡潔です


anwserに感謝しますが、動作させることができなかったため、代わりにpgSQLデータベースを使用してiRedMailをインストールすることにしました。
Folkmann

ロジャーフォークマン!どうにかして問題を解決したことを知ってよかった。
クリスティアンゴンサル

リンクが壊れます。mysql.comには、長年にわたって多くのリンク切れがありました。ここに関連情報をコピーして貼り付ける必要があります。これは、出典を明記する限り問題ありません。
グース

1

os:Ubuntu18.04

mysql:5.7

  1. skip-grant-tablesmysqld.cnfの最後にを追加します

  2. cp the my.cnf

sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/my.cnf
  1. パスワードをリセットする
(base)   ~ sudo service mysql stop 
(base)   ~ sudo service mysql start
(base)   ~ mysql -uroot
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.25-0ubuntu0.18.04.2 (Ubuntu)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed, 3 warnings
mysql> update mysql.user set authentication_string=password('newpass') where user='root' and Host ='localhost';
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 1

mysql> update user set plugin="mysql_native_password"; 
Query OK, 0 rows affected (0.00 sec)
Rows matched: 4  Changed: 0  Warnings: 0

mysql>  flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> quit
Bye
  1. skip-grant-tablesmy.cnfからを削除します
(base)   ~ sudo emacs /etc/mysql/mysql.conf.d/mysqld.cnf 
(base)   ~ sudo emacs /etc/mysql/my.cnf                 
(base)   ~ sudo service mysql restart
  1. mysqlを開く
(base)   ~ mysql -uroot -ppassword 
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.25-0ubuntu0.18.04.2 (Ubuntu)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 
  1. パスワードポリシーを確認する
mysql> select @@validate_password_policy;
+----------------------------+
| @@validate_password_policy |
+----------------------------+
| MEDIUM                     |
+----------------------------+
1 row in set (0.00 sec)


mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password_dictionary_file    |        |
| validate_password_length             | 8      |
| validate_password_mixed_case_count   | 1      |
| validate_password_number_count       | 1      |
| validate_password_policy             | MEDIUM |
| validate_password_special_char_count | 1      |
+--------------------------------------+--------+
6 rows in set (0.08 sec)!
  1. の設定を変更する validate_password
mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.05 sec)

mysql> set global validate_password_mixed_case_count=0;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_number_count=3;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_special_char_count=0;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_length=3;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| validate_password_dictionary_file    |       |
| validate_password_length             | 3     |
| validate_password_mixed_case_count   | 0     |
| validate_password_number_count       | 3     |
| validate_password_policy             | LOW   |
| validate_password_special_char_count | 0     |
+--------------------------------------+-------+
6 rows in set (0.00 sec)

注意 あなたは何に起因する誤差ことを知っている必要がありますか?validate_password_policy?

ポリシーを満たすためにパスワードをリセットするか、ポリシーを変更することを決定する必要があります。


0

これは私にも起こりました。問題は、すでにLinuxディストリビューションに付属しているmysqlリポジトリにあります。だからあなたが単にそうするとき: $ sudo apt install mysql-server 、デフォルトのリポジトリからmysqlがインストールされ、この問題が発生します。それを克服するには、インストールされているmysqlをアンインストールする必要があります $ sudo apt remove mysql* --purge --auto-remove

次に、公式のmysql Webサイトからmysql repoをダウンロードします。MySQL APT Repo repoを追加してインストールする方法については、ドキュメントに従ってください。これは問題ありません。また、@ zetacuによって回答されたように、mysql rootが実際にmysql_native_passwordプラグインを使用していることを確認できます。


0

私の場合、

dev@Dev-007:~$ mysql -u root -p
Enter password: 
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

私のパスワードは正しかったと確信しています。そうでなければエラーコードは ERROR 1045 (28000): Access denied for user

sudoを使用して再ログインします。

dev@Dev-007:~$ sudo mysql -u root -p

今回は私のために働いた。ドキュメントを見る

ルートパスワードを変更し、

mysql> alter user 'root'@'%' identified with mysql_native_password by 'me123';
Query OK, 0 rows affected (0.14 sec)

mysql> 

次に、サーバーを再起動します sudo /etc/init.d/mysql restart

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.