web-dev-qa-db-ja.com

ユーザー 'root' @ 'localhost'のアクセスが拒否されました(パスワード:YESを使用)(Mysql :: Error)

サーバーにWebアプリケーションをデプロイしようとしましたが、このmysqlデータベース例外が発生しています

Access denied for user 'root'@'localhost' (using password: YES) (Mysql::Error)

mysql -u root -pを使用してコマンドプロンプトからデータベースにアクセスしようとしました。すべてのデータベース操作を実行できます。

エラーは何ですか

Java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.Java:2928)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.Java:771)
    at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.Java:3649)
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.Java:1176)
    at com.mysql.jdbc.Connection.createNewIO(Connection.Java:2558)
    at com.mysql.jdbc.Connection.<init>(Connection.Java:1485)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.Java:266)
    at Java.sql.DriverManager.getConnection(DriverManager.Java:620)
    at Java.sql.DriverManager.getConnection(DriverManager.Java:200)
    at com.mpigeon.DbConnection.DbConn(DbConnection.Java:26)
    at com.mpigeon.CheckLoginHome.doGet(CheckLoginHome.Java:39)
    at javax.servlet.http.HttpServlet.service(HttpServlet.Java:617)
    at javax.servlet.http.HttpServlet.service(HttpServlet.Java:717)
32
Jeevan Dongre

Localhostからルートへのアクセスを許可する必要があります。チェック this ubuntuヘルプ

21
Jigar Joshi

rootなどを使用してみてください。

mysql -uroot

次に、ログイン後に別のユーザーとホストを確認できます

select user,Host,password from mysql.user;
8
Vivek Buddhadev

パスワードに空白スペースを入れていることを確認してください。

6
KhAn SaAb

MySQLサーバーを5.1.73から5.5.45にアップグレードした後、同じエラーに直面しました。そのエラーを修正する別の方法があります。

私の場合、ルートパスワードを使用してMySQLに接続できましたが、MySQLはどのユーザーにも特権を付与することを積極的に拒否しました。

  1. ルートとしてMySQLに接続する

    mysql -u root -p
    

    次に、MySQLルートパスワードを入力します。

  2. データベースを選択します。

    use mysql;
    
  3. ほとんどの場合、mysql.userテーブルにはルート用のレコードが1つだけあり、localhost(これは私の場合)からのみ接続できますが、デフォルトではルート用に2つのレコードがあり、1つはlocalhost127.0.0.1のもう1つ。

  4. Host='127.0.0.1'がない場合は、rootユーザーの追加レコードを作成します。

        SET @s = CONCAT('INSERT INTO mysql.user SELECT ',
                REPLACE((SELECT GROUP_CONCAT(COLUMN_NAME) 
                         FROM INFORMATION_SCHEMA.COLUMNS
                         WHERE TABLE_NAME = 'user' AND TABLE_SCHEMA = 'mysql')
                ,"Host","'127.0.0.1'"),
                ' FROM mysql.user WHERE User="root"'); 
    
         PREPARE stmt FROM @s; 
         EXECUTE stmt;
    
  5. さらに、mysql_upgrade -u -pを実行して、すべてが問題ないかどうかを確認できます。

2
ZeJur

私の答えから ここ 、これは役に立つかもしれないと思った:

この問題を修正するために多くの手順を試しました。この問題の可能な解決策には、ナンセンスからセンスを除外するのが難しいソースが非常に多くあります。私は最終的に良い解決策を見つけました ここ

ステップ1:データベースのバージョンを特定する

$ mysql --version

MySQLで次のような出力が表示されます:

$ mysql  Ver 14.14 Distrib 5.7.16, for Linux (x86_64) using  EditLine wrapper

またはMariaDBの場合は次のように出力します:

mysql  Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using readline 5.1

後で使用するため、実行しているデータベースとバージョンをメモします。次に、データベースに手動でアクセスできるようにデータベースを停止する必要があります。

ステップ2:データベースサーバーの停止

ルートパスワードを変更するには、事前にデータベースサーバーをシャットダウンする必要があります。

MySQLでそれを行うには:

$ Sudo systemctl stop mysql

そしてMariaDBの場合:

$ Sudo systemctl stop mariadb

ステップ3:権限チェックなしでデータベースサーバーを再起動する

ユーザー権限に関する情報をロードせずにMySQLとMariaDBを実行すると、パスワードを入力せずにルート権限でデータベースコマンドラインにアクセスできます。これにより、知らないうちにデータベースにアクセスできるようになります。

これを行うには、データベースがユーザー権限情報を保存する付与テーブルをロードしないようにする必要があります。これは少しセキュリティ上のリスクがあるため、他のクライアントが接続できないようにネットワークもスキップする必要があります。

許可テーブルをロードしたり、ネットワークを有効にしたりせずにデータベースを起動します:

$ Sudo mysqld_safe --skip-grant-tables --skip-networking &

このコマンドの最後にあるアンパサンドにより、このプロセスがバックグラウンドで実行されるため、端末を引き続き使用できます。

これで、パスワードを要求しないルートユーザーとしてデータベースに接続できます。

$ mysql -u root

代わりに、データベースシェルプロンプトがすぐに表示されます。

MySQLプロンプト

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

mysql>

MariaDBプロンプト

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

MariaDB [(none)]>

これでrootアクセスが可能になったので、rootパスワードを変更できます。

ステップ4:ルートパスワードの変更

mysql> FLUSH PRIVILEGES;

これで、実際にルートパスワードを変更できます。

MySQL 5.7.6以降およびMariaDB 10.1.20以降、次のコマンドを使用します。

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

MySQL 5.7.5以前およびMariaDB 10.1.20以前、 つかいます:

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');

new_passwordを選択した新しいパスワードに置き換えてください。

注:ALTER USERコマンドが機能しない場合は、通常、より大きな問題を示しています。ただし、代わりにUPDATE ... SETを試してルートパスワードをリセットできます。

[重要]これは私の特定の問題を修正した特定の行です!

mysql> UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE User = 'root' AND Host = 'localhost';

この後、必ず許可テーブルを再ロードしてください。

いずれの場合でも、コマンドが正常に実行されたことの確認が表示されます。

Query OK, 0 rows affected (0.00 sec)

パスワードが変更されたため、データベースサーバーの手動インスタンスを停止して、以前と同じように再起動できます。

ステップ5:データベースサーバーを通常どおり再起動する

チュートリアルでは、データベースを再起動するためにさらにいくつかの手順に進みますが、使用したのはこれだけです。

MySQLの場合:$ Sudo systemctl start mysql

MariaDBの場合:を使用します

$ Sudo systemctl start mariadb

次のコマンドを実行して、新しいパスワードが正しく適用されたことを確認できます。

$ mysql -u root -p

これで、コマンドは新しく割り当てられたパスワードを要求するようになります。それを入力すると、期待どおりにデータベースプロンプトにアクセスできるはずです。

結論

これで、MySQLまたはMariaDBサーバーへの管理アクセスが復元されました。選択した新しいルートパスワードが強力で安全であることを確認し、安全な場所に保管してください。

1
Blairg23

私のアプリケーションはMura CMSを使用しており、この問題に直面しました。ただし、解決策は、mysqlローカルサーバーと構成ファイルのパスワードのパスワードが一致しないことでした。それらを同期するとすぐに動作しました。

1
Yoosaf Abdulla

私はたくさんグーグルで検索しましたが、私の問題に対する明確な答えは見つかりませんでした。 KeyPassを使用して強力なパスワードを生成し、mysqlワークベンチで正常に使用して接続できましたが、コマンドラインからはできませんでした。そのため、pswを簡単なものに変更し、コマンドラインで機能しました。私は、ターミナルから接続できる強力なパスワードを作成することができました。したがって、あらゆる種類のことを試みる前に、簡単なパスワードで最初に試すことをお勧めします。

0
Rossygnol

SugarCRM(無料のCRM)のインストール中にこの問題が発生しました。

システムは、rootユーザーを使用してデータベースに接続できませんでした。コンソールからルートとして確実にログインできました...問題は何でしたか?

私の状況では、まったく同じエラーが発生していましたが、それはパスワードが$_POSTデータ、つまりパスワードの<文字からmysqlに直接送信されたためです。 &lt;としてmysqlに送信されました。これはパスワードが間違っていたことを意味します。

他のすべては少し助けにはなりませんでした。 mysqlのユーザーのリストは、匿名ユーザー(ルートエントリの後に表示されます)を含めて正しいものでした。

0
Alexis Wilke

UTを実行していて、エラーメッセージが表示され始めました。何が問題だったのかわかりません。しかし、INTELLIJのエンコードスタイルをUTF8に変更すると、再び機能し始めました。

ユーザー 'root' @ 'localhost'のアクセスは拒否されました(パスワードyesを使用)hibernate

これは私のURLですdb.url = jdbc:mysql:// localhost:3306/somedb?useUnicode = true&connectionCollat​​ion = utf8_general_ci&characterSetResults = utf8&characterEncoding = utf8

0
Sandeep M

このエラーは、インストール時にパスワードを設定しなかった場合に発生します。この場合、unix-socketプラグインを使用したmysqlです。

ただし、設定(テーブルmysql.user)からプラグインリンクを削除すると、他の問題が発生します。これは問題を解決せず、別の問題を作成します。削除されたリンクを修正し、パスワード( "PWD")を設定するには、次を実行します。

1)上記のように--skip-grant-tablesで実行します。

動作しない場合は、/ etc/mysql/mysql.conf.d/mysqld.cnfのセクション[mysqld]に文字列skip-grant-tablesを追加します。次に、Sudoサービスmysqlを再起動します。

2)mysql -u root -pを実行してから、(「PWD」を変更):

update mysql.user 
    set authentication_string=PASSWORD("PWD"), plugin="mysql_native_password" 
    where User='root' and Host='localhost';    
flush privileges;

quit
then Sudo service mysql restart. Check: mysql -u root -p.

再起動する前に、mysqld.cnfファイルからその文字列を削除します(設定されている場合)。

@ bl79はこの答えの著者です。私はそれを再投稿しました。

0
AlexNikonov

MySQLで作成した空のユーザーを削除することで、この問題を解決しました。 rootユーザーと自分のユーザーのみがいます。残りを削除しました。

0
jjmartinez

userテーブルのmysqlDBを更新します。空白のパスワードを設定します。rootユーザーを使用していたので、rootユーザーのパスワードを設定しました。

update mysql.user set password = PASSWORD('123456') where password = '';
flush privileges;

そして、ATG CIMから再度パスワードを入力してみましたが、うまくいきました。

After update

http://i.stack.imgur.com/3Lchp.png

0
Mohit