SQL Server JTDS连接问题

时间:2012-11-08 20:33:43

标签: java sql-server jtds windows-integrated-auth

这很奇怪,我正在连接到已为Windows配置了集成身份验证的sql server 2008实例。我找到了一种绕过集成身份验证的方法:在代码中执行此操作:

Connection con = DriverManager.getConnection( "jdbc:jtds:sqlserver://mydbserver/myDbname;useNTLMv2=true;username=$jboss;password=1234;domain=MYDOMAIN", "$jboss", "1234");

因此,在jtds驱动程序上为name做类之后,它完美无缺。但是,我需要将此作为连接字符串放在配置文件中,当我更改上面的内容以使用getConnection上的方法调用时,无需明确地发送用户名,密码如下:

 Connection con = DriverManager.getConnection( "jdbc:jtds:sqlserver://mydbserver/myDbname;useNTLMv2=true;username=$jboss;password=1234;domain=MYDOMAIN");

我收到Native SSPI库未加载异常,因为它尝试使用Windows身份验证进行身份验证。所以我发现jts发行版中的dll将ntlmauth.dll添加到我的bin和系统类路径中,然后我得到一个不受信任的域登录异常,我知道我可以通过在域下执行“RUNAS.exe”来解决但是这会让我回到必须使用我不想要的集成身份验证。

问题归结为,为什么我可以通过在getConnection()方法上传递用户名和密码作为参数来创建一个没有任何问题的Connection,但是当我不这样做时它会强制进行集成身份验证。如果我自己在代码中创建了Connection,但是我需要一个连接字符串放在我的属性文件中,并且不知道如何构造一个连接字符串来调用getConnection()并提供用户名,密码,这不会是一个问题。作为参数。

我讨厌这些乏味的问题已经谷歌搜索,但空手而归,任何输入都会有所帮助。 - 邓肯

1 个答案:

答案 0 :(得分:2)

参数是user,而不是username。这应该可以解决你的问题。所以试试:

 Connection con = DriverManager.getConnection( "jdbc:jtds:sqlserver://mydbserver/myDbname;useNTLMv2=true;user=$jboss;password=1234;domain=MYDOMAIN");