这很奇怪,我正在连接一个为 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 library not loaded 异常,因为它试图使用 Windows 身份验证进行身份验证。所以我发现 jts 分发中的 dll 将 ntlmauth.dll 添加到我的 bin 和系统类路径中,然后我得到一个不受信任的域登录异常,我知道我可以通过在域下执行“RUNAS.exe”来解决它,但这让我回到不得不使用我不想要的集成身份验证。
问题归结为,为什么我可以通过将用户名和密码作为参数传递给 getConnection() 方法来创建没有任何问题的连接,但是当我不这样做时,它会强制集成身份验证。如果我自己在代码中创建连接,这将不是问题,但我需要一个连接字符串来放入我的属性文件并且不知道如何构造一个将调用 getConnection() 并提供用户名、密码的连接字符串作为参数。
我讨厌这些乏味的问题已经谷歌搜索但空手而归,任何输入都会有所帮助。- 邓肯