我有一个带有用户表和角色表的数据库模型。我想控制对多达 10 个不同元素的访问(权限)。可以将访问权限授予角色或单个用户。下面是用户、角色和项目的表定义:
CREATE TABLE users
(
id serial NOT NULL PRIMARY KEY,
username character varying UNIQUE,
password character varying,
first_name character varying,
last_name character varying,
...
);
CREATE TABLE roles
(
id serial NOT NULL PRIMARY KEY,
name character varying NOT NULL,
description character varying,
...
);
CREATE TABLE element_1
(
id serial NOT NULL PRIMARY KEY,
name character varying NOT NULL,
description character varying,
...
);
...
现在我有两种不同的方式来设计权利。一个带有权限类型列的表或 10 个权限表 - 每个我想要控制访问的元素一个。
一个权限表与每个元素一个权限表的优缺点是什么?- 或者是更合适的方式来做到这一点?
首先,您计划实施哪种类型的安全模型?基于角色的访问控制 (RBAC) 还是自主访问控制 (DAC)?
见源
1)在 RBAC 中:您需要 ElementType 表来为角色分配权限(用户被分配给角色)。RBAC 定义:“这个角色/用户可以做什么”。管理员为角色分配权限,为角色分配权限,将用户分配给角色以访问资源。2) 在 DAC 中:用户和角色通过访问控制列表(所有权)对元素拥有权限。DAC 定义:“谁有权访问我的数据”。用户(所有者)授予拥有资源的权限。
我建议这个数据模型的任何方式:
(一对一关系)
1)RBAC(多对多关系)
2)DAC(多对多关系)
每个元素都有一个权限表,一旦您添加一个元素,您将需要添加一个表。这将增加应用程序维护。
将所有内容放在一个表中的缺点是您可能会遇到扩展问题,但可以使用分区、物化视图和/或虚拟列来缓解这些问题。可能没有必要采取此类措施。
至于表设计,如果这是在 Oracle 上,我可能会建议这样的事情:
包代码可以根据需要使用 UserRoleID 序列来填充 Users 表中的 Id 和 Roles 表中的 Id。然后,权限表可以将元素分配给角色,这些角色又分配给用户和/或将元素直接分配给用户。