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

StackOverflow https://stackoverflow.com/questions/167464

Pregunta

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 tiene el siguiente aspecto:

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 manera de recuperar las credenciales de la autenticación de Windows del usuario y usar la autenticación que para SQL Server?

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

¿Fue útil?

Solución

No creo que se puedan enviar las credenciales de 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, entonces puede usar el controlador JDBC de Microsoft. Simplemente cree su URL de JDBC de esta manera:

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

Y copie la DLL apropiada en el directorio bin de Tomcat (sqljdbc_auth.dll provisto con el controlador)

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

Otros consejos

mira

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. 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 proporcionados son el usuario y la contraseña del dominio). Esto permite que los clientes que no son de Windows inicien sesión en 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 el nombre de usuario y la contraseña, jTDS usa su biblioteca nativa de inicio de sesión único e inicia sesión con las credenciales del usuario registrado de Windows (para que esto funcione, obviamente, uno debería estar en Windows , inicie sesión en un dominio y también tenga instalada la biblioteca SSO; consulte a README.SSO en la distribución sobre cómo hacer esto).

Esto realmente funciona para mí:

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

Para que funcione el inicio de sesión único, jTDS debe poder cargar la biblioteca SPPI nativa ntlmauth.dll . Coloque esta DLL en cualquier lugar de la ruta del sistema (definida por la variable de sistema PATH ) y estará listo.

Lo puse en mi carpeta jre / bin

Configuré un puerto dedicado a la instancia del servidor SQL (2302) para aliviar la necesidad de un nombre de instancia, 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 alguna razón realmente convincente para no hacerlo, le sugiero que abandone el controlador MS JDBC.

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

Estaba teniendo problemas 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. Instale el controlador JTDS
  2. No utilice el " dominio = " propiedad en la cadena jdbc: jtds :: // [:] [/] [; = [; ...]]
  3. Instale ntlmauth.dll en el directorio c: \ windows \ system32 (no fue necesario registrar el archivo DLL) en la máquina del servidor web.
  4. Cambie la identidad de inicio de sesión para el servicio Apache Tomcat a un usuario de dominio 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 que aloja Apache Tomcat 6 con MS SQL 2005 backend en Windows 2003

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top