2008-10-03 6 views
52

J'étudie actuellement comment établir une connexion à une base de données SQL Server à partir de mon application Web Java EE à l'aide de l'authentification Windows au lieu de l'authentification SQL Server. Je cours cette application hors de Tomcat 6.0, et utilise le conducteur de Microsoft JDBC. Mon fichier de propriétés de connexion se présente comme suit:Puis-je me connecter à SQL Server à l'aide de l'authentification Windows à partir de la webapp Java EE?

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

je zéro problème avec la connexion à une base de données SQL Server de cette manière lors de l'authentification SQL Server.

Est-il possible que je puisse récupérer les informations d'identification de l'authentification Windows de l'utilisateur et utiliser cette authentification pour SQL Server?

MISE À JOUR: Je sais que dans ASP.net il y a un moyen de mettre en place l'authentification Windows pour l'accès à l'application Web, ce qui est exactement ce que je cherche, à l'exception que je veux transmettre ce jeton de SQL Server pour accès à la base de données.

Répondre

72

Je ne pense pas que l'on peut pousser les informations d'identification utilisateur du navigateur à la base de données (et fait il est logique? Je ne pense pas)

Mais si vous voulez utiliser les informations d'identification de l'utilisateur exécutant Tomcat pour connecter SQL Server, vous pouvez utiliser le pilote JDBC de Microsoft. Il suffit de construire votre URL JDBC comme ceci:

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

et copiez le répertoire bin de DLL approprié pour Tomcat (sqljdbc_auth.dll fourni avec le pilote)

MSDN > Connecting to SQL Server with the JDBC Driver > Building the Connection URL

+3

Pourquoi ne pas faire passer les informations d'identification de l'utilisateur du navigateur à la base de données est-elle logique? Je pense que l'authentification multi-hop est EXACTEMENT ce que le PO recherchait ici. Étant donné que j'ai trois ans de retard sur cette réponse, mais je voudrais comprendre votre raisonnement. – KyleM

5

Sauf si vous avez des raisons vraiment convaincantes de ne pas le faire, je vous suggère d'abandonner le pilote MS JDBC. Pour cela, utilisez le jtds jdbc driver. Lisez le fichier README.SSO dans la distribution jtds pour savoir comment configurer l'authentification unique (native authentication) et où placer la DLL native pour vérifier qu'elle peut être chargée par la JVM.

+0

La question est vraiment à la recherche de l'authentification unique (SSO). – jim

+0

@jim: si vous avez une authentification basée sur Kerberos sous Linux, alors vous pouvez avoir SSO, mais je pourrais trouver la seule façon de l'utiliser pour l'authentification MS SQL sous Linux par le pilote DataDirect. –

+0

Pourquoi le pilote JTDS est-il préférable? Je comprends qu'il ne supporte pas la mise en commun des connexions, ce qui est pour moi essentiel. – megaflop

22

regard sur

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

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

Le format d'URL pour jTDS est:

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

... domaine Spécifie le domaine Windows pour authentifier Si présent et le nom d'utilisateur et mot de passe sont fournis, jTDS utilise l'authentification Windows (NTLM). au lieu 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 configurés uniquement 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 Windows, connecté à un domaine, et également avoir la bibliothèque SSO installée - consultez README.SSO dans la distribution sur comment faire cela).

+1

Informations très utiles - en particulier sur le domaine! – StephMW

3

J'avais un problème avec la connexion à MS SQL 2005 en utilisant l'authentification Windows. J'ai été en mesure de résoudre le problème avec l'aide de ce forum et d'autres. Voici ce que je faisais:

  1. Installez le pilote JTDS
  2. Ne pas utiliser le "domain =" propriété dans le jdbc: jtds :: // [:] [/] [; = [; .. .]] string
  3. Installez ntlmauth.dll dans le répertoire c: \ windows \ system32 (l'enregistrement de la dll n'était pas requis) sur le serveur Web.
  4. Modifier l'identité de connexion pour le service Apache Tomcat à un utilisateur de 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 fichier dbo.master).

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

6

Cela fonctionne en fait pour moi:

par le README.SSO qui vient avec la distribution de jtdsd :

Pour que l'authentification unique fonctionne, jTDS doit pouvoir charger la bibliothèque SPPI native ntlmauth.dll. Placez cette DLL n'importe où dans le chemin d'accès système (définie par la variable système PATH) et vous êtes tous définis.

je l'ai placé dans mon jre/bin

Je configuré un port dédié à alléger le besoin d'un nom d'instance de l'instance SQL Server (2302) - juste quelque chose 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 
Questions connexes