非常に単純なjdbcログインテストプログラムを作成しました。そして、あらゆる種類の問題の後、私はそれをほとんど機能させました。ほとんど、この「SQLServerException:ユーザーxxxxxのログインに失敗しました」という問題を乗り越えることができないようです。
単純なデータベースPersonInfoを作成してから、ユーザーuser1 password1(sql認証)を作成しました。そして、試した後、すべてがデータベースに接続できませんでした。
Win 7でSqlServer2008を使用していますが、Microsoftから最新のjdbcドライバーを入手しています。
私のコードは:
import Java.sql.*;
public class hell {
public static void main(String[] args) {
try {
Class.forName("com.Microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
Connection conn= DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=PersonInfo;user=Sohaib;password=0000;");
System.out.println("connected");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
ここに例外があります
Exception: Unable to get connect
com.Microsoft.sqlserver.jdbc.SQLServerException: Login failed for user 'Sohaib'.
and all other supporting errors..
残念ながら、何らかの種類のSqlServer GuruまたはJdbc Guruが私をityみ、助けてくれるまで、私は今、死んでいます。
前もって感謝します。
SQL Serverは「混合モード認証」ですか?これは、WindowsログインではなくSQLサーバーアカウントでログインするために必要です。
これを確認するには、サーバーのプロパティをチェックしてからセキュリティをチェックします。「SQL ServerおよびWindows認証モード」である必要があります。
この問題は、ユーザーが検証できない資格情報でログインしようとした場合に発生します。この問題は、次のシナリオで発生する可能性があります。
シナリオ1:ログインはSQL Serverログインの場合がありますが、サーバーはWindows認証のみを受け入れます。
シナリオ2:SQL Server認証を使用して接続しようとしていますが、使用されているログインがSQL Serverに存在しません。
シナリオ3:ログインにWindows認証を使用できますが、ログインは認識されないWindowsプリンシパルです。認識されないWindowsプリンシパルは、Windowsがログインを検証できないことを意味します。これは、Windowsログインが信頼されていないドメインからのものである可能性があります。
また、ユーザーが誤った情報を入力する可能性もあります。
(sql-cliを使用して)AzureのSQL DBに接続しようとすると、同じエラーメッセージが表示されました。簡単な解決策は、次のように単一引用符でパスワードをエスケープすることでした:
mssql -s server.database.windows.net -u user@server -p 'your_password' -d your_db -e
また、ユーザープロパティの[ステータス]タブでアカウントがロックアウトされていないことを確認してください
Windows認証の代わりにSQL Server認証を使用して新しいログインアカウントを作成することにより、SQL Serverの問題に対するLinux/phpフックを解決しました。
Windows認証を使用している場合は、そのユーザーで少なくとも1回はWindowsにログインしてください。
ために Can not connect to the SQL Server. The original error is: Login failed for user 'username'.
エラー、MSSQLサーバー側のポート要件を満たす必要があります。
Windowsファイアウォールで構成する必要がある既定のポート1433を超える他のポートがあります。
EntityFramework接続からConnectionStringを再利用すると、このエラーが発生しました。接続文字列にユーザー名とパスワードがありますが、「Persist Security Info = True」を指定していません。したがって、接続を確立した後、接続文字列から資格情報が削除されました(したがって、不完全な接続文字列を再利用しました)。もちろん、この設定を使用するときは常に考え直す必要がありますが、この特定のケースでは大丈夫でした。