Ale*_*lex 8 database-design access-control
我有记录(联系人,地址等),以下任何一个都可以访问(包括组合,例如2组和4个人):
实现这一目标的数据库结构是什么?基本上在我的应用程序中,我需要能够限制用户XYZ何时登录,以便仅向他显示作为个人,组成员"可见"的记录,或者因为它们对每个人都可见.
基本上我正在寻找一种有效存储这些关系的方法.它应该很快,因为每当有人看到任何东西时我都会关注这些关系.
我真的很感激有关如何做到这一点的一些提示!
谢谢!
编辑:我正在使用SQL Server 2008网络版.
这正在朝着 RBAC(基于角色的访问控制)的方向发展。您可能还想知道是否使用 LBAC - 基于标签的访问控制。而且,根据您的 DBMS,可能还有其他方法来实现它(例如,考虑 Oracle VPD - 虚拟专用数据库)。所有这些要么是特定于 DBMS 的,要么是非常特定于 DBMS 的——针对不同 DBMS 的不同解决方案。
您似乎在谈论行级别的控制。也就是说,联系人表中的一行可能可供所有人访问,而另一行仅可供一组部门访问,另一行仅可供一组人访问,依此类推。
请记住,关系 DBMS 与集合配合使用效果最佳。单个组是具有一个成员组的一组组;单个用户是一组包含一个成员用户的组。这意味着我们需要处理的案件更少。
如果您想在标准 SQL 中实现它,那么我认为您将需要使用利用与控制表等的联接的视图组合。这种系统的困难部分是填充控制表并限制管理用户(实际上,约束管理员始终是困难的部分之一)。
基本技术是:
现在,关于连接列和控制表......
有人必须指定哪些权限适用于表中新插入的行 - 提供的默认访问权限是什么。并且必须有人定义如何覆盖默认访问权限。两者都可能很混乱。
构造控制表的方法有多种:
一种机制依赖于基表中的每一行都具有唯一的 ID(可能是自动生成的 ID 或只是主键的值)。然后,控制表包含该唯一 ID 的副本,并定义哪些用户或组可以访问它。这意味着控制表中的给定行可能有多个条目,每个条目对应一个可以访问该行的用户或组。在此方案中,控制表有一个引用基表的外键。
另一种机制将 ID 号嵌入到基表中,该 ID 号是控制表的外键。它基本上标识了一组权限,基表中的引用意味着该行具有与访问控制 ID 关联的访问权限。控制表背后的结构可能是 ID 0 对任何人都没有访问权限(通过视图),ID 1 对每个人都有访问权限,其他值指定用户和组的组合 - 每个不同的组合都有不同的 ID。这样,控制表集中可能有多个表 - 我们还讨论为每个受保护的表提供一组这些控制表。
显然,对控制表的访问受到严格限制,但对于管理谁可以看到什么也至关重要。
这两者都是管理噩梦 - 这就是为什么您最终可能会得到 DBMS 提供的访问控制机制而不是通用 SQL 解决方案。