这是登录SQL Server的更安全的方法:使用Windows用户或SQL Server数据库用户



传统的智慧说,使用Windows用户登录到SQL Server比使用SQL Server用户登录更安全。但是身份验证不是几乎相同吗?

使用数据库用户登录到SQL Server时,使用密码加密创建登录数据包。将证书附加到数据包并发送到数据库。确认证书后,将哈希密码与数据库中存储的哈希密码匹配。如果它们匹配,您将登录。

使用Windows用户登录到SQL Server时,MSGINA会创建一个登录数据包,但是我不确定是否或如何加密。附有证书,数据包发送到LSA。当证书进行身份验证时,如何验证凭证?

要使这个问题公平,假设证书服务是相同的,以及创建密码哈希的方法。在这种情况下,这两种方法似乎同样容易受到拦截登录数据包的中型攻击类型。

取决于您如何定义"安全"。安全性不仅仅是身份验证机制的加密细节。例如:

  • 使用SQL Server Auth,帐户/密码在DBA的控制之下。使用Windows auth(到一个域),他们在域名的控制下。

  • 安全策略(例如,密码强度,密码衰老,密码长度,允许的登录位置/时间,禁用帐户)很容易管理(例如,通过组策略),并在使用域身份验证时进行了审核。

  • 域身份验证可以使用多种因素(例如安全令牌),而SQL Server Authentication(AFAIK)不能使用。

AD身份验证中的MITM vulns(通常更广泛的Kerberos)将是大新闻。

Windows登录非常安全 - 假设Active Directory,您正在发送hash以验证您,以验证您返回随后用于登录SQLServer的机票。

但是,这仅适用于AD,本地用户使用的NTLM非常旧,并且可以按照当今的标准很容易破解。

Windows登录可用于保护几乎所有内容,包括SQLServer(例如SQLServer)运行的用户服务,因此,如果它不是最安全的,那么您比用户登录到DB。

问题是您如何存储密码和登录信息。

使用Windows-login时,您可以通过Active Directory Server或Windows Machine依靠身份验证,而当使用SQL Server凭据登录时,您需要将密码放置在某个位置的表单中,则需要加密它是为了将其添加到连接字符串中。

如果应用程序在服务器上,这可能会很好,但是当它是直接访问服务器的富客户时,它会更复杂。如果您在公司中有这样的方案,最好让Active Directory处理身份验证。

通常,当您到处使用相同的Active Directory时,也更容易管理。