【问题标题】:Team Foundation Server - Application Tier to Data Tier: Authentication, Impersonation and AuthorisationTeam Foundation Server - 应用层到数据层:身份验证、模拟和授权
【发布时间】:2012-03-21 00:51:17
【问题描述】:

根据Team Foundation Server Architecture document,在组和权限部分:

Team Foundation Server 有自己的一组默认组和权限,您可以在项目、集合或服务器级别设置这些组和权限。您可以创建自定义组并在组和个人级别自定义权限。 但是,您添加到 Team Foundation Server 的用户或组不会自动添加到 Team Foundation Server 可以依赖的两个组件:SharePoint Products 和 Reporting Services。如果您的部署使用这些程序,您必须向它们添加用户和组并授予适当的权限,然后这些用户或组才能在 Team Foundation Server 中的所有操作中正常运行。

身份验证和模拟:

请通过分析器跟踪、配置 sn-ps 或 Microsoft 文章中的权威描述(就我个人而言,我找不到任何)提供证据来支持您的回答。

  1. 是否启用了从应用层到底层 Sql Server 的集成安全性?
  2. 如果启用了集成安全性,是否启用了模拟(假设是标准配置)来模拟应用层内的用户身份?
  3. 如果启用了模拟,应用层是否负责管理底层数据库的安全性?
  4. 如果未在应用层中启用模拟,是否所有与数据层的交互都由 TFSService 身份完成?

授权:

  1. 就现有知识而言,是在数据层还是在应用层评估授权(即Project.HasWorkItemReadRightsRecursive 的值)?

为什么:

我编写了一个解决方案,在该解决方案中,我通过 WCF Web 服务将集成安全性从客户端进程传递到使用模拟的 Sql Server 中,从中我可以使用 Transact-Sql 评估对象授权和角色成员资格。我们正在讨论此作为适当模式的优缺点,并决定研究 TFS 如何处理此问题。

如果您在数据库驱动的应用程序中对对象级授权有任何更广泛的 cmets,请随时分享。

【问题讨论】:

    标签: sql-server authentication tfs authorization impersonation


    【解决方案1】:

    狂热,

    您要查找的大部分内容都可以在 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、连接到数据库以及执行他们有权访问的任何操作。也许您的用户不够精明,但为什么要抓住机会?

    【讨论】:

    • 感谢您的回复。它与我对 TFS 所做的调查工作一致。但是,我无法调查 Sql Server 安全性的复杂性,因为访问被拒绝。我确实注意到,尽管在经过身份验证的连接上,我无法访问 TFS 数据库,您突出显示的一点表明 Sql Server 没有用户级别的身份验证安全性。此外,我找不到用于模拟的显式配置,因此我认为默认情况下它是禁用的。非常感谢您提供确凿的信息,有一些观点;)
    • 谢谢!是的,我的 SQL 服务器访问也受到了一些限制。我可以看到所有内容,但无法像您希望的那样运行分析器。很高兴听到我的回复很有帮助:)
    猜你喜欢
    • 2011-03-17
    • 2010-11-03
    • 2015-12-24
    • 1970-01-01
    • 2011-02-27
    • 2016-08-31
    • 2020-03-15
    • 1970-01-01
    • 2016-09-13
    相关资源
    最近更新 更多