web-dev-qa-db-fra.com

Puis-je me connecter à SQL Server à l'aide de l'authentification Windows depuis Java EE webapp?

Je cherche actuellement à établir une connexion à une base de données SQL Server à partir de mon application Web Java EE utilisant l'authentification Windows au lieu de l'authentification SQL Server. J'exécute cette application à partir de Tomcat 6.0, utilisant le pilote Microsoft JDBC. 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 avec la connexion à une base de données SQL Server de cette manière lorsque vous utilisez 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 that l'authentification pour SQL Server?

UPDATE : Je sais qu’en ASP.net, il existe un moyen de configurer l’authentification Windows pour accéder à la webapp, ce qui est exactement ce que je recherche, sauf Je souhaite transmettre ce jeton à SQL Server pour accéder à la base de données.

53
karlgrz

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 pense que non)

Mais si vous souhaitez utiliser les informations d'identification de l'utilisateur exécutant 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 copiez le fichier approprié DLL 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

76
Jerome Delattre

regarder

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 à 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) à la place de l'authentification SQL Server habituelle (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 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 ne sont fournis, 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 que Windows soit connecté et connecté). la bibliothèque SSO est également installée - consultez README.SSO dans la distribution pour savoir comment procéder).

25
opensas

Cela fonctionne réellement pour moi:

Selon le fichier README.SSO fourni avec la distribution jtdsd:

Pour que Single Sign On fonctionne, jTDS doit pouvoir charger la bibliothèque SPPI native ntlmauth.dll. Placez ceci DLL n'importe où dans le chemin système (défini par la variable système PATH, système)), et vous êtes tous ensemble.

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

J'ai configuré un port dédié à l'instance de serveur SQL (2302) afin de réduire le besoin d'un nom d'instance - c'est simplement quelque chose que je fais. Portail est mon nom de base de données.

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

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

Au lieu de cela, utilisez le pilote jtds jdbc . Lisez le fichier README.SSO de la distribution de jtds pour savoir comment configurer l'authentification unique (authentification native) et pour placer le fichier natif DLL) afin de garantir son chargement par la JVM.

5
Kevin Day

J'avais un problème avec la connexion à MS SQL 2005 à l'aide de l'authentification Windows. J'ai pu résoudre le problème avec 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 ntlmauth.dll dans le répertoire c:\windows\system32 (l'enregistrement de la dll n'était pas nécessaire) sur la machine du serveur Web.
  4. Modifiez l'identité de connexion du 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 à dbo.master).

Mon environnement: Windows XP Clinet hébergeant Apache Tomcat 6 avec backend MS SQL 2005 sous Windows 2003

3
nathan