SQL Server 2008:我应该使用Windows身份验证还是SQL Server身份验证?

5

我有一个MS-Access 2007前端,将有多个用户使用它。他们都将在网络公司域上。连接到SQL Server 2008应该使用Windows身份验证还是SQL Server身份验证通过ODBC连接?

5个回答

6

Windows认证将允许更无缝的身份验证过程,单点登录!

以下文章中提到:

SQL Server认证的缺点

  • 如果用户是Windows域用户, 拥有Windows的登录名和密码, 他仍然必须提供另一个(SQL Server)登录名和 密码来连接。对于许多用户来说, 跟踪多个名称和密码是困难的。 每次连接到数据库时都需要提供SQL Server凭据可能会很烦人。
  • SQL Server认证无法使用Kerberos安全协议。
  • Windows提供了其他密码策略,这些策略不适用于SQL Server登录。

SQL Server认证的优点

  • 允许SQL Server支持旧应用程序和第三方提供的要求SQL Server认证的应用程序。
  • 允许SQL Server支持混合操作系统的环境,其中并非所有用户都通过Windows域进行身份验证。
  • 允许用户从未知或不受信任的域连接。例如,已建立客户使用分配的SQL Server登录名连接以接收其订单状态的应用程序。
  • 允许SQL Server支持基于Web的应用程序,其中用户创建自己的身份。
  • 允许软件开发人员通过使用基于已知、预设SQL Server登录名的复杂权限层次结构来分发其应用程序。

这里有一篇关于每种方法的优缺点的好文章。http://technet.microsoft.com/en-us/library/ms144284.aspx


这是我们应用程序中可切换的选项。在大型组织中,IT人员倾向于支持单点登录,而用户则喜欢它的简便性。 - DaveE
•Windows提供了额外的密码策略,这些策略对于SQL Server登录不可用。当您单击“强制密码策略”选项时,密码策略将应用于SQL Server登录。 - DForck42

2

Dustin提出了一份优缺点清单。我知道没有人想为你做出这样的决定,但基于你的标准(多个用户,都在公司域中),我想不到使用SQL Server身份验证而不是Windows身份验证的理由。它主要是为这种情况而设计的。


如果我使用Windows认证,那么不需要将每个用户都添加到用户列表中吗? - Alex Gordon
@i_am_a_girl 我相信默认的 SQL 服务器安装将允许与服务器在同一域上的任何人连接,而无需明确添加他们。 - bradenb
服务器在不同的域上。 - Alex Gordon
@i_am_a_girl 我相信这仍然可以工作,但是你必须将应用程序作为该域上的用户启动,以便通过运行runas /netonly /user:domainName\userName path进行网络请求。 - bradenb
2
您可以将域用户组添加到数据库的适当安全角色中。我不喜欢这样做 - 我倾向于为特定数据库创建安全组,然后将用户(或用户组)分配给这些组。但是,我始终拥有我使用的SQL服务器的域管理权限。 - David-W-Fenton

2

如果您拥有域和Active Directory,您应该毫不犹豫地选择Windows身份验证...一秒钟也不要考虑其他的!


我很感激你的建议。问题是有时同一用户从不同位置访问数据库。 - Alex Gordon
在同一网络/域上的不同位置吗?那么他/她只需要使用自己的凭据登录即可吗? - Philippe Grondier
如果从另一个域名使用其他凭据访问数据库,则需要管理称为“域信任”的东西(我认为这是正确的表达方式)。 - Philippe Grondier
看起来我是对的,SQL Server身份验证是最好的。 - Alex Gordon
1
我不明白。是什么情况迫使您使用SQL Server身份验证?一旦您选择它,就放弃了拥有集成和集中化安全管理系统的能力,您肯定会后悔的! - Philippe Grondier

1

在安全实现方面,像许多事情一样,你应该做什么取决于你的目标。

从你的问题中我不确定你是否打算将每个用户的凭据传递给 SQL Server,还是计划使用 Windows 身份验证或 SQL Server 身份验证进行单个登录。如果你选择后者,SQL Server 身份验证可能是更好的选择,因为它限制了网络帐户。如果你选择前者,Windows 身份验证可能更适合你的用户,因为它提供了单点登录。

顺便说一下,我的个人偏好是让每个应用程序使用自己的一组凭据进行数据库交互。这限制了用户只能拥有应用程序提供给他们的权限。通过这种方式,你的用户不必担心对数据库进行身份验证,因为你的应用程序会为他们处理这些事情。


1

考虑到您有一个直接连接数据库的桌面前端...最好的选择是使用Windows身份验证。请注意,这样做用户可以绕过前端并直接访问数据库。您需要授予他们所需的最低数据库权限。此外,您还需要使用AD安全组而不是添加每个用户。

当您控制配置文件时,Sql身份验证是最好的选择...例如Web应用程序。


3
当赋予用户权限时,你必须小心谨慎。不论是哪种认证模式,这都是真实的。因为安装数据库和软件的人不关心安全性,有多少个数据库运行于数百个用户被授予dbo权限?甚至在我公司中也有一个这样的例子! - Philippe Grondier
1
他的名字不是菲利普,对吧? ;) - David-W-Fenton
@Philippe Grondier 对于直接访问数据库的桌面应用程序,这是正确的。你确实需要另一层来安全地访问数据库...可以是存储过程、Web服务等等... - dotjoe
1
@David:呵呵!既不是菲利普也不是大卫!即使受到酷刑我也不会说话! - Philippe Grondier
在我的工作中,我经常遇到一个约10年前的白痴。他叫David W. Fenton。 - David-W-Fenton
不是最理想的解决方案,但您可以使用一个具有应用程序所需所有特权的应用程序角色,而用户/用户组可以拥有非常有限的访问权限。 - JeffO

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