访问权限数据库设计

时间:2013-02-11 08:47:46

标签: database design-patterns database-design access-rights

哪一个是设计数据库以存储访问权限的更好模式?

  1. 演员{actorid,名字,密码,canpost,cancomment,canremoveuser,candothis,candothat}
  2. 演员{actorid,名称,密码}权利{actorid,action,isallowed}

3 个答案:

答案 0 :(得分:5)

你的第一个选择并不像它可能的那样灵活,你的第二个选择不像它那样可管理。

访问控制的标准模式称为基于角色的安全性。由于两者用户数您需要增加的不同类型权限的数量,用户到权限链接的管理可能变得越来越困难。

例如,如果您有五个管理员和五十个用户,那么如何保持每个组的权限同步?当您的某个用户升级为管理员时,您需要进行多少次修改?答案是创建两个交叉点:用户到角色角色到权限

ERD

答案 1 :(得分:3)

选项1适用于简单系统。一个查询,为您提供一行所需的所有信息。这非常有效。效率是“好的”。它甚至可能符合您的需求“更好”。

如果操作权很可能以不可预测的方式随时间扩展,则选项2非常有用,并且可以由基本上隔离的模块使用,以确认用户只能访问其唯一的子系统。更复杂的是,如果同时检索actor和访问信息,则必须执行“join”。但是我喜欢加入,所以我不会说低效率,DBS也是为了擅长加入。明智地使用索引,它们就可以了。

从编码的角度来看,使用链接表会更复杂。您已经隔离了数据,因此必须编写更复杂的代码来处理它的每个不同部分。但是我个人认为这是“好”的复杂性,因为每个独特的数据都有自己独特的依赖代码片段。允许模块化和一元化的功能封装。

答案 2 :(得分:1)

我认为在大多数情况下,解决方案#2要好得多。我会放弃" isallowed"在该解决方案中标记并仅将权限的用户权限插入到权限表中。