web-dev-qa-db-ja.com

Windows認証モードでのMSSQLサーバーへのJDBC接続

次のプログラムでは、Windows認証でjdbcを使用してMSSQLサーバーに接続しようとしています。しかし、次のエラーが発生します

import Java.io.*;
import Java.sql.*;
import Java.util.GregorianCalendar;
import Java.util.Date;
import Java.text.DateFormat;
import Java.text.SimpleDateFormat;
import Java.util.Calendar;

class  Cms_truncate
{
    public static void main(String[] args) 
    {
         Calendar cal = new GregorianCalendar();

         //String name="cmscim";
         //String filename = "D:\\programs\\Tomcat 6.0\\webapps\\timescape\\canteen_scheduller\\CMS_CSV\\cms_cim\\"+ name+"-"+cal.get(Calendar.YEAR) +"-" +(cal.get(Calendar.MONTH)+1) + "-"+cal.get(Calendar.DATE)+".csv";
         Connection conn = null;
         String url = "jdbc:sqlserver://localhost:1433;databasename=CMS_TIMES_MAIN;integratedSecurity=true";
         String driver = "com.Microsoft.sqlserver.jdbc.SQLServerDriver";
         String userName = ""; 
         String password = "";
         Statement stmt;
         try
         {

         Class.forName(driver);//.newInstance();
         conn = DriverManager.getConnection(url,userName,password);
         String query = "select * from cim where sapId=10025331";
         stmt = conn.createStatement();
         int flag = stmt.executeUpdate(query);
         System.out.println("flag = "+flag); 
         conn.close();
        System.out.println("");
         } catch (Exception e) {
         e.printStackTrace();
         }

    }
}

SQL ServerをWindows認証モードで使用しています。 Windows認証でjdbcを使用してMSSQLに接続するために他の設定を行う必要がありますか?.

エラー:

com.Microsoft.sqlserver.jdbc.SQLServerException: The TCP/IP connection to the Host localhost, port 1433 has failed. Error: "Connection refused: connect. Verify the connection properties. Make sure that an instance of SQL Server is running on the Host and accepting TCP/IP connections at the port. Make sure that TCP connections to the port are not blocked by a firewall.".
    at com.Microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.Java:190)
    at com.Microsoft.sqlserver.jdbc.SQLServerException.ConvertConnectExceptionToSQLServerException(SQLServerException.Java:241)
    at com.Microsoft.sqlserver.jdbc.SocketFinder.findSocket(IOBuffer.Java:2243)
    at com.Microsoft.sqlserver.jdbc.TDSChannel.open(IOBuffer.Java:491)
    at com.Microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.Java:1309)
    at com.Microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.Java:991)
    at com.Microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.Java:827)
    at com.Microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.Java:1012)
    at Java.sql.DriverManager.getConnection(Unknown Source)
    at Java.sql.DriverManager.getConnection(Unknown Source)
    at Cms_truncate.main(Cms_truncate.Java:28)
13
yatinbc

Windows認証の使用:

String url ="jdbc:sqlserver://PC01\inst01;databaseName=DB01;integratedSecurity=true";

SQL認証の使用:

String url ="jdbc:sqlserver://PC01\inst01;databaseName=DB01";
14
user3029620

次の手順に従ってください。

  1. 次のようにintegratedSecurity=trueをJDBC URLに追加します。

    Url: jdbc:sqlserver://<<Server>>:<<Port>>;databasename=<<DatabaseName>>;integratedsecurity=true 
    
  2. プロジェクトのビルドパスに、sqljdbcドライバー4以降のバージョン(sqljdbc.jar)を必ず追加してください。

    Java.sql.DatabaseMetaData metaData = connection.getMetaData();
    System.out.println("Driver version:" + metaData.getDriverVersion());
    
  3. プロジェクトにVM引数を追加します。

    • DBがインストールされているサーバー(C:\Program Files\sqljdbc_4.0\enu\auth\x86)からsqljdbc_auth.dllファイルを見つけるか、または このリンク からダウンロードします。

    • Dllファイルをプロジェクトフォルダーに配置し、VM引数を次のように指定します:VM引数:-Djava.library.path="<<DLL File path till folder>>"

      注:Javaバージョン32/64ビットを確認してから、32/64ビットバージョンのdllファイルを適宜追加してください。

10
Satish

C:/ windows/System32フォルダーにsqljdbc_auth.dllを追加する必要があります。 http://www.Microsoft.com/en-us/download/details.aspx?displaylang=en&id=11774 からダウンロードできます。

9
kris

あなたの例外トレースから、この問題には複数の可能性があるようです

1)。ポート"1433"がファイアウォールによってブロックされているかどうかを確認する必要があります。ブロックされていることがわかった場合は、「受信ルール」を記述する必要があります。コントロールパネルで見つかった場合-> Windowsファイアウォール->詳細設定(左側にあるオプション)-> インバウンドルール

2)。 SQL Server構成マネージャーで、あなたのTCP/IPプロトコルは無効モードで検索されます。したがって、それを有効にする必要があります。

5
Abhishek Shah

SQL Server構成マネージャーアプリでSQL Server TCP/IPプロトコルを有効にする必要があります。このプロトコルは、SQL Serverネットワーク構成で確認できます。

4

DataGrip内からWindows 7でテストされた現在のMS SQL JDBCドライバー(6.4.0)の場合:

  1. として authenticationSchemeのドキュメント ホストとして完全修飾ドメイン名を使用します。 server.your.domainだけではなくserver;ドキュメントではserverSpn=MSSQLSvc/fqdn:port@REALMを指定する可能性についても言及していますが、これを使用する方法の詳細は提供できません。ホストとしてfqdnを指定すると、spnは自動生成されます。
  2. セットauthenticationScheme=JavaKerberos
  3. セットintegratedSecurity=true
  4. 資格のないユーザー名(およびパスワード)を使用してログインします

これはJavaKerberosを使用しているため、これがWindowsの外部から機能するかどうかについてフィードバックをいただければ幸いです。 .dllは必要ないと思いますが、DataGripを使用して接続を作成したので、確信が持てません。これについてもフィードバックをいただければ幸いです。

2
TheConstructor

Windows認証を行う場合は、最新のMS-JDBCドライバーを使用して、次の手順に従います。

https://msdn.Microsoft.com/en-us/library/gg558122(v = sql.110).aspx

1
Brandon Langley

たくさん苦労した後、私はようやく解決策を見つけました、ここに行きます-

ファイルをダウンロードjtds-1.3.1.jarおよびntlmauth.dllをプログラムファイルに保存-> Java-> JDK-> jre-> bin。

次に、次のコードを使用します-

String pPSSDBDriverName = "com.Microsoft.sqlserver.jdbc.SQLServerDriver";
Class.forName(pPSSDBDriverName);
DriverManager.registerDriver(new com.Microsoft.sqlserver.jdbc.SQLServerDriver());
conn = DriverManager.getConnection("jdbc:jtds:sqlserver://<ur_server:port>;UseNTLMv2=true;Domain=AD;Trusted_Connection=yes");
stmt = conn.createStatement();
String sql = " DELETE FROM <data> where <condition>;
stmt.executeUpdate(sql);
0
Sidharth Taneja