多用户数据库设计

时间:2011-02-07 15:21:49

标签: php sql database postgresql

我必须为学术目的开发一个基本的社交网络;但我需要一些用户管理的提示..

用户被细分为3个具有不同权限的组:管理员,分析师和标准用户。 对于每个用户都应该在数据库中存储以下信息:姓名,姓氏,电子邮件,年龄,密码。

我不太确定如何在两个解决方案之间设计数据库:

1)一个名为'users'的表,其中包含'role'属性,用于解释用户可以做什么和不能做什么,以及通过php管理权限

2)每个应用程序用户都是使用查询“CREATE ROLE”(它是一个postgres数据库)创建的数据库用户,并且他对使用'GRANT'语句授予的某些表具有权限

您应该考虑该项目是用于数据库考试..

感谢

4 个答案:

答案 0 :(得分:2)

不要将数据库的授权机制用作应用程序的授权系统。三个主要原因:

A)如果不重建整个应用程序,您将永远无法更改为其他数据库。

B)您希望在应用程序中授予用户的内容类型可能与db的ACL系统允许的内容类型不同。

最重要的是:

C)您不希望应用程序用户能够直接对您的数据库执行任何操作。如初。

所以你的#2选项就出来了。因此,使用每个用户记录存储用户类型字段,然后“该用户类型允许的内容”成为以PHP计算的业务逻辑的一部分。

答案 1 :(得分:0)

解决方案1每次因为您不希望将自己限制为仅基于每个表分配权限。使用数据库用户既麻烦又不太实用。

答案 2 :(得分:0)

使用选项1.从长远来看,它将更加灵活,可能更容易编码,并且您不希望将应用程序逻辑与特定实现紧密联系在一起。如果您以后想要将应用程序移植到SQL-Server上运行该怎么办?如果数据库用户的实现方式不同,则选项2可能会给您带来严重的痛苦。

答案 3 :(得分:0)

使用您的第一个替代方案(使用PHP管理权限)。原因如下:

  1. 数据库不会为您需要管理的权限(允许谁发送电子邮件,允许人们访问哪些群组等)提供足够的选择和粒度。
  2. 通常与数据库的连接相当昂贵,因此您需要连接一次并尽可能长时间保持连接(使用相同的数据库用户)
  3. 所有数据库在处理用户帐户的方式上都不相同。通过在SQL之上构建自己的用户系统,您可以希望更加独立于数据库
  4. 在现实世界中,管理数据库和开发程序的任务由完全不同的人完成,程序无权创建或更改数据库用户