代码之家  ›  专栏  ›  技术社区  ›  Ed Daniel

信任员工的“安全”SQL-黑名单,白名单,以上都不是?

  •  1
  • Ed Daniel  · 技术社区  · 14 年前

    注意,这纯粹是假设;这个想法给了我希比吉比。我宁愿拥有一个涵盖所有事件的数据库管理用户界面。但我开始考虑是否可以安全地做到这一点,结果把自己绑在各种各样的绳结中。这就是问题所在。

    总之:假设我想允许我的网站的某些用户通过输入“原始”SQL来搜索部分数据库:

    • 只信任(显然是登录)员工
    • 对相关表的只读访问
    • 不能访问其他表
    • 不可能运行不安全/不允许的SQL、意外或其他

    所有表格的前缀都是与之相关的区域,例如视频、照片、论坛。我希望授予这些用户对某些部分的读访问权限,但不允许他们通过输入SQL直接修改数据,即使我信任他们通过UI进行更改。

    我想把这些受信任的用户锁在所有论坛表格之外,否则他们可以阅读所有用户的私人信息、管理论坛帖子等!

    “可信用户”的需求得到了处理,他们必须在某个用户组中才能看到或使用这个需求。它更像是“安全SQL”部分。

    它是否与只具有读取权限和只在正确表上的其他db用户连接一样简单?

    或者我会黑名单(如果包含,拒绝SQL)论坛,删除,修改,更新,创建,插入等?

    或者白名单选择相关的表名和字段名?这听起来更安全,直到我考虑到需要在何处字段“name=”武断的文本。

    或者某种组合?(比如,记录“黑名单”SQL的使用,即使它被阉割了。)

    还是尖叫着跑开?

    你会怎么处理?这样做是否安全?

    5 回复  |  直到 14 年前
        1
  •  1
  •   Philip Kelley    14 年前

    许多RDMS系统实现“模式”,这(对于SQL Server)本质上是包含数据库对象(如表)的数据库中的容器,如果未指定任何模式,则“dbo”是默认模式。一旦设置好,您就可以将登录的访问权限分配给模式和包含在模式中的所有对象——因此,如果添加了一个表,它们将通过模式自动获得(或被拒绝)对该表的访问权限。

    缺点是你必须提前计划。现在要将所有现有表移动到模式中,需要重命名所有内容,并相应地更新所有现有代码。不过,如果您这样做,将使设置和管理黑名单和/或白名单变得简单多了。

        2
  •  3
  •   Ta01    14 年前

    如果您的目标最终用户对SQL感到满意,那么您就不能让他们访问客户机访问工具,并通过他们对所述数据库的登录权限限制他们可以做的事情,从而节省大量时间吗?

        3
  •  3
  •   ChristopheD    14 年前

    请不要试图手动 filter 坏的 SQL(字面意思是 insert , delete 等等……)。听起来是个可怕的计划!

    您的数据库应该为您提供测试过的功能来授予或撤销读/写/更新/删除…对特定架构/表等的特定用户/用户组的权限…

        4
  •  1
  •   Will A    14 年前

    您应该(取决于您的DBMS)能够将用户可以获得的访问权限限制到对象级,甚至列级(如果需要的话)。

    我建议使用白名单而不是黑名单的方法,因为每当你添加一个新的对象(表、视图等)时,默认情况下你都是安全的,如果你忘记在需要的时候将对象设置为黑名单,就不会陷入悲伤。

        5
  •  1
  •   Pavel Urbančík    14 年前

    白名单方法是一种可行的方法。
    您可以在表上创建视图,拒绝基表上的所有权限,并仅在视图上授予它们。这样您就可以控制谁、做什么和在哪里做(即拒绝在那里插入、允许更新,但不在这里插入、完全隐藏此表等)。
    当我们谈论安全性时,这种方法有一个非常显著的优势——它完全隐藏了外部用户的数据库模式,减少了以后利用您的应用程序的可能性(是的,它确实是这样发生的)。