我正在研究我们需要处理的新应用程序的堆栈。它的一部分功能是能够连接到 SQL Server 数据库(目前为 2012 和更新版本)。
我有一个 Java MVP 可以很好地处理我们需要的几乎所有东西:它使用 JTDS 驱动程序连接到我认为使用 NTLM 身份验证的 SQL Server。由于我们的 Web 堆栈在 NodeJS 中,我也在考虑在 Node+Electron 中做同样的事情,但遇到了问题,并意识到我不明白身份验证机制的各个部分是如何组合在一起的。
我想在这里总结一些发现,希望能帮助别人,也能帮助自己。
我从MSDN 文档tedious
中推荐的开始,由于登录问题无法连接应用程序:登录失败并出现错误,没有额外的错误信息。那时我读到它不能完全处理 Windows 身份验证:需要提供用户名和密码,目前正在处理中。提供仍然会导致相同的错误。然后我发现处理 NTLM 身份验证,这对我也不起作用:ELOGIN
tedious
tedious-ntlm
不受信任的域错误
由于 Java 的 JTDS NTLM 身份验证机制运行良好,我认为它tedious-ntlm
做了一些不同的事情。还得抱怨一个不推荐使用的功能,这很容易修复,但仍然告诉我该模块没有得到很好的维护tedious-ntlm
。node 6 and 7
crypto
我还尝试了其他驱动程序和 ORM:mssql
, edge
, sequelize
, seriate
, node-sqlserver
,node-sqlserver-unofficial
没有任何运气连接到数据库。ORM 的喜欢sequelize
和seriate
使用tedious
的驱动程序。Mssql
似乎也可以使用tedious
-它安装tedious
在lib/
并且错误来自tedious
.
最后,最后的困惑来自于阅读 SSPI、Windows 身份验证和 NTLM 到底是什么以及何时使用它们。很好的阅读在这里,但简而言之:SSPI是 Windows 操作系统用来允许应用程序/用户使用 Kerberos、NTLM 或其他协议进行身份验证的接口。NTLM 似乎用于本地连接,而 Kerberos 将用于远程连接,但这可能过于简单化了。 这篇文章还详细介绍了 SSPI。
现在这里有问题:
当我想使用以下条件连接到 SQL Server 时:
- 从
localhost
到localhost
(桌面应用程序) - 不提供用户名/密码,使用当前用户
- 使用 Windows 身份验证,受信任的连接
- 不允许在 SQL Server 上创建新用户以使用 SQL Server 身份验证
...我将使用 NTLM 协议还是 Kerberos?
- 从
tedious
Node JS 的驱动程序或任何其他驱动程序可以做到这一点吗?我上面所说的不正确是什么让我失望?
PS 我写了一篇更长的文章来表明我已经做了很多研究,但我显然遗漏了一些东西,并且需要一些超出我已经阅读的内容的帮助。希望这篇文章也能帮助一些刚开始这样做的人。我也很乐意用勘误表更新这篇文章,以使其对人们有用。