AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 13292
Accepted
NotMe
NotMe
Asked: 2009-05-28 12:04:21 +0800 CST2009-05-28 12:04:21 +0800 CST 2009-05-28 12:04:21 +0800 CST

使用集成安全性 (SSPI) 访问 SQL Server 是否更适合 Web 应用程序?

  • 772

将 Web 应用程序 (.net) 部署到生产环境时,使用集成安全性更好还是更重要?

在我看来,如果黑客破坏了 Web 服务器,这并不重要,因为他们可以轻松地冒充机器。

想法?

sql-server security web-applications
  • 8 8 个回答
  • 34354 Views

8 个回答

  • Voted
  1. Best Answer
    Remus Rusanu
    2009-05-28T19:00:58+08:002009-05-28T19:00:58+08:00

    我想说使用 SQL 身份验证只有两个正当理由:

    1. 您是从域外连接的,因此集成了身份验证。
    2. 您正在运行 TPC-C 基准测试并且每个周期都很重要。SQL auth 稍微快一点。

    对于您提出的方案(Web 服务器主机完全受损),没有什么可以保护您。黑客至少可以在 DB 服务器上做 Web 服务器可以做的所有事情。而且我想说,纵深防御可以教你在这种情况下最大限度地减少损失:将你的网络服务器使用的帐户的数据库权限减少到绝对最低要求,仅此而已。其次,确保如果 Web 服务器主机被入侵,它不能用于提升比 Web 服务器帐户更高的权限(即,在 WWW 主机上没有其他服务使用比 WWW 帐户在 DB 上具有更高权限的凭据)。这些是基本的安全原则,与使用的身份验证方案无关。

    虽然 sql auth 与 windows auth 在您的方案中都没有明显的优势,但还有其他问题需要考虑:

    1. 集中策略执行:您可以在一个地方设置密码策略,包括密码有效期和到期、帐户终止等。
    2. 控制模拟和信任委托。一旦在信任委托链中使用 sql auth,所有的赌注都将被取消,因为这不是真正的“委托”,因此不再受您的政策施加的限制
    3. 审计:你的 LSA 甚至看不到 sql auth,所以你的整个审计基础设施都被绕过了。您需要明确添加 SQL 生成的关于 sql auth 事件的记录,但由于这些事件在事件日志中具有不同的源、提供程序和模式,因此混合了苹果和橙子

    最后一点:TDS 协议在流量上以明文形式公开 sql auth 密码,但这通常通过请求对流量进行 SSL 加密来缓解。

    那么,为什么您仍然看到在 web.config 中以明文形式存储密码的 sql auth WWW 主机?那些是糟糕的开发人员/管理员,不要成为其中之一。

    msdn.microsoft.com/en-us/library/aa378326(VS.85).aspx

    technet.microsoft.com/en-us/library/ms189067.aspx

    • 9
  2. Joel Spolsky
    2009-05-28T12:26:26+08:002009-05-28T12:26:26+08:00

    如果您不使用 SSPI,则将用户名和密码硬编码到源文件中。

    如果您将用户名和密码硬编码到源文件中,您的所有员工都可以访问它。

    这是相对不安全的。心怀不满的前雇员可能会恶意使用这些信息。访问者可能会在某处的屏幕上看到代码。或者源代码可能会不小心泄露出去。

    SSPI 的优点是密码永远不会以明文形式存储在任何地方。

    • 7
  3. Brent Ozar
    2009-05-28T12:33:30+08:002009-05-28T12:33:30+08:00

    到目前为止,其他答案都很好,但我会提出另一个答案:管理。

    迟早,您可能最终会拥有多个 SQL Server。管理您的应用程序和多个 SQL Server 之间的 SQL 身份验证会有点痛苦,尤其是当您遇到安全问题时。如果您更改一次 Windows 身份验证密码,它会立即在您的所有服务器上更改。如果您需要轮换 SQL 身份验证密码,那就更痛苦了——甚至到了您可能根本不会这样做的地步。这是一个安全风险。

    • 7
  4. diq
    2009-05-28T12:10:03+08:002009-05-28T12:10:03+08:00

    我在这里不是 100% 确定,但我认为主要的一点是 SQL 身份验证是不安全的,所以最好使用 Windows 身份验证。根据您的应用程序的设置方式,您还可以使用 Windows 身份验证将正确的凭据以加密形式存储在计算机上。我认为使用 SQL 身份验证真的不可能。你可以混淆它,但最终它必须是清楚的。

    此外,仅仅因为黑客可以进入服务器并不意味着游戏结束。黑客可能会控制非特权进程,但不会在服务器上执行任何其他操作。这就是为什么重要的是不要以管理员或系统身份运行所有内容,而是使用最低权限的服务帐户。

    • 2
  5. Kevin Colby
    2009-05-28T12:08:10+08:002009-05-28T12:08:10+08:00

    最好的办法是限制他们如果/当他们闯入 Web 服务器时可以做什么。这意味着只授予应用程序运行所需的 SQL 权限。授予应用程序 DBO 权限要容易得多,但如果网络服务器受到成功攻击,这会使 DB 更容易受到攻击。

    • 1
  6. K. Brian Kelley
    2009-05-28T18:24:49+08:002009-05-28T18:24:49+08:00

    我将通过假设您正在谈论内部专用网络上的内部 Web 服务器来作为所有这一切的开场白。

    让我们从模拟机器开始。如果应用程序池标识是网络服务并且在 .NET 应用程序中没有模拟,那么是的,Web 应用程序将使用计算机的计算机帐户连接到后端 SQL Server。这意味着您已授予对所述机器帐户的访问权限。微软的 CRM 就是这样工作的。

    但是,如果您已指定身份,则该用户帐户将需要访问 SQL Server。虽然您是对的,如果攻击者破坏了 Web 服务器,他们实际上拥有与身份帐户相同的访问权限,但事实是,使用 SQL Server 登录不会改变任何事情。获得访问权限后,我可以修改 Web 应用程序以执行我想要的操作,并且在后端 SQL Server 上最大程度地允许您的安全性。

    现在至于为什么要使用 SSPI。首先,您没有使用基于 SQL Server 的登录。这意味着 Active Directory 是唯一的安全来源。这意味着您有正常的审计手段来确定无效访问。其次,这意味着除非有其他应用程序需要它,否则您可以让 SQL Server 处于仅 Windows 身份验证模式。这意味着不允许任何 SQL Server 登录。这意味着对 sa 的任何攻击在它们开始之前就被停止了。最后,它使恢复更容易。如果您使用基于 SQL Server 的登录,则需要使用 SID 和加密密码提取登录。如果您使用基于 Windows 的用户帐户作为“服务帐户”,当您转到新的 SQL Server 时,通过创建登录,

    • 1
  7. Luke Puplett
    2016-05-06T01:23:36+08:002016-05-06T01:23:36+08:00

    问题是哪个“更好”?这很难回答,因为它依赖于提问者的背景、价值观和优先事项。

    就个人而言,我喜欢 SQL 身份验证。

    • AD 是运行、支持和管理服务帐户的另一回事。
    • AD 需要在您的托管环境中可用。
    • AD 将使迁移到云或混合云变得困难。
    • AD 可以轻松地将服务帐户添加到组织其他部分的管理员不应加入的组中。
    • SSPI 不会绕过加密连接字符串的问题,因为您应该在 config.xml 中加密您的 SQL 主机名。
    • SQL auth 简单,只是文本配置,易于部署。
    • 设置应用程序池身份是自动化的另一件事,然后在每个环境的自动化脚本中隐藏用户名和密码。
    • 使用两个连接字符串,可以轻松使用滚动密码,因此您可以在不停机的情况下更新密码。

    最后一点:您编写连接管理器类来尝试每个连接字符串,这样您就可以在配置中的第一个更改密码,将更改推送出去,它将故障转移到第二个连接,然后您在 MSQL 上更新密码第一个将再次使用。需要进行最后的配置更改,以将第二个密码设置为与第一个密码相同,以备下次使用。

    • 1
  8. squillman
    2009-05-28T12:11:16+08:002009-05-28T12:11:16+08:00

    如果用户不会直接操作数据库(通过其他客户端工具,例如 SQL Server Management Studio),那么我通常只会为应用程序创建一个 SQL 登录名并授予它所需的访问权限。此时,用户在 Web 应用程序界面允许的范围内可以做的事情受到限制。

    • 0

相关问题

  • 在 SOHO 环境中实施的最佳 VPN 技术是什么?[关闭]

  • 保护新的 Ubuntu 服务器 [关闭]

  • Vanilla Powershell 是否足以成为 Windows 和 DB 服务器管理员的语言?

  • 在 SQL Server 中,何时应将 PRIMARY Data FileGroup 拆分为辅助数据文件?

  • 如何从 SQL Server 2008 中的备份中排除索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve