【问题标题】:Should one create a new table for each user on a web app?是否应该为 Web 应用程序上的每个用户创建一个新表?
【发布时间】:2011-05-24 01:12:08
【问题描述】:

我正在编写我的第一个网络应用程序,我对数据库的了解足以知道架构很重要,但还不足以知道如何真正编写一个好的应用程序。

是否有用于处理存储在每个用户帐户中的信息的标准协议?我的直觉是拥有一个存储用户密钥和登录信息的表,以及他们的表的句柄(可能是密钥?),然后为每个用户创建一个表。

但我想知道为每个用户设置表是否存在性能问题,或者这似乎是一种非常愚蠢的方法。这似乎应该是一个“已解决的问题”,因为基本上所有的网络应用程序都有用户帐户,但我无法通过搜索找到任何东西。是否有任何具有“已解决”模式的资源来存储各种 Web 数据?

【问题讨论】:

  • 我知道这有点老了,但出于安全原因,我也有同样的想法。例如,防止其他用户访问除他们之外的其他表。
  • @SalemF 所以是的,这样做存在潜在的安全问题,但使用单独的表甚至会出现更大的安全问题。简而言之,您不希望您的 Web 应用程序在运行中创建表格。您只想添加或删除表中的数据。添加和创建表是比添加和删除行更高的权限级别。而且您不希望您的 Web 应用程序具有创建或删除表的权限。这就是您最终让黑客删除或复制整个数据库的方式。还有其他原因,但这是安全原因。
  • @aranesa 你说得对,它是关于权限级别的,如果用户可以访问其他人的原始数据,他可以访问其他人的表。但这个想法是让用户只在他自己的表上,不提供删除或创建新表的权限。黑客获得对 DB 的控制权的任何一种方式,他都会做他想做的事

标签: database-design schema


【解决方案1】:

除非您的应用程序是非常定制的,否则您将需要选择一个网络应用程序框架来使用。对于简单的事情,最常见的框架几乎同样有效(尽管对此存在一些激烈的分歧)。我将假设您拥有一种您认为自己最强大的编程语言,因此我建议您将其作为 Web 框架的主要指南。一些常见的语言框架是(这甚至不是一个详尽的列表接近):

关于架构的问题,您可能需要查看database normalization。大多数框架已经拥有处理用户创建和身份验证的工具,但通常您永远不会希望为每个用户创建一个表。更常见的方法是创建一个名为 users 的表,其中有一些 id 作为主键,然后用作引用其他数据的外键。

【讨论】:

    【解决方案2】:

    是的,这绝对不是一个好主意。您应该做的是熟悉一些 Web 应用程序框架,因为它们中的大多数/全部已经为您提供了这些。不错的选择是例如Django

    【讨论】:

    • 那种学习了它.....我在这里是因为我不能使用 Django 作为完全用 mysql 和 python 编写的应用程序的服务器,需要找出好的方法设计一个数据库。
    【解决方案3】:

    通常您不会为每个用户创建单独的表 - 此解决方案无法很好地扩展。

    相反,您通常将所有用户的数据放在一个表中(或每种数据类型一个表),并在 WHERE 子句中使用条件来确保用户只能读取/写入自己的数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-07
      • 2017-03-06
      • 2020-04-04
      • 2020-05-08
      • 1970-01-01
      • 2020-12-20
      • 2015-06-22
      • 1970-01-01
      相关资源
      最近更新 更多