传统观点认为,使用Windows用户登录SQL Server比使用SQL Server用户登录更安全。但是认证几乎不相同吗?
使用数据库用户登录SQL Server时,会创建一个加密密码的登录数据包。证书附加到数据包并发送到数据库。证书通过身份验证后,哈希密码将与存储在数据库中的哈希密码相匹配。如果匹配,则表示您已登录。
当您使用Windows用户登录SQL服务器时,MSGINA会创建一个登录数据包,但我不确定它是否或如何加密。附加证书并将数据包发送到LSA。证书通过身份验证后,如何验证凭据?
为了使这个问题公平,假设证书服务是相同的,以及创建密码哈希的方法。在这种情况下,这两种方法似乎同样容易受到拦截登录数据包的中间人攻击。
答案 0 :(得分:1)
Windows登录非常安全 - 假设有Active Directory,您正在向AD发送一个哈希来验证您,这会返回随后用于登录SQLServer的票证。
但是,这仅适用于AD,本地用户使用的NTLM非常陈旧,并且很容易被今天的标准破解。
Windows登录用于保护几乎所有内容,包括像SQLServer一样运行的用户服务,因此如果它不是最安全的,那么您会比用户登录到数据库时更担心。
答案 1 :(得分:1)
问题是如何存储密码和登录信息。
当您使用Windows登录时,您可以依靠您的活动目录服务器或只是Windows计算机进行身份验证,而使用SQL Server凭据登录时,您需要在您需要加密的表单中的某个位置使用密码它是为了将它添加到连接字符串。
如果应用程序在服务器上,这可能没问题,但是当它是直接访问服务器的富客户端时会更复杂。如果您在公司中有这样的场景,最好让活动目录处理身份验证。
通常,当您在任何地方使用相同的活动目录时,管理也更容易。
答案 2 :(得分:1)
取决于您如何定义“安全”。安全性远远超过身份验证机制的加密细节。例如:
使用SQL Server身份验证,帐户/密码受DBA控制。使用Windows身份验证(对域),他们受域管理员控制。
安全策略(例如密码强度,密码时效,密码长度,允许的登录位置/时间,禁用帐户)可以轻松管理(例如,通过组策略),并在使用域身份验证时进行审核。
域身份验证可以使用多个因素(例如安全令牌),而SQL Server身份验证(AFAIK)则不能。
AD身份验证中的MITM漏洞(以及更广泛的Kerberos)将是一个重大新闻。