53 votes

Puis-je me connecter à SQL Server en utilisant l'authentification Windows à partir d'une application Web Java EE ?

J'étudie actuellement comment établir une connexion à une base de données SQL Server à partir de mon application Web Java EE en utilisant l'authentification Windows au lieu de l'authentification SQL Server. J'exécute cette application à partir de Tomcat 6.0 et j'utilise le pilote JDBC de Microsoft. Mon fichier de propriétés de connexion se présente comme suit :

dbDriver              = com.microsoft.sqlserver.jdbc.SQLServerDriver
dbUser                = user
dbPass                = password
dbServer              = localhost:1433;databaseName=testDb
dbUrl                 = jdbc:sqlserver://localhost:1433

Je n'ai aucun problème à me connecter à une base de données SQL Server de cette manière lorsque j'utilise l'authentification SQL Server.

Existe-t-il un moyen de récupérer les informations d'identification de l'authentification Windows de l'utilisateur et d'utiliser les données d'identification de l'utilisateur ? que d'authentification pour SQL Server ?

UPDATE : Je sais qu'en ASP.net, il existe un moyen de configurer l'authentification Windows pour l'accès à la webapp, ce qui est exactement ce que je recherche, sauf que je veux transmettre ce jeton au serveur SQL pour l'accès à la base de données.

76voto

Jerome Delattre Points 678

Je ne pense pas que l'on puisse pousser les informations d'identification de l'utilisateur du navigateur vers la base de données (et cela a-t-il un sens ? Je ne pense pas).

Mais si vous voulez utiliser les informations d'identification de l'utilisateur qui exécute Tomcat pour vous connecter à SQL Server, vous pouvez utiliser le pilote JDBC de Microsoft. Construisez simplement votre URL JDBC comme ceci :

jdbc:sqlserver://localhost;integratedSecurity=true;

Et copier la DLL appropriée dans le répertoire bin de Tomcat (sqljdbc_auth.dll fourni avec le pilote)

MSDN > Connexion à SQL Server avec le pilote JDBC > Construction de l'URL de connexion

25voto

opensas Points 13527

Regardez

http://jtds.sourceforge.net/faq.html#driverImplementation

Quel est le format d'URL utilisé par jTDS ?

Le format de l'URL pour jTDS est :

jdbc:jtds:<server_type>://<server>[:<port>][/<database>][;<property>=<value>[;...]]

... domaine Spécifie le domaine Windows dans lequel s'authentifier. S'il est présent et que le nom d'utilisateur et le mot de passe sont fournis, jTDS utilise l'authentification Windows (NTLM) au lieu de l'authentification SQL Server habituelle (c'est-à-dire que l'utilisateur et le mot de passe fournis sont l'utilisateur et le mot de passe du domaine). Cela permet aux clients non-Windows de se connecter à des serveurs qui sont uniquement configurés pour accepter l'authentification Windows.

Si le paramètre domain est présent mais qu'aucun nom d'utilisateur et mot de passe n'est fourni, jTDS utilise sa bibliothèque native Single-Sign-On et se connecte avec les informations d'identification de l'utilisateur Windows connecté (pour que cela fonctionne, il faut évidemment être sous Windows, connecté à un domaine et avoir installé la bibliothèque SSO - consultez README.SSO dans la distribution pour savoir comment faire).

7voto

Andy Points 31

En fait, ça marche pour moi :

Selon le README.SSO qui est fourni avec la distribution de jtdsd :

Pour que l'authentification unique fonctionne, jTDS doit être en mesure de charger la bibliothèque SPPI native. ntlmauth.dll . Placez cette DLL n'importe où dans le chemin du système (défini par le fichier PATH variable système) et vous êtes prêt.

Je l'ai placé dans mon dossier jre/bin

J'ai configuré un port dédié à l'instance du serveur sql (2302) pour éviter d'avoir à donner un nom d'instance - c'est juste un truc que je fais. lportal est le nom de ma base de données.

jdbc.default.url=jdbc:jtds:sqlserver://192.168.0.147:2302/lportal;useNTLMv2=true;domain=mydomain.local

5voto

Kevin Day Points 9446

À moins que vous n'ayez une raison impérieuse de ne pas le faire, je vous suggère d'abandonner le pilote MS JDBC.

Au lieu de cela, utilisez le pilote jdbc jtds . Lisez le fichier README.SSO de la distribution jtds pour savoir comment configurer l'authentification unique (authentification native) et où placer la DLL native pour qu'elle puisse être chargée par la JVM.

3voto

nathan Points 41

J'ai eu des difficultés à me connecter à MS SQL 2005 en utilisant l'authentification Windows. J'ai pu résoudre ce problème grâce à l'aide de ce forum et d'autres. Voici ce que j'ai fait :

  1. Installer le pilote JTDS
  2. N'utilisez pas la propriété "domain= " dans la chaîne jdbc:jtds:://[ :][/][;=[ ;...]]].
  3. Installez le ntlmauth.dll dans c : \windows\system32 (l'enregistrement de la dll n'est pas nécessaire) sur la machine du serveur web.
  4. Changez l'identité de connexion pour le service Apache Tomcat en un utilisateur du domaine ayant accès au serveur de base de données SQL (il n'était pas nécessaire que l'utilisateur ait accès au dbo.master).

Mon environnement : Windows XP clinet hébergeant Apache Tomcat 6 avec un backend MS SQL 2005 sur Windows 2003

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X