如何为访问控制和跟踪创建数据库设计?

时间:2012-08-16 11:17:15

标签: database database-design relational-database database-schema

计划创建访问控制系统。牢记一个教育机构我创建了周边表,如主门,区域,建筑,水平,部分,房间(每个表与外键关系).....现在我想创建部门表和员工表,但如何我可以将部门定义到特定的边界。因为作为用户,部门可以是房间或整个建筑物。将所有外围表外键放入部门表中并不是一种恰当的方式。如果用户通过不同的点来到Checkpoint,我也希望访问权限在路径中,不希望授权。我是数据库设计的新手,可能有一个我没想到的简单方法..请帮助一个最佳的设计理念来创建上述。 提前谢谢..

1 个答案:

答案 0 :(得分:2)

由于创建安全位置层次结构的目的是管理谁应该有权访问哪些位置,因此最好使用复制的外键在单个表中管理所有这些位置(自我参照关系)。

考虑以下ERD:

ERD

这里有安全区域,可以包含其他安全区域。人们被授予访问适当区域的权限。访问较低级别区域意味着可以访问包含较低级别区域的所有区域。

使用复制的外键意味着必须处理分层数据,这可能是SQL中的麻烦。为了简化层次结构导航,我建议使用访问数字,正如我在this question的答案中详细描述的那样。

任何类型的访问控制系统都要考虑的一件事是最大限度地减少安全管理员要维护的数据量。许多人将拥有相同的访问规则。因此,您可能希望扩展上述ERD以使用基于角色的安全性,其中而不是个人被授予对区域的访问权限个人被授予访问群组的权限。有关基于角色的安全性的更多信息,请参阅我对this question on dba.se的回答。如果它可能有所帮助,您可以使用基于角色和个人访问规则的混合。

另一个需要考虑的选择是您的ACCESS表可能包含 allow disallow 标志。这些可用于允许访问更大的区域,同时特别禁止访问包含在其中的较小区域。这种方法可以减少每个人需要管理的数据量。