Php 多用户数据库设计

Php 多用户数据库设计,php,sql,database,postgresql,Php,Sql,Database,Postgresql,我必须为学术目的建立一个基本的社交网络;但是我需要一些关于用户管理的提示 用户分为3个具有不同权限的组:管理员、分析师和标准用户。 对于每个用户,应将以下信息存储到数据库中:姓名、姓氏、电子邮件、年龄、密码 我不太确定应该如何在这两种解决方案之间设计数据库: 1) 一个名为“users”的表具有“role”属性,解释用户可以做什么和不能做什么,权限通过php管理 2) 每个应用程序用户都是通过查询“CREATE ROLE”(这是一个postgres数据库)创建的数据库用户,他拥有通过“GRANT

我必须为学术目的建立一个基本的社交网络;但是我需要一些关于用户管理的提示

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

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

1) 一个名为“users”的表具有“role”属性,解释用户可以做什么和不能做什么,权限通过php管理

2) 每个应用程序用户都是通过查询“CREATE ROLE”(这是一个postgres数据库)创建的数据库用户,他拥有通过“GRANT”语句授予的某些表的权限

您应该考虑到该项目是用于数据库检查的


每次都要感谢解决方案1,因为您不想限制自己仅在每个表的基础上分配权限。使用数据库用户会很麻烦,也不太实用。

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

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

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

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

最重要的是:

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


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

使用第一种选择(用PHP管理权限)。原因如下:

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

  • 不要将密码存储在数据库中!有关原因的解释,请参阅。