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
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
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:
... 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
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
2.- Entrez les informations de connexion
3.- Allez dans l'onglet Propriétés du pilote et ajoutez le domaine, l'utilisateur, le mot de passe
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.
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.