¿Puedo conectarme a SQL Server usando la Autenticación de Windows desde la aplicación web Java EE?

Actualmente estoy investigando cómo hacer una conexión a una base de datos de SQL Server desde mi aplicación web Java EE usando la Autenticación de Windows en lugar de la autenticación de SQL Server. Estoy ejecutando esta aplicación fuera de Tomcat 6.0 y estoy utilizando el controlador JDBC de Microsoft. Mi archivo de propiedades de conexión se ve de la siguiente manera:

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

No tengo problemas para conectarme a una base de datos de SQL Server de esta manera cuando uso la autenticación de SQL Server.

¿Hay alguna forma de que pueda recuperar las credenciales de la Autenticación de Windows del usuario y usar esa autenticación para SQL Server?

ACTUALIZACIÓN : Sé que en ASP.net hay una manera de configurar la Autenticación de Windows para acceder a la aplicación web, que es exactamente lo que estoy buscando, excepto que quiero pasar esa ficha a SQL Server para acceder a la base de datos.

No creo que se puedan transferir las credenciales del usuario del navegador a la base de datos (¿y tiene sentido? Creo que no)

Pero si desea usar las credenciales del usuario que ejecuta Tomcat para conectarse a SQL Server, puede usar el controlador JDBC de Microsoft. Simplemente crea tu URL JDBC de la siguiente manera:

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

Y copie el archivo DLL apropiado al directorio bin de Tomcat (sqljdbc_auth.dll proporcionado con el controlador)

MSDN> Conexión a SQL Server con el controlador JDBC> Creación de la URL de conexión

mirar

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

¿Cuál es el formato de URL utilizado por jTDS?

El formato de URL para jTDS es:

 jdbc:jtds:://[:][/][;=[;...]] 

… dominio Especifica el dominio de Windows para autenticarse. Si está presente y se proporcionan el nombre de usuario y la contraseña, jTDS usa la autenticación de Windows (NTLM) en lugar de la autenticación habitual de SQL Server (es decir, el usuario y la contraseña son el usuario y la contraseña del dominio) ) Esto permite que los clientes que no son de Windows inicien sesión en los servidores que solo están configurados para aceptar la autenticación de Windows.

Si el parámetro de dominio está presente pero no se proporcionan ningún nombre de usuario y contraseña, jTDS usa su biblioteca de inicio de sesión único nativo e inicia sesión con las credenciales de usuario de Windows registradas (para que esto funcione, obviamente, debería estar en Windows, conectado un dominio, y también tiene instalada la biblioteca de SSO, consulte README.SSO en la distribución sobre cómo hacerlo).

Esto realmente funciona para mí:

Según el archivo README.SSO que viene con la distribución jtdsd:

Para que Single Sign On funcione, jTDS debe poder cargar la biblioteca ntlmauth.dll nativa ntlmauth.dll . Coloque esta DLL en cualquier lugar de la ruta del sistema (definida por la PATH sistema PATH ) y ya está todo listo.

Lo puse en mi carpeta jre / bin

Configuré un puerto dedicado a la instancia de servidor sql (2302) para aliviar la necesidad de un nombre de instancia, simplemente algo que hago. lportal es el nombre de mi base de datos.

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

A menos que tenga una razón realmente convincente para no hacerlo, le sugiero que abandone el controlador MS JDBC.

En su lugar, use el controlador jtds jdbc . Lea el archivo README.SSO en la distribución de jtds sobre cómo configurar el inicio de sesión único (autenticación nativa) y dónde colocar el archivo DLL nativo para asegurarse de que pueda ser cargado por la JVM.

Estaba teniendo problemas para conectarme a MS SQL 2005 con la Autenticación de Windows. Pude resolver el problema con la ayuda de este y otros foros. Aquí esta lo que hice:

  1. Instale el controlador JTDS
  2. No use la propiedad “domain =” en la cadena jdbc: jtds :: // [:] [/] [; = [; …]]
  3. Instale ntlmauth.dll en el directorio c: \ windows \ system32 (no era necesario registrar el dll) en la máquina del servidor web.
  4. Cambiar la identidad de inicio de sesión para el servicio Apache Tomcat a un dominio Usuario con acceso al servidor de base de datos SQL (no era necesario que el usuario tuviera acceso al dbo.master).

Mi entorno: Windows XP clinet hosting Apache Tomcat 6 con MS SQL 2005 back-end en Windows 2003