为什么我不应该让外人访问我的数据库?

Mar*_*ius 12 database architecture security api

今天有很多站点都有API,允许用户使用GET HTTP请求以XML或JSON的形式从站点获取数据.Flickrdel.icio.us是具有API的站点的示例.这些API要求服务器访问数据库,然后将结果输出为XML或JSON.

为什么我们需要这个翻译呢?为什么不在数据库上创建用户(例如MySQL)?将为用户提供对数据库的有限访问权限,仅允许SELECT,并且仅允许这些表中的某些表和某些列.这对于服务器来说不是更有效率(它不必处理HTTP请求),对于现在可以按照需要的方式准确访问所需数据的开发人员来说会更容易.

Jef*_*ber 32

除了安全注意事项,您可以在不影响客户端的情况下更改数据库结构.此外,形成不良的查询会占用您的服务器,而不是客户端.

  • 哦,好点.为您提供灵活性的抽象层是巨大的. (4认同)

Bob*_*man 28

您是否可以阻止恶意个人制作超级复杂的SQL查询,以便将数据库的CPU固定为100%?你能阻止很多无辜的程序员制作低效的查询,这些查询永远不会被优化,会做同样的事情吗?


Mat*_*cey 11

API:

  • 使监控和控制使用变得更容易(对于DB用户实施"每X有限的查询"可能更难)
  • 允许向用户呈现比DB中使用的更简单的结构.
  • 意味着用户无需了解您的数据库结构.
  • 允许数据库可移植性.(哦,你已经变得庞大,现在需要实现:分片,移动到bigtable等等 - 使用API​​,用户不需要知道)
  • 允许不同的(更好的?/变量?)缓存请求.
  • 意味着您不必为额外的数据库用户付费(如果这是数据库获得许可的方式.)


dov*_*ove 10

编码到合同 - 使用API​​,您可以更改其背后的所有内容,而不会影响外人使用它们.在这里,您不仅要将它们与MySQL相关联,还要将它们与您的架构联系起来

缓存 - 允许它们进行任何查询几乎消除了通过http缓存可预测查询的任何机会.这可能是消除通常排名第一的瓶颈数据库的头号方法.

安全性 - 通过这种方法,即使是偶然的事情,拒绝服务攻击也很容易.更不用说您必须提供对数据层的访问权限,这通常放在可以收紧安全性的受限区域中

可用性 - 并非每个人都是开发人员或想要了解您的内部域.他们可能更喜欢预先烘烤的直接和自我解释的API.一个极端的例子是为经理提供数据库权限而不是报告.