Tedious: Problema de autenticación de Windows para SQL 2014

Creado en 13 feb. 2015  ·  28Comentarios  ·  Fuente: tediousjs/tedious

Nuevo a tedioso y solo tratando de resolver esto para obtener una conexión de autenticación de Windows a SQL Server 2014-

Versión del paquete tedioso: 1.9.0
versión de nodo 12

// configuración de configuración
var configuración = {
nombre de usuario: "Usuario",
contraseña: "MiPase",
servidor: "MiServidor",
dominio: "MiDominio",
opciones: {
base de datos: "miDB"
},
depurar: {
paquete: cierto,
datos: verdadero,
carga útil: cierto,
ficha: cierto,
registro: verdadero
}
};

He verificado que puedo conectarme a mi puerto 1433 y, para probar, este es un servidor SQL que se ejecuta localmente.

Rastreo de pila:
D:\Desarrollo\Nodo\node-sql\index.js:25
tirar error;
^
Error de conexión: error de inicio de sesión.
El inicio de sesión es de un dominio que no es de confianza y no se puede usar con
Autenticación de Windows.
en el analizador.
(D:\Desarrollo\Nodo\node-sql\node_modules\tedious\lib\connection.js:447:37)
en Parser.emit (eventos.js:107:17)
en Parser.nextToken
(D:\Desarrollo\Node\node-sql\node_modules\tedious\lib\token\token-stream-parser.js:91:18)
en Parser.addBuffer
(D:\Desarrollo\Node\node-sql\node_modules\tedious\lib\token\token-stream-parser.js:68:17)
en Connection.sendDataToTokenStreamParser
(D:\Desarrollo\Nodo\node-sql\node_modules\tedious\lib\connection.js:879:35)
en Connection.STATE.SENT_NTLM_RESPONSE.events.data
(D:\Desarrollo\Nodo\node-sql\node_modules\tedious\lib\connection.js:226:23)
en Connection.dispatchEvent
(D:\Desarrollo\Nodo\node-sql\node_modules\tedious\lib\connection.js:742:59)
en MensajeIO.
(D:\Desarrollo\Nodo\node-sql\node_modules\tedious\lib\connection.js:670:22)
en MessageIO.emit (eventos.js:107:17)
en MessageIO.eventData
(D:\Desarrollo\Node\node-sql\node_modules\tedious\lib\message-io.js:56:12)

Se agradece cualquier empujón en la dirección correcta.

feature-request

Comentario más útil

@arthurschreiber @arobson ¡Dios mío, finalmente funciona! Muchas gracias chicos por su oportuno apoyo!!! Así que aquí está mi configuración final:

var config = {
    "userName": "user.name",
    "password": "password",
    "server": "servername",
    "domain": "DOMAIN_NAME_CAPITALIZED_AND_NOT_FQDM",
    "options": {
        "encrypt": false
    }
};

Estoy usando SQL Server 2008 R2 en una máquina virtual. El script está en el mismo servidor que aloja la base de datos.

Sería genial si pudieras agregar esto a una documentación en alguna parte.

Todos 28 comentarios

Por lo que puedo decir, las correcciones que hice PR aún no se han convertido en un lanzamiento. El mensaje de error que ve se alinea con lo que obtuvimos al intentar conectarnos a nuestros servidores SQL en un AD con ciertas restricciones de seguridad. Mi primer paso para agregar compatibilidad con NTLM no tuvo en cuenta esto, pero el comportamiento recién fusionado debería hacerlo. ¿Ha intentado que NPM instale esta biblioteca desde la rama maestra?

Así que obtuve lo último de la rama maestra y lo compilé localmente ya que npm en realidad omitió la carpeta lib, pero aún así no me gustó. Compilé esto con Coffee 1.9, que compiló de manera un poco diferente a Coffee 1.7, que es lo que está en npm.

Continuaré con esto en un momento, ¿alguna otra idea?

Pude hacer que esto funcionara con SQL Auth en Azure, pero aún no pude hacerlo funcionar con Windows Auth. Probé con la fuente actual que tiene cambios que no están en el npm, pero eso todavía no funcionaba, pero podría ser porque de mi falta de experiencia en la creación de scripts de café -

usando café versión 1.9 - ejecutó lo siguiente contra la fuente.
coffee --copile --output lib src y luego coloque las bibliotecas compiladas en su lugar en node_modules/tedious pero aún no funciona -

¿Puedes probar la versión 1.10.0?

Estoy experimentando el mismo problema con la última versión de tedious. He proporcionado el nombre de la estación de trabajo, pero aún obtengo el mismo "El inicio de sesión es de un dominio que no es de confianza y no se puede usar con la autenticación de Windows".

¿Hay algo que me falta con respecto a la configuración del dominio que me permitirá autenticar a un usuario del dominio de Windows desde una computadora que no forma parte del dominio? Estoy tratando de autenticar un usuario de dominio desde una instancia de Ubuntu 14.04 a SQL Server 2014 en Windows 2012 R2 Server.

@arobson En otro comentario, usted dijo que estaba experimentando el mismo problema y que, después de fusionar su PR, pudo autenticarse con éxito en producción. ¿Había algo que tuvieras que hacer fuera de lo tedioso?

¿Sigue encontrando este problema con los últimos lanzamientos tediosos?

@arthurschreiber Acabo de intentarlo y sigo experimentando el mensaje "El inicio de sesión es de un dominio que no es de confianza y no se puede usar con la autenticación de Windows". mensaje de error.

Parecía que @arobson tenía una solución, pero no la encuentro por ninguna parte.

Cualquier ayuda sobre las opciones que debería usar para conectarme a nuestra instancia de SQL 2014 con credenciales de dominio sería muy apreciada.

Tener este problema también. Puedo iniciar sesión con un usuario de SQL, pero no con la autorización de Windows. Desafortunadamente, mi equipo de db no permitirá un usuario de SQL permanente, por lo que necesita usar la autenticación de Windows. Estas son mis opciones de configuración:

var configuración = {
servidor: 'NOMBRE DEL SERVIDOR',
nombre de usuario: usuario',
contraseña: 'contraseña',
dominio: 'FQDN.DOMINIO.COM'
,opciones: {
depurar: {
paquete: cierto,
datos: verdadero,
carga útil: cierto,
ficha: falso,
registro: verdadero
},
base de datos: 'DB_NAME'
}
};

Este es el error que estoy recibiendo:

{ [Error de conexión: error de inicio de sesión. El inicio de sesión es de un dominio que no es de confianza y no se puede usar con la autenticación de Windows.]
nombre: 'Error de conexión',
mensaje: 'Inicio de sesión fallido. El inicio de sesión es de un dominio que no es de confianza y no se puede usar con la autenticación de Windows.',
código: 'ELOGIN' }
{ [RequestError: las solicitudes solo se pueden realizar en el estado LoggedIn, no en el estado SentNTLMResponse]
nombre: 'SolicitudError',
mensaje: 'Las solicitudes solo se pueden realizar en el estado LoggedIn, no en el estado SentNTLMResponse',
código: 'EINVALIDSTATE' }
{ [Error de conexión: error de inicio de sesión. El inicio de sesión es de un dominio que no es de confianza y no se puede usar con la autenticación de Windows.]
nombre: 'Error de conexión',
mensaje: 'Inicio de sesión fallido. El inicio de sesión es de un dominio que no es de confianza y no se puede usar con la autenticación de Windows.',
código: 'ELOGIN' }
{ [RequestError: las solicitudes solo se pueden realizar en el estado LoggedIn, no en el estado SentNTLMResponse]
nombre: 'SolicitudError',
mensaje: 'Las solicitudes solo se pueden realizar en el estado LoggedIn, no en el estado SentNTLMResponse',
código: 'EINVALIDSTATE' }

¿Hay algún problema con mi configuración?

No, no creo que sea un problema con tu configuración. Tendré que instalar SQL Server 2014 en mi máquina y ver qué está causando esto. Tal vez algo cambió en el esquema de autenticación y aún no lo admitimos.

Veré lo que puedo hacer.

@jgornick @stefanTHD : aquí hay algunas peculiaridades que he notado en nuestros entornos. NTLM ha estado trabajando para nosotros desde cajas de Linux fuera de AD durante 2012 y 2014, incluso con políticas muy estrictas que impiden funciones NTLM menos seguras.

1: no use el FQDN en la propiedad del dominio. Si es "empresa.com", utilice "EMPRESA"
2 - La capitalización parece importar también. Hemos tenido éxito con los nombres de dominio en mayúsculas
3 - _No_ use un nombre de usuario calificado (es decir, "[email protected]") solo "usuario.nombre"

para su información

La documentación de NTLM es antigua y no la proporciona Microsoft. Tuve que hurgar mucho en busca de ciertos indicadores binarios porque el documento que encontré no explicaba para qué servían algunos de ellos. Mi primer PR solo funcionó para NTLM contra SQL Server en estaciones de trabajo para nosotros porque nuestro AD tenía una política que deshabilitaba algunas de las características de NTLM.

Próximos pasos

Si los 3 consejos anteriores no funcionan, sería de gran ayuda si pudiera encontrar las entradas de inicio de sesión fallidas a través de Even Viewer / SQL Logs. El "dominio no confiable" es en realidad un error genérico que proporciona MSFT para que a un atacante le resulte más difícil saber por qué se rechazó su solicitud. Incluso puede buscar en Google ese error y encontrar otras bibliotecas de OSS que intenten admitir NTLM quejándose de que ese error es engañoso.

Me gustaría ayudarlo a resolver esto, Tedious es genial y las contribuciones recientes de @arthurschreiber lo han hecho aún mejor.

La autenticación NTLM se describe en la documentación MS-NLMP de Microsoft. Veré si puedo encontrar algo de tiempo para leerlo y compararlo con lo que se implementó hasta ahora en tedioso.

@arthurschreiber @arobson ¡Dios mío, finalmente funciona! Muchas gracias chicos por su oportuno apoyo!!! Así que aquí está mi configuración final:

var config = {
    "userName": "user.name",
    "password": "password",
    "server": "servername",
    "domain": "DOMAIN_NAME_CAPITALIZED_AND_NOT_FQDM",
    "options": {
        "encrypt": false
    }
};

Estoy usando SQL Server 2008 R2 en una máquina virtual. El script está en el mismo servidor que aloja la base de datos.

Sería genial si pudieras agregar esto a una documentación en alguna parte.

¡Frio! El hecho de que la autenticación NTLM no funcione con el cifrado es un error en el código, y pronto proporcionaré una solución (si puedo encontrar algo de tiempo para eso).

De hecho, ¡poner en mayúscula el dominio resuelve el problema!

https://github.com/pekim/tedious/pull/367 Es una solución para la autenticación NTLM que no funciona con cifrado.

¿Esta discusión se refiere al uso de la autenticación de Windows desde Linux? Por ejemplo RedHat?

@pisees Sí, me estoy conectando desde Fedora 22 al servidor SQL usando Windows Auth con cifrado con la corrección.

Tuve exactamente el mismo problema con @NamTThai , y ahora está funcionando después de leer esto y cambiar el dominio como se describe. (Todo en mayúsculas y solo la primera parte del dominio, omita la parte después del punto)

Estoy con Microsoft y busco ayudar con algunas contribuciones a tedioso.
¿Algo pendiente con este problema o está todo resuelto?

@tvrprasad Creo que hay una solución, no estoy seguro de que todos entendamos por qué funciona la solución. :)

@benzou ¿La solución alternativa es la descrita por @arobson en este hilo el 15/8?
¿Qué impide que se cierre este problema? Tal vez pueda ayudar a cerrar esto... de alguna manera :)

@tvrprasad Creo que necesitamos mejor documentación sobre esto.

Tenemos nuestra documentación almacenada en la rama gh-pages de este repositorio, pero como se mantiene fuera del código base, se desactualiza con bastante facilidad y el mantenimiento es un lastre. 😞

@tvrprasad : los problemas que se han informado como tediosos y en nuestro repositorio desde que agregué la compatibilidad con NTLM se han debido constantemente a que el dominio se especifica en minúsculas y/o como FQDN. Una solución para esto podría ser hacer un seguimiento con un PR que:

  1. convierte el dominio a mayúsculas (debería haber hecho eso para empezar)
  2. divide el dominio en . y solo usa el primer segmento

Ciertamente no soy un experto en NTLM, pero somos fanáticos de MSSQL y Node y realmente lo necesitábamos, así que me sumergí en la documentación de NTLM y otras implementaciones para implementarlo con la ayuda de nuestro equipo de operaciones para probarlo con varios SQL Server. versiones para que podamos estar relativamente seguros de la implementación. Cualquier análisis y mejora que pueda proporcionar sobre lo que hay allí sería increíble. No se sabe lo que me pude haber perdido ya que la documentación que seguí era de 2007 😄

Avíseme si hay preguntas específicas que pueda responder sobre el bit NTLM.

@arobson - FDQN parece funcionar para mí, aunque solo en mayúsculas. Creé un problema separado para convertirlo a mayúsculas para facilitar el seguimiento: https://github.com/tediousjs/tedious/issues/414. Armaré un PR para eso. Intentaré saber por qué las minúsculas no funcionan.

@arthurschreiber : intentaré ayudar a actualizar la documentación una vez que pueda obtener al menos un PR sobre este tema para tener una mejor comprensión. Si hay otras áreas donde falta documentación, hágamelo saber. Intentaré ayudar.

Abrí un par de otros problemas relacionados con la autenticación. Apreciaría pensamientos sobre eso.
https://github.com/tediousjs/tedious/issues/415
https://github.com/tediousjs/tedious/issues/416

Amigos: tengo un PR para la implementación de la autenticación integrada de Windows: https://github.com/tediousjs/tedious/pull/497. Esto no requiere nombre de usuario o contraseña y utiliza las credenciales de inicio de sesión del usuario.

Si puedes probarlo y dar tu opinión, te lo agradeceré mucho. Tengo muchas ganas de trabajar con la comunidad para conseguir la función.

hola si alguien me puede ayudar he intentado conectarme en la base de datos de MS SQL Server 12 usé mssql node 4.1, ya probé muchas cosas, pero no me conecto

mi conexión se ha conformado a continuación:

x

Lo intento:

const stringConnect = 'Servidor = ADMIN-CCE \ admin: 1433; Base de datos = GRD; ID de usuario = admin-cce \ admin; '
BASE DE DATOS.conectar (stringConnect)
.entonces (con => {
global.conn = conn;
console.log ('conectado al GRD');
})
.catch (err => consola.error ( connection error mssql $ {stringConnect} - $ {err} ));

módulo.exportaciones = BASE DE DATOS;

* ERROR DE DEVOLUCIÓN **
error de conexión mssql Servidor = ADMIN-CCE \ admin: 1433; Base de datos = GRD; ID de usuario = admin-cce \ admin; - ConnectionError: Puerto para administrador: 1433 no encontrado en ADMIN-CCE

Ya probé otras formas, ¡también sin éxito! Mirar:

var configuración = {
servidor: "ADMIN-CCE\MSSQLSERVER",
base de datos: "GRD",
puerto: 1433,
usuario: 'admin-cce\admin',
depuración: cierto,
opciones: {
cifrar: falso,
conexión de confianza: verdadero
}
};

BASE DE DATOS.conectar (config, función (err) {
si (err)
{
consola.log (err)
}
demás
consola.log ('conectado .....')
});

módulo.exportaciones = BASE DE DATOS;

* ERROR DE DEVOLUCIONES *
mensaje:
'Error al conectarse a ADMIN-CCE: indefinido - No se pudo conectar (secuencia)',
código: 'ESOCKET'},
nombre: 'Error de conexión'}

Hola @allexon , tedious aún no es compatible con la autenticación integrada de Windows, los detalles están en https://github.com/tediousjs/tedious/issues/660.

¿Tedious ya admite la autenticación de Windows del servidor SQL?

¿Fue útil esta página
0 / 5 - 0 calificaciones