狂热,
您要查找的大部分内容都可以在 TFS Web 服务的 web.config 中找到,并且可以通过查看 TFS 数据库的安全性来找到。
1.是否启用了从应用层到底层 Sql Server 的集成安全性?
是的。
web.config 位于您的应用层服务器上:
C:\Program Files\Microsoft Team Foundation Server 2010\Application Tier\Web 服务
您可以在其中找到 Tfs_Configuration 数据库的连接字符串。这非常明确地表明它使用集成安全性。
<add key="applicationDatabase" value="Data Source=YOURSQLSERVER\YOURSQLINSTANCE;Initial Catalog=Tfs_Configuration;Integrated Security=True;" />
2。如果启用了集成安全性,是否启用了模拟(假设是标准配置)来模拟应用层内的用户身份?
没有。当 TFS 连接到数据库时,它使用 Microsoft Team Foundation Server 应用程序池中的凭据,而不是调用最终用户的凭据。再次来自 TFS 服务 web.config...
<!-- Disable Identity Impersonation -->
<identity impersonate="false"/>
TFS 的最终用户对底层 Tfs_Configuration 数据库没有任何级别的访问权限这一事实进一步证明了这一点。 (或项目收集数据库,就此而言)
如果您在 SQL Management Studio 中打开 Tfs_Configuration 数据库并查看“安全”文件夹,您将只会看到已在 TFS 管理控制台中添加为“管理控制台用户”的用户列出。
3.如果启用了模拟,应用程序层是否负责管理底层数据库的安全性?
由于问题 #2 的答案,不适用。
然而,答案是“是的”。当您最初配置 TFS 时(假设您使用 Microsoft 安装指南,您应该使用:http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=24337),您将使用 sysadmin 或 *db_creator* 安全角色设置您的“TFSSERVICE”帐户SQL 服务器。这允许 TFS 应用程序层管理其自己的数据库的安全性。当您添加新的“管理控制台用户”时,它将授予该用户对 TFS 数据库的权限。您可以通过在将用户添加到管理控制台之前和之后查看 Tfs_Configuration 数据库的 Security 文件夹来亲自看到这一点。
此外,如果您以无权访问底层数据库的用户身份打开 TFS 管理控制台,控制台将加载一堆友好的“用户无权访问数据库”错误消息,而不是填充您想要的数据期望在管理控制台中看到。
4.如果应用层中没有启用模拟,那么与数据层的所有交互都由 TFSService 身份完成吗?
是的。我认为上面所说的一切都清楚地表明了这一点。甚至 TFS Web 访问的应用程序池也以 TFSSERVICE 身份运行。 (当然,这一切都是开箱即用的……您始终可以明确授予对 TFS 数据库的访问权限并开始自己胡闹……尽管这样做会使您与 MS 的支持合同无效:D)
授权问题:据了解,授权是在数据层还是在应用层评估(即 Project.HasWorkItemReadRightsRecursive 的值)
此授权 (Project.HasWorkItemReadRightsRecursive) 在应用程序层内进行评估。这适用于所有工作项和版本控制项。为什么?因为这是 TFS 内部安全模型的一部分。 TFS 为其版本控制和工作项对象维护了一组广泛权限,这些权限与底层数据层完全分离。有权对版本控制下的特定工作项或文件进行读/写并不意味着您有权访问包含这些版本控制或工作项对象的数据的 SQL 表。
这里或多或少都有说明。 http://msdn.microsoft.com/en-us/library/ms252587(v=vs.100).aspx 有服务器级权限、集合级权限、团队项目级权限、构建级权限、工作项权限、版本控制权限。整个权限系统在 TFS 应用程序层内编排,无需了解底层数据库架构或数据库安全性。
回应您提出问题时提出的观点
但是,您添加到 Team Foundation Server 的用户或组是
不会自动添加到 Team Foundation 所在的两个组件中
服务器可以依赖:SharePoint 产品和 Reporting Services。
这是为什么?因为 SharePoint 和 Reporting Services 都使用类似的模式,其中有一个在应用程序层管理的广泛的安全系统,但只有一个(或者可能是几个)帐户可以实际访问 SQL 数据库。 IE。您可以在 SSRS 中设置 Content Viewer、Content Manager 等权限,并且可以在 SharePoint 中设置 Contributor、Site Collection Admin、Farm Admin 等权限。您的 SSRS 服务帐户或 SharePoint 场管理员帐户将是唯一具有 SQL 数据库访问权限的帐户。
总结
如果您正在开发的应用程序正在获取实际客户端用户的凭据并将它们一直传递到数据库,那么您可能会面临一个重大的安全问题。由于这些用户的帐户将具有直接的 SQL 访问权限,因此没有什么可以阻止他们打开 SQL Management Studio、连接到数据库以及执行他们有权访问的任何操作。也许您的用户不够精明,但为什么要抓住机会?