2012-01-19 14 views
1

経由のMySQLにアクセスしたときに「無効な認証の仕様は、」私は、既存のApache/Tomcatの/ MySQLのアプリケーションが実行されているハードウェアを交換する使命を帯びてきました。古いマシンはUbuntuを実行していますが、新しいマシンはきれいでフレッシュなDebian Squeeze 64ビットインストールです。のTomcat + MySQLの:Tomcatアプリケーション

私はほとんどすべて、バックアップアップの上にコピーされ、新しいデータベースサーバー上のデータベースを復元しました。アプリケーションサーバーのアプリケーションのデータベース接続パラメータを、新しいデータベースサーバーのIPアドレスに置き換えました。

データベースは、コマンドライン上の問題なくアクセスすることができます。しかし、Tomcatアプリケーションを使用してデータベースにアクセスすると、次のエラーメッセージが用意されています

Exception while connecting to database: java.sql.SQLException: Invalid authorization specification message from server: "Access denied for user 'root'@'srvbisonapp.local' (using password: YES)" 
java.sql.SQLException: Invalid authorization specification message from server: "Access denied for user 'root'@'srvbisonapp.local' (using password: YES)" 
java.lang.NullPointerException 
java.sql.SQLException: Invalid authorization specification message from server: "Access denied for user 'root'@'srvbisonapp.local' (using password: YES)" 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2001) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1907) 
    at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:2524) 
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:818) 
    at com.mysql.jdbc.Connection.createNewIO(Connection.java:1808) 
    at com.mysql.jdbc.Connection.<init>(Connection.java:452) 
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:411) 
    at java.sql.DriverManager.getConnection(DriverManager.java:620) 
    at java.sql.DriverManager.getConnection(DriverManager.java:222) 
    at de.branion.db.mysql.DBConnection.connect(DBConnection.java:107) 
    at de.branion.db.mysql.DBConnection.connectPermissions(DBConnection.java:41) 
    at de.branion.permissions.User.loadFromDB(User.java:75) 
    at de.branion.permissions.User.login(User.java:360) 
    at org.apache.jsp.login_jsp._jspService(login_jsp.java:133) 
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
    at java.lang.Thread.run(Thread.java:636) 

動作しない間違った資格情報を使用してデータベースへのアクセスを、そして、それは別のエラーメッセージを表示します。したがって、問題は実際の資格情報ではありません。私はこの問題をGoogleにしようとしたとして、私が言ったように、アクセスがまだ

mysql -u root -p 

を使用して、コマンドラインで動作しますが、私は多くの人が長年にわたってトラブルの同じ種類を持っていたことを見ましたが、多くはないが真の解決策を持っていました。私がこれまで試した:

  • は、Tomcatアプリケーションが使用しているログインのホストパラメータを変更する(エラーメッセージで見つかった)「%」、
  • はない「ALL」特権の付与が、許可しますTomcatが使用しているユーザーに対して個別の権限(SELECT、INSERTなど)を使用しています

どちらもネット上で見つかったもので、どちらも役に立ちませんでした。

私は、MySQLデータベースにアクセスするために使用される古いの.jarは、MySQLの新しい(最近の)バージョンと互換性がありませんが、そう言っていないように、それは難解な何かを恐れています。私は、転送されたアプリケーションを再加工する必要がないソリューションを見つけることを願っています。

私はあなたが必要とする情報を提供することができます。

ありがとうございます。

答えて

0

アクセスは、ユーザ'root'@'srvbisonapp.local' (using password: YES)

のために拒否されたあなたは、このコマンドを実行して、このユーザーのためにpreviledgesをチェック

show grants for 'root'@'srvbisonapp.local'; 

そして、このユーザーが持っているものの特権見ることができます。

また、このエラーは明らかに認証の詳細は、あなたが、これは動作するはずです、Tomcatアプリケーションの接続パラメータに必要な変更を行いMySQLの

のrootアカウント
GRANT USAGE ON *.* TO 'root'@'srvbisonapp.local' IDENTIFIED BY 'password_you_wish'; 
FLUSH PRIVILEGES; 

を使用して、既存のユーザーの パスワード変更をすることができ、このユーザのために間違っていることを示しています

+0

Dammit。エラーが見つかりました。アプリケーションは私が思ったのとは違うパスワードを使っていました。ビルドスクリプトはビルド中に設定ファイルを変更したので、アプリケーションが別のパスワードを使用している間に、1つのパスワードで手動でアクセスをテストしました。あなたの助けに感謝し、私はあなたのコメントに基づいて二重にチェックしたので、私はこれを解決策として受け入れます。ありがとう。 – 0xCAFEBABE

3

私は同じエラーメッセージを持って、解決することはほぼそう簡単ではありませんでした。私のユーザーは同じパスワードを使用して認証することができ、多くのSQL文が正常に機能しました。デバッグの1〜2時間後に、SQLセキュリティディレクターで定義されたVIEWとユーザーデータベースから削除されたDEFINERを参照していたSELECTステートメントに絞り込まれました。"deleteduser"が削除される前にビューが作成されました:

CREATE 
DEFINER = `deleteduser`@`%` 
SQL SECURITY DEFINER 
VIEW myview AS 
... 

これはMySQLのマイナーなバグです。エラーメッセージは、すでに承認されているloggedinuserではなく、deleteduserを認可する際に問題が報告されているはずです。 I reported the bug here

関連する問題