2011-02-07 167 views
0

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

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

我不太清楚我应该怎么设计theese两种解决方案之间的数据库:

1)一个表称为“用户”与该解释什么是用户可以做的“角色”属性,什么都可以” t),权限通过php管理

2)每个应用程序用户都是使用查询'CREATE ROLE'(这是一个postgres数据库)创建的数据库用户,并且他拥有一些授予'GRANT'声明

您应该考虑到该项目是针对数据库考试的。

谢谢

+1

不要将您的密码存储在数据库中!请参阅http://blog.moertel.com/articles/2006/12/15/never-store-passwords-in-a-database以获取解释。 – btilly

回答

2

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

A)如果不重建整个应用程序,您将无法更改为其他数据库。 B)你想在应用中授予用户的东西的类型可能与数据库的ACL系统允许的类型有所不同。

而且最重要的是:

C)你不想给一个应用程序用户直接做任何你的数据库的能力。永远。

所以你的#2选项是正确的。因此,将用户类型字段与每个用户记录一起存储,然后“用户类型允许的内容”成为您在PHP中计算的业务逻辑的一部分。

0

解决方案1每一次,因为你不想限制自己只在每个表的基础上分配权限。使用数据库用户会很麻烦并且不太实用。

0

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

0

与您的第一个选择(用PHP管理权限)一起去吧。这里的原因有:

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