【问题标题】:Applying least privilege to database connections对数据库连接应用最小权限
【发布时间】:2011-10-12 20:12:20
【问题描述】:

我注意到大多数 FOSS 应用程序(例如 Wordpress)仅使用一组已被授予所有权限的数据库凭据。这似乎违反了最小权限原则。

在编写这样的应用程序时,最好使用多个帐户,例如,一个帐户仅用于 SELECT 查询,另一个用于 UPDATE 等?

【问题讨论】:

    标签: mysql security database-permissions


    【解决方案1】:

    绝对违反了最小特权原则。让我们回到definition

    在信息安全、计算机科学和其他领域, 最小特权原则,又称最小原则 特权或最低特权,要求在特定的 计算环境的抽象层,每个模块(例如 基于我们所在的层的进程、用户或程序 考虑)必须只能访问此类信息,并且 合法目的所必需的资源。

    在您的 Wordpress 示例中,公共用户使用 SQL 帐户从数据库中检索数据,该帐户也可以更改或删除该数据。此用户的“最小权限”不包括更改该数据的访问权限,无论它是直接在表上还是通过存储过程。这绝对不符合“仅访问其合法目的所必需的此类信息和资源”

    SQL 环境中的风险主要是 SQL 注入。一个小缺陷,如果该公共帐户有权造成损害,那么您最终会遇到各种问题。是的,输入应该被验证,是的查询应该被参数化,但这是一个额外的防御层,可以为您提供一些额外的保障。

    我在OWASP Top 10 for .NET developers part 1: Injection专门谈到这个。

    【讨论】:

    • 有趣的是,在发布此问题几个小时后,我实际上遇到了该资源。这是我所怀疑的,虽然所有输入都应该被清理,但在我看来,使用多个数据库帐户似乎是在应用深度防御原则。我找到了 WP 和其他 FOSS 应用程序使用单个帐户的原因:像 Plesk 这样的控制面板并不容易支持创建具有自定义权限的多个数据库帐户。为了便于使用和采用,这似乎是一个牺牲最佳实践的案例。
    【解决方案2】:

    我想如果只是为了维护问题,情况会更糟。一个用户意味着凭据是一个地方,并且可以在一个地方为每台服务器更新它们。此外,大多数框架都假设一个凭据集来统治所有框架,虽然允许两个以上的凭据并不太难,但它更烦人。

    如果您有一个仅具有选择权限的用户,则有一些好处,您不必担心 SQL 注入(当然不是Bobby Tables 级别),但即使这样也不能保证,所以无论如何你都必须清理你的数据输入(他们仍然可以根据选择进行注入攻击......)。

    【讨论】:

      【解决方案3】:

      最佳实践是授予存储过程而不是表级别的权限。

      【讨论】:

      • 大多数共享主机环境是否允许使用存储过程?
      • 我在 SQL Server 中看到的那些将数据库专用于 1 个帐户。所以答案是肯定的。数据库与数据库服务器不同。 1 台服务器可以包含数百甚至数千个数据库。
      猜你喜欢
      • 2021-07-07
      • 1970-01-01
      • 1970-01-01
      • 2016-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-01
      相关资源
      最近更新 更多