Migration du pilote JDBC JDBC vers Microsoft JDBC

Microsoft a récemment publié un nouveau pilote JDBC (version 6.0.7507.100) avec des fonctionnalités très intéressantes. Je suis surtout intéressé par la fonctionnalité TVP. C'est pourquoi je voudrais replace le pilote jTDS actuel par le pilote Microsoft.

Le problème se pose lorsque vous essayez de vous connecter à notre server de production. Disons que nous utilisons l'user de domaine "mydomain \ dbuser" pour se connecter à l'instance du server sql. C'est l'URL jtds jtds que nous avons utilisée jusqu'ici:

jdbc:jtds:sqlserver:/sqlServer:1433/myDb;domain=mydomain;user=dbuser;password=secretPwd 

Il fonctionne comme un charme.

Mais lorsque j'essaie d'utiliser le pilote Microsoft, mon application ne peut pas établir une connection à la database. J'ai essayé les strings d'URL suivantes:

 jdbc:sqlserver://sqlServer:1433;database=myDb;username=dbuser;password=secretPwd jdbc:sqlserver://sqlServer:1433;database=myDb;username=mydomain\dbuser;password=secretPwd jdbc:sqlserver://sqlServer:1433;database=myDb;username=dbuser@mydomain;password=secretPwd 

et beaucoup d'autres permutations mais sans succès. L'application échoue avec l'exception suivante:

 com.microsoft.sqlserver.jdbc.SQLServerException: Login failed for user 'mydomain\dbuser' 

Dans le journal SQL Server, nous obtenons l'erreur suivante:

 Login failed for user 'mydomain\dbuser'. Reason: Attempting to use an NT account name with SQL Server Authentication. [CLIENT: 10.10.10.10] 

Notez que l'application est supposée fonctionner sous Linux.

Est-ce que quelqu'un sait à quoi ressemblera l'URL Microsoft JDBC lors de la connection en tant qu'user de domaine?

Mes searchs dans ce numéro m'ont conduit aux conclusions suivantes:

  • La transition simple du pilote jTDS au pilote Microsoft n'est pas possible comme je l'avais prévu dans la question. Cela est dû au fait que le pilote jTDS implémente l'authentification NTLM qui n'est pas disponible sur le pilote Microsoft.
  • Une alternative consiste à utiliser le schéma d'authentification JavaKerberos (comme suggéré par Gord Thomson) qui est disponible sur les machines Linux. Heureusement, nous avons mis en place l'infrastructure Kerberos dans notre environnement de production.

J'ai réussi à append l'authentification Kerberos dans mon service principalement avec l'aide de ces messages: https://blogs.msdn.microsoft.com/psssql/2015/01/09/jdbc-this-driver-is-not-configured -for-integrated-authentication / , https://msdn.microsoft.com/en-us/library/gg558122(v=sql.110).aspx, donc je vais l'utiliser.

Pas directement la réponse à votre question , mais si vous voulez récupérer le dernier pilote (ce qui pourrait résoudre votre problème):

La dernière version de Microsoft est https://www.microsoft.com/en-us/download/details.aspx?id=11774, qui contient également les dlls sqljdbc_xa et sqljdbc_auth pour la security embeddede.

De maven vous obtiendrez https://repo1.maven.org/maven2/com/microsoft/sqlserver/mssql-jdbc/

Directement à partir de la source https://github.com/Microsoft/mssql-jdbc/releases

voir la remarque: https://github.com/Microsoft/mssql-jdbc#download-the-dlls