サーバーに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)
Localhostからルートへのアクセスを許可する必要があります。チェック this ubuntuヘルプ
root
などを使用してみてください。
mysql -uroot
次に、ログイン後に別のユーザーとホストを確認できます
select user,Host,password from mysql.user;
パスワードに空白スペースを入れていることを確認してください。
MySQLサーバーを5.1.73から5.5.45にアップグレードした後、同じエラーに直面しました。そのエラーを修正する別の方法があります。
私の場合、ルートパスワードを使用してMySQLに接続できましたが、MySQLはどのユーザーにも特権を付与することを積極的に拒否しました。
ルートとしてMySQLに接続する
mysql -u root -p
次に、MySQLルートパスワードを入力します。
データベースを選択します。
use mysql;
ほとんどの場合、mysql.user
テーブルにはルート用のレコードが1つだけあり、localhost
(これは私の場合)からのみ接続できますが、デフォルトではルート用に2つのレコードがあり、1つはlocalhost
と127.0.0.1
のもう1つ。
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;
さらに、mysql_upgrade -u -p
を実行して、すべてが問題ないかどうかを確認できます。
私の答えから ここ 、これは役に立つかもしれないと思った:
この問題を修正するために多くの手順を試しました。この問題の可能な解決策には、ナンセンスからセンスを除外するのが難しいソースが非常に多くあります。私は最終的に良い解決策を見つけました ここ :
ステップ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サーバーへの管理アクセスが復元されました。選択した新しいルートパスワードが強力で安全であることを確認し、安全な場所に保管してください。
私のアプリケーションはMura CMSを使用しており、この問題に直面しました。ただし、解決策は、mysqlローカルサーバーと構成ファイルのパスワードのパスワードが一致しないことでした。それらを同期するとすぐに動作しました。
私はたくさんグーグルで検索しましたが、私の問題に対する明確な答えは見つかりませんでした。 KeyPassを使用して強力なパスワードを生成し、mysqlワークベンチで正常に使用して接続できましたが、コマンドラインからはできませんでした。そのため、pswを簡単なものに変更し、コマンドラインで機能しました。私は、ターミナルから接続できる強力なパスワードを作成することができました。したがって、あらゆる種類のことを試みる前に、簡単なパスワードで最初に試すことをお勧めします。
SugarCRM(無料のCRM)のインストール中にこの問題が発生しました。
システムは、rootユーザーを使用してデータベースに接続できませんでした。コンソールからルートとして確実にログインできました...問題は何でしたか?
私の状況では、まったく同じエラーが発生していましたが、それはパスワードが$_POST
データ、つまりパスワードの<
文字からmysqlに直接送信されたためです。 <
としてmysqlに送信されました。これはパスワードが間違っていたことを意味します。
他のすべては少し助けにはなりませんでした。 mysqlのユーザーのリストは、匿名ユーザー(ルートエントリの後に表示されます)を含めて正しいものでした。
UTを実行していて、エラーメッセージが表示され始めました。何が問題だったのかわかりません。しかし、INTELLIJのエンコードスタイルをUTF8に変更すると、再び機能し始めました。
ユーザー 'root' @ 'localhost'のアクセスは拒否されました(パスワードyesを使用)hibernate
これは私のURLですdb.url = jdbc:mysql:// localhost:3306/somedb?useUnicode = true&connectionCollation = utf8_general_ci&characterSetResults = utf8&characterEncoding = utf8
このエラーは、インストール時にパスワードを設定しなかった場合に発生します。この場合、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はこの答えの著者です。私はそれを再投稿しました。
MySQLで作成した空のユーザーを削除することで、この問題を解決しました。 rootユーザーと自分のユーザーのみがいます。残りを削除しました。
userテーブルのmysqlDBを更新します。空白のパスワードを設定します。rootユーザーを使用していたので、rootユーザーのパスワードを設定しました。
update mysql.user set password = PASSWORD('123456') where password = '';
flush privileges;
そして、ATG CIMから再度パスワードを入力してみましたが、うまくいきました。