这很奇怪,我正在连接到已为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()并提供用户名,密码,这不会是一个问题。作为参数。
我讨厌这些乏味的问题已经谷歌搜索,但空手而归,任何输入都会有所帮助。 - 邓肯
答案 0 :(得分:2)
参数是user,而不是username。这应该可以解决你的问题。所以试试:
Connection con = DriverManager.getConnection( "jdbc:jtds:sqlserver://mydbserver/myDbname;useNTLMv2=true;user=$jboss;password=1234;domain=MYDOMAIN");