2010-11-27 63 views
1

注意,这纯粹是假设的;这个想法给了我heebie-jeebies。我宁愿有一个涵盖所有可能性的数据库管理界面。但我不得不考虑是否可以安全地做到这一点,并最终结束自己的所有结。因此,这个问题。可靠员工的“安全”SQL - 黑名单,白名单,以上都不是?

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

  • 信任(和登录,很明显)的工作人员只
  • 只读访问相关表格
  • 根本见不到其他表
  • 没有运行不安全/不允许SQL,意外方法可行或以其他方式

所有表格都以其相关的区域为前缀,例如videos_,photos_,forum_。我想授予这些用户读取特定部分的权限,但不允许他们通过输入SQL直接修改数据,即使我相信他们通过UI进行更改。

我想甚至可以锁定这些用户信赖的,比方说,所有forum_表的 - 否则他们可以阅读所有用户的私人信息,管理论坛帖子,等等!

“可信用户”要求的照顾,他们将不得不在一定用户组看到或使用。这更多的是“安全的SQL”部分。

是化繁为简用不同的DB用户谁具有只读权限,只有在正确的表连接?

或将我列入黑名单(并拒绝SQL如果它包含)forum_,DROP,ALTER,UPDATE,CREATE,INSERT,等等?

或白名单SELECT,FROM,WHERE,相关的表名称和字段名称?这听起来更安全,直到我想到需要WHERE field_name =“这里是任意文本”。

还是有些组合? (比如,记录使用“黑名单”的SQL,尽管它已知被阉割。)

或者逃跑尖叫?

你将如何解决它?实际上是否可以安全地做到这一点?

回答

1

许多关系数据库管理系统系统实现了“模式”,对于SQL Server来说,它本质上是包含数据库对象的数据库中的容器(比如表 - “dbo”是没有指定的默认模式)。设置完成后,您可以为登录模式和包含的所有对象分配访问权限 - 因此,如果添加了表,他们将通过模式自动获取(或拒绝)对其的访问。

不利的一面是,你必须提前做好计划。要将现有的所有表格转换为模式,需要重新命名所有内容,并相应地更新所有现有代码。不过,如果你这样做,它会使设置和管理黑名单和/或白名单变得更简单。

3

如果目标最终用户习惯使用SQL不会您只是给他们访问的客户端访问工具,并限制他们可以通过自己的登录权限做什么到所说的数据库为自己节省大量的时间。

+0

这是有道理的。我假设了一种环境,那种东西不可用;例如,我知道我的一位同事在使用phpMyAdmin时遇到了一个不愉快的经历,并且不希望我们的任何东西靠近我们的东西。不知道为什么他们会相信我做得更好...... – 2010-12-01 20:31:21

1

你应该(取决于您的DBMS)可以限制哪些用户可以访问使用权限到对象级别 - 如果你需要,即使是列级。

我会建议去白名单而不是黑名单的方法,因为每当你添加一个新的对象(表,视图等),你会默认安全 - 而不是进入悲伤,如果你忘记设置对象如果需要列入黑名单。

3

请不要尝试手动filter SQL(上话像insertdelete等)。这听起来像一个可怕的计划!

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

1

白名单方法是一种方法。
您可以在表格上创建视图,拒绝基表上的所有权限并仅在视图上授予它们。通过这种方式,您可以控制谁,什么以及在哪里可以做(即拒绝插入,允许更新,但不插入,完全隐藏这些表格等)
这种方法在我们讨论时有一个非常显着的优势安全性 - 它完全隐藏了来自外部用户的数据库模式,减少了以后对您的应用程序进行攻击的可能性(是的,它确实发生了这种情况)。