常见的访问控制模型和表结构
RBAC(Role-Based Access Control)
在一所大学的信息系统中,根据用户的角色(如学生、教授、行政人员)分配不同的访问权限。教授可以访问和修改课程成绩,学生只能查看成绩和课程资料,行政人员可以访问学生记录和财务信息。
表结构
表名 | 字段 | 说明 |
---|---|---|
Users | UserID, UserName | 用户表 |
Roles | RoleID, RoleName | 角色表 |
Permissions | PermissionID, PermissionDescription | 权限表 |
UserRole | UserID, RoleID | 用户角色关系表 |
RolePermission | RoleID, PermissionID | 角色权限关系表 |
关系说明
- 用户与角色是多对多关系,通过 UserRole 表联系
- 角色与权限是多对多关系,通过 RolePermission 表联系
查询语句: 查询一个用户的所有权限
SELECT PermissionDescription FROM Permissions
JOIN RolePermission ON Permissions.PermissionID = RolePermission.PermissionID
JOIN UserRole ON RolePermission.RoleID = UserRole.RoleID
WHERE UserRole.UserID = [用户ID];
ABAC(Attribute-Based Access Control)
在一个智能家居系统中,系统根据时间、地点以及设备状态控制家居设备的访问例如,只有家庭成员在家时,才能通过手机应用控制家中的安全系统
表结构
表名 | 字段 | 说明 |
---|---|---|
Devices | DeviceID, DeviceType | 设备表 |
Policies | PolicyID, PolicyRule, Effect | 策略表,定义访问条件和效果 |
Attributes | AttributeID, DeviceID, AttributeName, AttributeValue | 设备属性表 |
关系说明
- 设备具有多个属性,属性表通过 DeviceID 与设备表关联
- 策略定义了基于属性的访问规则
查询语句: 检查是否允许访问设备
SELECT Effect FROM Policies
WHERE PolicyRule = 'DeviceType = "SecuritySystem" AND AttributeName = "Status" AND AttributeValue = "AtHome"'
AND DeviceID = [设备ID];
ACL(Access Control List)
在公司的文件共享服务器上,管理员为不同的文件夹设置 ACL,规定哪些部门或个人有读取或编辑文件的权限,以此来保护敏感数据不被未授权访问
表结构
表名 | 字段 | 说明 |
---|---|---|
Files | FileID, FileName | 文件表 |
Users | UserID, UserName | 用户表 |
FilePermissions | FileID, UserID, PermissionType | 文件权限表 |
关系说明
- 文件与用户之间的权限关系通过 FilePermissions 表定义
查询语句: 查询某个用户对文件的权限
SELECT FileName, PermissionType FROM Files
JOIN FilePermissions ON Files.FileID = FilePermissions.FileID
WHERE FilePermissions.UserID = [用户ID];
DAC(Discretionary Access Control)
在操作系统中,用户可以设置个人文件的权限,决定哪些其他用户可以访问或修改这些文件,如在家庭电脑上父母可以访问孩子的学习资料文件夹
表结构
表名 | 字段 | 说明 |
---|---|---|
Users | UserID, UserName | 用户表 |
Files | FileID, FileName, OwnerID | 文件表,包含所有者 ID |
FilePermissions | PermissionID, FileID, UserID, PermissionType | 文件权限表,定义用户对文件的权限 |
关系说明
- 文件有一个所有者,所有者通过 OwnerID 与用户表关联
- 用户对文件的访问权限通过 FilePermissions 表定义,权限类型包括读取、写入等
查询语句: 查询用户对文件的权限
SELECT FileName, PermissionType FROM Files
JOIN FilePermissions ON Files.FileID = FilePermissions.FileID
WHERE FilePermissions.UserID = [用户ID];
MAC(Mandatory Access Control)
在军事或政府通信系统中,根据信息的安全级别(如机密、秘密、公开)决定谁可以访问这些信息,确保只有具有相应安全级别的人员才能访问
表结构
表名 | 字段 | 说明 |
---|---|---|
Users | UserID, UserName, ClearanceLevel | 用户表,包含安全级别 |
Documents | DocumentID, SecurityLevel | 文档表,包含文档安全级别 |
AccessRules | RuleID, MinClearanceLevel, DocumentID | 访问规则表 |
关系说明
- 文档具有特定的安全级别,用户访问需满足最低安全级别要求
- 访问规则定义了文档的最低清除级别
查询语句: 查询用户可以访问的所有文档
SELECT DocumentID FROM Documents
JOIN AccessRules ON Documents.DocumentID = AccessRules.DocumentID
WHERE AccessRules.MinClearanceLevel <= (SELECT ClearanceLevel FROM Users WHERE UserID = [用户ID]);
PBAC(Policy-Based Access Control)
在健康管理应用中,可以设置策略允许医生访问他们患者的医疗记录,但禁止访问其他患者的信息,除非在紧急情况下得到授权
表结构
表名 | 字段 | 说明 |
---|---|---|
Users | UserID, UserName | 用户表 |
Records | RecordID, PatientID | 医疗记录表 |
AccessPolicies | PolicyID, UserID, RecordID, Conditions, Effect | 访问策略表 |
关系说明
- 访问策略表定义了在特定条件下用户可以访问的记录
- 策略可能包含条件,如“只有紧急情况”或“只有是主治医生”
查询语句: 查询医生可以访问的医疗记录
SELECT RecordID FROM Records
JOIN AccessPolicies ON Records.RecordID = AccessPolicies.RecordID
WHERE AccessPolicies.UserID = [用户ID] AND Conditions = 'Emergency';
RB-RBAC (Rule-Based Role-Based Access Control)
在金融机构中,高级管理人员可以查看所有财务报告,而普通员工只能在完成相关培训并被授权后,才能访问特定的财务数据
表结构
表名 | 字段 | 说明 |
---|---|---|
Users | UserID, UserName | 用户表 |
Roles | RoleID, RoleName | 角色表 |
Rules | RuleID, RoleID, RuleCondition | 规则表,包含条件 |
RoleRules | RoleID, RuleID | 角色规则关联表 |
Permissions | PermissionID, Description | 权限表 |
RolePermissions | RoleID, PermissionID | 角色权限关联表 |
关系说明
- 角色通过 RoleRules 与规则关联
- 角色与权限通过 RolePermissions 表关联
查询语句: 查询用户角色的权限
SELECT Description FROM Permissions
JOIN RolePermissions ON Permissions.PermissionID = RolePermissions.PermissionID
JOIN Roles ON RolePermissions.RoleID = Roles.RoleID
JOIN Users ON Roles.RoleID = Users.UserID
WHERE Users.UserID = [用户ID];
SCAC(Social Context-Aware Access Control)
在社交媒体平台上,用户可以设置隐私控制,允许只有特定的好友列表(如亲密好友)可以查看其个人照片或动态
表结构
表名 | 字段 | 说明 |
---|---|---|
Users | UserID, UserName | 用户表 |
Posts | PostID, Content, PrivacySetting | 帖子表,包含隐私设置 |
FriendLists | ListID, UserID, FriendID | 好友列表表 |
ListPermissions | ListID, PostID, PermissionType | 列表权限表 |
关系说明
- 帖子的可见性由 PrivacySetting 定义,与 FriendLists 表中的列表匹配
- 用户通过 FriendLists 定义自己的社交圈
查询语句: 查询用户可以看到的帖子
SELECT PostID FROM Posts
WHERE PrivacySetting = 'FriendsOnly' AND PostID IN (
SELECT PostID FROM ListPermissions
JOIN FriendLists ON ListPermissions.ListID = FriendLists.ListID
WHERE FriendLists.FriendID = [用户ID]
);
结合 RBAC 和 ABAC
在许多企业级应用中,RBAC(角色基于访问控制)通常与ABAC(基于属性的访问控制)结合使用来提供更灵活的访问控制策略例如,一个系统可能基于用户的角色(如经理或员工)授予权限,同时根据其他属性(如地理位置、访问时间或设备安全状态)对权限进行细粒度的调整这种组合允许系统在维持角色管理的简便性的同时,增加基于环境或上下文的安全策略
结合 DAC 和 MAC
在需要极高安全级别的环境中,DAC(自主访问控制)和MAC(强制访问控制)可以同时使用例如,在政府或军事系统中,文件的创建者可以设置自己的访问控制列表(DAC 模式),同时系统还会强制执行根据文件分类和用户安全级别的访问控制(MAC 模式)这样,即使文件的创建者给予了访问权限,只有符合安全级别要求的用户才能实际访问文件
结合 PBAC 和 RBAC
PBAC(基于策略的访问控制)经常与RBAC结合使用,尤其是在复杂的业务逻辑需要映射到访问控制策略时在这种情况下,角色定义基本的访问权限,而策略则可以根据业务规则进一步调整这些权限例如,在医疗信息系统中,所有医生可能基于他们的角色拥有访问病人信息的权限,但基于政策,只有主治医生才能访问敏感的治疗历史,且仅在病人住院期间