web-dev-qa-db-ja.com

jdbc.SQLServerException:任意のユーザーのユーザーのログインに失敗しました

ローカルSQL DBとの接続をテストしようとしています。私はこのコードを持っています:

try{
    Class.forName("com.Microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
    DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=SocialFamilyTree;user=SOSCOMP");

}catch(Exception e){
    System.out.println("Couldn't get database connection.");
    e.printStackTrace();
}

多くのユーザーを試しました。私のWindowsユーザーはSOSCOMPで、パスワードがありません。 SQL 2008がユーザーを「sys」「dbo」として作成することも知っています。これらも試しました。私はいつも得ています:

Couldn't get database connection.
com.Microsoft.sqlserver.jdbc.SQLServerException: Login failed for user 'SOSCOMP'.

    at com.Microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.Java:196)
    at com.Microsoft.sqlserver.jdbc.TDSTokenHandler.onEOF(tdsparser.Java:246)
    at com.Microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.Java:83)
    at com.Microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.Java:2532)
    at com.Microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.Java:1929)
    at com.Microsoft.sqlserver.jdbc.SQLServerConnection.access$000(SQLServerConnection.Java:41)
    at com.Microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.Java:1917)
    at com.Microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.Java:4026)
    at com.Microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.Java:1416)
    at com.Microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.Java:1061)
    at com.Microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.Java:833)
    at com.Microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.Java:716)
    at com.Microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.Java:841)
    at Java.sql.DriverManager.getConnection(DriverManager.Java:579)
    at Java.sql.DriverManager.getConnection(DriverManager.Java:243)
    at FT_Receiver.FT_Receiver.main(FT_Receiver.Java:12)

何か案は?

ありがとう

8
Mike

Windows認証を使用しているデータベースに接続しようとする場合、接続文字列で 'integratedSecurity'オプションを使用できます。

DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=SocialFamilyTree;integratedSecurity=true;");
18
piotrp

非常に最近、これを経験したので、ほとんど同じ問題を解決するために私が取った手順は

  1. sQL Server Management Studioを使用して目的のアカウントでログインし、読み取り(および必要に応じて書き込み)するためのアクセスを確認します。
  2. SQL Server構成マネージャーを使用して、サーバーインスタンスが対象のIPアドレスでリッスンしていることを確認します
  3. ファイアウォールを無効にして、邪魔にならないことを確認します(将来必要になる場合は例外を追加します)。

私にとって絶対的なキッカーは、インスタンスがリッスンするように設定されているIPアドレスとポートを理解していたため、接続文字列を作成したときに接続が拒否されませんでした。

また、Windowsログインを使用して接続する場合は、SQLインスタンスが混合モード認証用に構成されていることを確認する必要があります(つまり、WindowsおよびSQLログインを許可するため)

8
Paul D'Ambra

このエラーが発生したため、SQLサーバーはポートを正しくリッスンします。

  1. Sql Server Management Studioを開き、サーバーに接続します。
  2. サーバーのアイコンを右クリックして、プロパティを選択します。
  3. [セキュリティ]タブに移動し、SQLサーバーとWindows認証モードを選択します。

ユーザーを定義する場合は、ツリーから[セキュリティ]-> [ログイン]に移動し、ログインフォルダを右クリックして[新しいログイン]をクリックします。

これで、サーバーはこのURL文字列で動作するはずです。サーバーのログファイルを使用すると、サーバーの動作を理解しやすくなります。

3
Vaggos Phl

Re:やりました。それでも警告:sqljdbc_auth.dllの読み込みに失敗しました原因:Java.library.pathにsqljdbc_authがありません– Mike Oct 7 at 14:03

シェルから実行している場合は、EclipseまたはコマンドラインでVM引数の下にこれを追加して、sqljdbc_auth.dllへのパスを追加する必要があります。-Djava.library.path = "\ MS SQL Server JDBCドライバー3.0\sqljdbc_3.0\enu\auth\x86 "

32ビットWindowsを実行している場合です。それ以外の場合、最終的なサブディレクトリはそれに応じて変化します。

SQL Serverのユーザーベースの認証を設定するには、これがより良い答えになると思います。 SQL Server 2008をJavaに接続:ユーザーエラーのためログインに失敗しました

(私はそれをここに要約しようとします: http://silveira.wikidot.com/sql-server

1
Nikhil