web-dev-qa-db-fra.com

Connectez-vous à SQL Server avec l'authentification Windows à partir d'une machine Linux via JDBC

Je veux pouvoir me connecter à un serveur SQL en utilisant l'authentification jdbc et windows. J'ai vu quelques réponses sur Internet disant que je devrais ajouter la propriété suivante à la chaîne de connexion:

integratedSecurity=true;

Et aussi ajouter

sqljdbc_auth.dll

Vers le chemin Java.

Mais cela, pour autant que je comprends, ne s'applique que lorsque je me connecte à partir d'une machine Windows. Quand j'essaye ceci sur une machine Linux, j'obtiens:

Java.sql.SQLException: This driver is not configured for integrated authentication

Ma question est de savoir comment le faire à partir d'une machine Linux.

Merci

15
zuckermanori

Eh bien, finalement, je réponds à ma propre question: il n'est pas possible d'utiliser l'authentification Windows à partir d'une machine Linux à l'aide du pilote Microsoft JDBC. Cela est possible en utilisant le pilote jTDS JDBC en utilisant la chaîne de connexion suivante:

jdbc:jtds:sqlserver://Host:port;databaseName=dbname;domain=domainName;useNTLMv2=true;

Merci à tous pour tous les commentaires

33
zuckermanori

TL; DR

Il n'est pas possible d'utiliser l'authentification Windows native pour les connexions JDBC à MSSQL à partir d'une machine virtuelle Java exécutée sous Linux.


Cet article MSDN explique les méthodes d'authentification avec JDBC sur Linux, les erreurs potentielles et les options disponibles:

https://blogs.msdn.Microsoft.com/psssql/2015/01/09/jdbc-this-driver-is-not-configured-for-integrated-authentication/

... dans le pilote JDBC 4.0, vous pouvez utiliser la propriété de connexion authenticationScheme pour indiquer comment vous souhaitez utiliser Kerberos pour vous connecter à SQL. Il y a deux paramètres ici.

  • NativeAuthentication (par défaut) - Ceci utilise sqljdbc_auth.dll et est spécifique à la plate-forme Windows. C'était la seule option avant le pilote JDBC 4.0.

  • JavaKerberos - Utilise les API Java pour invoquer des kerberos et ne dépend pas de la plate-forme Windows. Ceci est Java spécifique et non lié au système d'exploitation sous-jacent) , cela peut donc être utilisé sur les plates-formes Windows et Linux.

...

Le document suivant décrit comment utiliser Kerberos avec le pilote JDBC et décrit ce qui est nécessaire pour que JavaKerberos fonctionne correctement.

Utilisation de l'authentification intégrée Kerberos pour se connecter à SQL Server http://msdn.Microsoft.com/en-us/library/gg558122%28v=sql.110%29.aspx

5
mjn

Je sais que c'est une sorte de sujet plus ancien, mais au cas où Google enverrait des gens ici:

Il existe deux principaux pilotes JDBC pour SQL Server. L'un vient de Microsoft et l'autre de jTDS. jTDS peut, étonnamment, se connecter en utilisant l'authentification Windows (NTLM) à partir d'autres plates-formes, y compris Linux, comme décrit ici: http://jtds.sourceforge.net/faq.html#windowsAuth . Bien entendu, il peut également utiliser des connexions authentifiées SQL. Les connexions authentifiées SQL ne sont pas plus difficiles à utiliser à partir de n'importe quel système d'exploitation que tout autre, alors n'oubliez pas ces options.

La version fournie par Microsoft est celle à partir de laquelle @mjn a fourni un devis de la documentation. Il peut se connecter à l'aide de l'authentification Windows en spécifiant integratedSecurity=true, authenticationScheme=javaKerberos, et authentication=NotSpecified.

Il est difficile de faire fonctionner cela même si vous ne vous efforcez pas de trouver plus de confusion, alors gardez toujours à l'esprit le pilote que vous utilisez - et dites-nous dans ces messages afin que vous puissiez obtenir une aide plus spécifique.

Pour ceux qui utilisent DBeaver, la façon de se connecter à la base de données SQL Server est la suivante:

Afin de se connecter à SQL Server à partir de Linux Debian à l'aide de DBeaver

1.- Sélectionnez le pilote SQL Server jTDS

enter image description here

2.- Entrez les informations de connexion

enter image description here

3.- Allez dans l'onglet Propriétés du pilote et ajoutez le domaine, l'utilisateur, le mot de passe

enter image description here

enter image description here

Juste pour noter, dans certains articles, j'ai trouvé qu'ils devaient changer la propriété USENTLMV2 en VRAI, mais cela a fonctionné pour moi en mettant USERTLNMV2 en vrai ou en faux.

Un problème que j'ai trouvé est que lorsque j'essayais de me connecter à la base de données à l'aide de mon utilisateur et de mon mot de passe, l'erreur suivante s'est produite:

La connexion a échoué. La connexion provient d'un domaine non approuvé et ne peut pas être utilisée avec l'authentification Windows.

enter image description here

Cette erreur a été générée car mon utilisateur était sur le point d'expirer. J'ai essayé avec un autre utilisateur AD et il a pu se connecter.

1
mavi