SQL Server 2005:SQL Server身份验证有多安全?

8
如果您使用 SQL Server Authentication (2005),登录详细信息是否以明文形式通过网络发送?

谢谢大家,我现在非常确信登录凭据已通过 SSL 以哈希方式传递。但是,您发现的微软文档存在一定程度的歧义甚至矛盾。我已在您的答案上评论并进行了点赞。 - Noel Kennedy
6个回答

5

就像你想要的那样安全...

你可以相当容易地配置SSL,如果你没有受信任的证书,如果你强制加密,SQL Server可以为你创建/发行自己的自签名证书供您使用...参考这篇文章

客户端应用程序连接到SQL Server时传输的凭据(在登录数据包中)始终是加密的。如果有受信任的认证机构证书,则SQL Server将使用该证书。如果未安装受信任的证书,则SQL Server将在启动实例时生成自签名证书,并使用自签名证书加密凭据。这个自签名证书有助于提高安全性,但它不能防止服务器身份欺骗。如果使用自签名证书,并且将ForceEncryption选项的值设置为Yes,则在SQL Server和客户端应用程序之间通过网络传输的所有数据都将使用自签名证书进行加密。


同意,但是所有这些加密工作都消除了使用SQL身份验证的性能优势。但是,并不是每个人都可以选择使用Windows身份验证。 - DOK
1
这是一个经典的权衡,性能与安全性之间的抉择,不是吗? - curtisk
1
我仍不完全确定 SQL 凭据始终以安全方式发送,但我认为您的链接与微软提供的信息一样清晰。“客户端应用连接到 SQL Server 时传输的凭据(在登录数据包中)始终是加密的”,但考虑到这个短语出现在有关如何设置 SQL 使用 SSL 的部分的中间位置,它仍然有些模棱两可(或者说我可能过于谨慎了!)。 - Noel Kennedy
1
@NoelKennedy,你谨慎是正确的!TDS(客户端和SQL Server之间使用的协议)确实支持完全未加密的登录 - 请参见MS-TDS 2.2.6.5 PRELOGIN中的Encryption标题。我猜未加密的登录很少见。但是,它们是可能的。在测试驱动程序级别代码与SQL Server 2016进行测试时,我已经成功地使用了它们。 - Ben Gribaudo

4
无论登录凭据是否加密取决于客户端和服务器的加密能力/配置。在协议级别上,允许完全未加密的SQL登录,尽管我猜测这些很少见,因为我怀疑大多数现代数据库驱动程序不支持它们。
细节
客户端使用Tabular Data Stream(TDS)协议与Microsoft SQL Server通信。
客户端打开TDS连接到服务器后不久,它会通知服务器其加密能力。服务器将此公告与其自身的配置/能力进行比较,以确定连接的加密状态。
简而言之,加密状态如下确定:
  • 如果客户端或服务器宣布不支持加密,而另一方不需要加密,则整个连接(包括登录)将不会被加密
  • 如果客户端和服务器都宣布支持加密但不要求,仅第一个TDS数据包的登录请求将被加密。连接的其余部分,包括任何其他的登录请求数据包,将不会被加密。一个设计良好的数据库驱动程序将确保SQL身份验证密码放置在第一个登录数据包中,但这不是协议级别所必需的。
  • 如果客户端或服务器中有任何一方宣布需要加密,整个连接将被加密(除了少量的预备数据),除非另一方不支持加密。在这种情况下,连接将被终止。

确保登录请求始终被加密的唯一方法是在客户端或服务器上设置“要求加密”选项。没有选项可以完全禁止未加密的连接而不需要完全加密。

无论登录或连接是否加密,SQL身份验证密码始终被混淆,但混淆很容易被还原。

进一步阅读:


2
证书以明文形式发送。
你可能会找到很多相关资料,但是这里有一个链接:点击查看
“保护Web服务器和数据库服务器之间的通道,因为证书以未加密的格式传递。例如,使用SSL或IPSec。”

有趣的是,这是我发现的帖子,导致我发布了我的问题。它似乎直接与另一个MSDN帖子相矛盾:http://msdn.microsoft.com/en-us/library/ms189067.aspx - Noel Kennedy
所以,要么asp.net最佳实践指南是错误的,要么加密SQL Server 2005连接MSDN文章是错误的... - Noel Kennedy

2
这里是一份有关SQL 2005的安全最佳实践链接。该文档部分说明如下:
在“Windows身份验证模式”下,特定的Windows用户和组帐户可信地登录到SQL Server。在此过程中使用Windows凭据,即NTLM或Kerberos凭据。Windows帐户使用一系列加密消息对SQL Server进行身份验证;在认证过程中不会通过网络传递密码。当使用SQL登录名时,SQL登录密码会通过网络进行身份验证,因此SQL登录名的安全性不如Windows登录名。

1
Noel在询问SQL Server身份验证,而不是Windows身份验证。 - JonoW
非常正确,谢谢。已修复。另外,人们仍然使用混合模式吗? :) - JP Alioto
当客户端是“NETWORK SERVICE”或其他低特权帐户时,使用Windows身份验证会很困难... - Aaronaught
这份文档也存在歧义。'当使用SQL登录时,SQL登录密码是通过网络进行身份验证传递的',但是是明文传输还是通过安全通信协议传输?此外,'在SQL Server 2005中,SQL登录的安全性得到了改进...这些改进包括...在SQL密码通过网络传输时提供更好的加密保护'。 - Noel Kennedy
SQL Server 2005可以使用加密通道的两个原因:对于SQL登录加密凭据,它可以实现! - Noel Kennedy
1
使用SSL的另一个原因是在 SQL 登录期间加密凭据,特别是在通过网络传输密码时。然而,这份文档暗示所有这些都是可选项,并非默认设置。 - Noel Kennedy

1
阅读这个帖子让我比之前更加困惑了!无论如何,我用Wireshark进行了一些测试,无论是有加密连接还是没有加密连接,我从未能够看到我的密码(以及我的用户名)。没有加密的情况下非常明显的是实际的查询内容。
也许是因为我对Wireshark的知识不足,无法检索登录凭据,但既然我能看到其他所有内容,我相当确定我正在查看正确的位置,而密码始终是隐藏的。

TDS(客户端与SQL Server通信使用的协议)具有完全加密和完全未加密之间的加密状态,其中仅登录请求的第一个数据包被加密。当支持但不需要加密时,使用此状态。我想知道您进行的测试是否使用了此加密状态 - 这可以解释为什么您无法看到用户名和密码。 - Ben Gribaudo
哇,那是很久以前的事了...我不记得当时的配置是什么,但我怀疑我没有改变默认设置。唯一能想到的就是将证书附加到实例上。 - Slime recipe
我怀疑您无法识别密码,因为它是根据用于客户端到服务器通信的Tabular Data Stream Protocol(MS-TDS)进行编码的。 TDS的登录过程及其编码在此处详细说明:https://msdn.microsoft.com/en-us/library/dd304019.aspx - chrobs

-1
除了密码以明文形式发送之外,还有可能替换密码的哈希值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接