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

Posted

技术标签:

【中文标题】如何为访问控制和跟踪创建数据库设计?【英文标题】:how to create a Database design for access control and tracking? 【发布时间】:2012-08-16 11:17:15 【问题描述】:

计划创建访问控制系统。牢记教育机构,我创建了外围表,例如大门,区域,建筑物,级别,部分,房间(每个表都具有外键关系).....现在我希望创建部门表和员工表,但是如何我可以将部门定义为特定的边界吗?因为作为用户,部门可以是一个房间或整个建筑物。我猜将所有外围表外键都放入部门表中不是一个合适的方法。如果用户通过不同的点到达检查点,我也希望访问在路径中,不想授权。我是数据库设计的新手,可能有一种我没有想到的简单方法。请帮助您提供最佳设计理念来创建上述内容。 提前谢谢..

【问题讨论】:

【参考方案1】:

由于创建安全位置的层次结构的目的是管理谁应该有权访问哪些位置,因此您最好使用一个内卷外键 (自引用关系)。

考虑以下 ERD:

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

使用内卷外键意味着必须处理分层数据,这在 SQL 中可能是个麻烦事。为了简化层次结构导航,我建议使用 visit numbers,正如我在对 this question 的回答中详细描述的那样。

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

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

【讨论】:

非常感谢@joel。访问编号是一种很好的分组方式。

以上是关于如何为访问控制和跟踪创建数据库设计?的主要内容,如果未能解决你的问题,请参考以下文章

如何为学生、教师、超级管理员等用户身份验证设计数据库

我应该如何为 Django 设计数据库?

如何为带有确定/取消按钮的数据绑定 WPF 对话框设计支持数据类型?

如何为二叉树设计数据库? [复制]

如何为谷歌表单等字段设计数据库?

产品框架初步设计后,如何为每个部件定义一个清晰的职责范畴?