我正在为我们需要处理的新应用程序研究堆栈。它的一部分功能是能够连接到SQL Server数据库(2012年和更新版本)。
我有一个Java MVP可以很好地处理我们需要的几乎所有东西:它使用JTDS驱动程序连接到SQL Server我认为使用NTLM身份验证。由于我们的Web堆栈在NodeJS中,我也在查看在Node + Electron中做同样的事情并遇到问题并意识到我不明白认证机制的各个部分是如何组合在一起的。
我想总结一下这里的一些发现,希望能帮助别人并自己得到一些帮助。
我从tedious
开始,因为recommended in MSDN's docs,由于登录问题导致应用无法连接:登录失败并显示ELOGIN
错误而没有额外的错误信息。就在那时我读到tedious
没有完全处理Windows身份验证:one needs to provide username and password,目前正在进行中。提供仍然导致相同的错误。然后我发现tedious-ntlm
处理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究竟是什么以及何时使用它们。好的阅读是here,但简而言之:SSPI是Windows操作系统用来允许应用程序/用户使用Kerberos,NTLM或其他协议进行身份验证的接口。 NTLM似乎用于本地连接,而Kerberos将用于远程连接,但这可能过于简单化了。 This post也详细介绍了SSPI。
现在有以下问题:
当我想在以下条件下连接到SQL Server时:
localhost
到localhost
(桌面应用程序)...我将使用NTLM协议还是Kerberos?
Node tedious
或其他任何驱动程序可以执行此操作吗?
我上面所说的是不正确的,这让我失望了?
P.S。我写了一篇较长的文章,表明我做了很多研究,但我显然缺少一些东西,除了我已经阅读过的内容之外还需要一些帮助。希望这篇文章也能帮助一些刚刚开始这样做的人。我也很乐意用一个勘误表来更新这篇文章,以使其对人们有用。