1

我正在研究我们需要处理的新应用程序的堆栈。它的一部分功能是能够连接到 SQL Server 数据库(目前为 2012 和更新版本)。

我有一个 Java MVP 可以很好地处理我们需要的几乎所有东西:它使用 JTDS 驱动程序连接到我认为使用 NTLM 身份验证的 SQL Server。由于我们的 Web 堆栈在 NodeJS 中,我也在考虑在 Node+Electron 中做同样的事情,但遇到了问题,并意识到我不明白身份验证机制的各个部分是如何组合在一起的。

我想在这里总结一些发现,希望能帮助别人,也能帮助自己。

我从MSDN 文档tedious中推荐的开始,由于登录问题无法连接应用程序:登录失败并出现错误,没有额外的错误信息。那时我读到它不能完全处理 Windows 身份验证:需要提供用户名和密码,目前正在处理中。提供仍然会导致相同的错误。然后我发现处理 NTLM 身份验证,这对我也不起作用:ELOGINtedioustedious-ntlm

不受信任的域错误

由于 Java 的 JTDS NTLM 身份验证机制运行良好,我认为它tedious-ntlm做了一些不同的事情。还得抱怨一个不推荐使用的功能,这很容易修复,但仍然告诉我该模块没有得到很好的维护tedious-ntlmnode 6 and 7crypto

我还尝试了其他驱动程序和 ORM:mssql, edge, sequelize, seriate, node-sqlserver,node-sqlserver-unofficial没有任何运气连接到数据库。ORM 的喜欢sequelizeseriate使用tedious的驱动程序。Mssql似乎也可以使用tedious-它安装tediouslib/并且错误来自tedious.

最后,最后的困惑来自于阅读 SSPI、Windows 身份验证和 NTLM 到底是什么以及何时使用它们。很好的阅读在这里,但简而言之:SSPI是 Windows 操作系统用来允许应用程序/用户使用 Kerberos、NTLM 或其他协议进行身份验证的接口。NTLM 似乎用于本地连接,而 Kerberos 将用于远程连接,但这可能过于简单化了。 这篇文章还详细介绍了 SSPI。

现在这里有问题:

  1. 当我想使用以下条件连接到 SQL Server 时:

    • localhostlocalhost(桌面应用程序)
    • 不提供用户名/密码,使用当前用户
    • 使用 Windows 身份验证,受信任的连接
    • 不允许在 SQL Server 上创建新用户以使用 SQL Server 身份验证

    ...我将使用 NTLM 协议还是 Kerberos?

  2. tediousNode JS 的驱动程序或任何其他驱动程序可以做到这一点吗?

  3. 我上面所说的不正确是什么让我失望?

PS 我写了一篇更长的文章来表明我已经做了很多研究,但我显然遗漏了一些东西,并且需要一些超出我已经阅读的内容的帮助。希望这篇文章也能帮助一些刚开始这样做的人。我也很乐意用勘误表更新这篇文章,以使其对人们有用。

4

0 回答 0