在Windows身份validation模式下与MSSQL服务器的JDBC连接

在我的下面的程序中,我试图在Windows身份validation中使用jdbc连接MSSQL Server。 但得到以下错误

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(); } } } 

我在Windows身份validation模式下使用SQL Server。 我是否需要在Windows身份validation中使用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) 

使用Windows身份validation:

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

使用SQL身份validation:

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

您需要在C:/ windows / System32文件夹中添加sqljdbc_auth.dll。 您可以从http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=11774下载它。

您需要在Sql Server Configuration Manager应用程序中启用SQL Server TCP / IP协议。 您可以在SQL Server网络配置中查看协议。

从您的exception跟踪,看起来这个问题有多种可能性

1)。 您必须检查您的端口“1433”是否被防火墙阻止。 如果您发现它被阻止,那么您应该编写“入站规则”。 如果在控制面板中找到它 – > Windows防火墙 – >高级设置(在左侧找到选项) – > 入站规则

2)。 在SQL Server配置管理器中,您的TCP/IP协议将在禁用模式下找到。 所以,你应该启用它。

如果要进行Windows身份validation,请使用最新的MS-JDBC驱动程序并按照此处的说明操作:

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

请尝试以下步骤:

  1. integratedSecurity=true添加到JDBC URL,如下所示:

     Url: jdbc:sqlserver://<>:<>;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 Argument: -Djava.library.path="<>"

      注意:检查您的java版本32/64位,然后相应地添加32/64位版本的DLL文件。

对于在DataGrip中在Windows 7下测试的当前MS SQL JDBC驱动程序(6.4.0):

  1. 根据authenticationScheme上的文档,使用完全限定的域名作为主机,例如server.your.domain而不仅仅是server ; 文档还提到了指定serverSpn=MSSQLSvc/fqdn:port@REALM的可能性,但我无法向您提供有关如何使用它的详细信息。 将fqdn指定为主机时,会自动生成spn。
  2. set authenticationScheme=JavaKerberos
  3. set integratedSecurity=true
  4. 使用您的非限定用户名(和密码)登录

由于这是使用JavaKerberos,我希望得到关于这是否适用于Windows外部的反馈。 我相信不需要.dll,但是当我使用DataGrip创建连接时,我不确定; 我也很感激对此的反馈!