2008-10-03 15 views
52

Actualmente estoy investigando cómo hacer una conexión a una base de datos de SQL Server desde mi aplicación web Java EE utilizando 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:¿Puedo conectarme a SQL Server usando la Autenticación de Windows desde la aplicación web Java EE?

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

tengo cero problemas con la conexión a una base de datos de SQL Server de esta manera al utilizar la autenticación de SQL Server.

¿Hay alguna forma de que pueda recuperar las credenciales de la Autenticación de Windows del usuario y use 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 yo quiero transmitir esa señal fuera de SQL Server para acceso a la base de datos.

Respuesta

72

No creo que uno puede empujar las credenciales de usuario desde el navegador a la base de datos (y hace que tiene sentido? No lo creo)

Pero si desea utilizar las credenciales del usuario que ejecuta Tomcat para conectar a SQL Server, entonces puede usar el controlador JDBC de Microsoft. Sólo construir su URL JDBC como esto:

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

y copiar la DLL apropiada en el directorio bin de Tomcat (sqljdbc_auth.dll proporcionado con el conductor)

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

+3

¿Por qué no tiene sentido presionar las credenciales del usuario desde el navegador a la base de datos? Creo que la autenticación de varios saltos es EXACTAMENTE lo que el OP estaba buscando aquí. Dado que tengo 3 años de retraso en esta respuesta, me gustaría entender su razonamiento. – KyleM

5

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

En su lugar, utilice jtds jdbc driver. 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.

+0

Pregunta realmente está buscando el SSO (inicio de sesión único). – jim

+0

@jim: si tiene una autenticación basada en Kerberos en Linux, entonces puede tener SSO, pero pude encontrar que la única manera de usarla para la autenticación de MS SQL en Linux es mediante el controlador DataDirect. –

+0

¿Por qué es preferible el controlador JTDS? Entiendo que no es compatible con la agrupación de conexiones, que para mí es esencial. – megaflop

22

vistazo a

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:<server_type>://<server>[:<port>][/<database>][;<property>=<value>[;...]] 

... dominio Especifica el dominio de Windows para autenticar en Si se proporcionan nombre actual y el usuario y la contraseña, jTDS utiliza la autenticación de Windows (NTLM). en lugar de la autenticación habitual de SQL Server (es decir, el usuario y la contraseña proporcionados 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 proporciona 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, ha iniciado sesión en un dominio y también tiene instalada la biblioteca de SSO, consulte README.SSO en la distribución sobre cómo hacerlo).

+1

Información muy útil, ¡especialmente sobre el dominio! – StephMW

3

Tuve un problema con la conexión a MS SQL 2005 mediante la autenticación de Windows. Pude resolver el problema con la ayuda de este y otros foros. Esto es lo que hice:

  1. Instalar el controlador jTDS
  2. No utilice el "dominio =" propiedad en el JDBC: jtds :: // [:] [/] [; = [, .. .]] cadena
  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 alojamiento Apache Tomcat 6 con MS SQL backend 2005 en Windows 2003

6

En realidad, esto funciona para mí:

por la README.SSO que viene con la distribución jtdsd :

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

lo coloqué en mi carpeta jre/bin

he configurado un puerto dedicado la instancia de SQL Server (2302) para aliviar la necesidad de un nombre de instancia - sólo 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 
Cuestiones relacionadas