关于访问控制的一些实践
- 概述
- 一、基于角色的访问控制(RBAC)
- 二、访问控制列表(ACL)
- 三、基于属性的访问控制(ABAC)
- 四、最小权限原则
- 五、责任分离原则
- 细说RBAC
- RBAC详细说明及例子
- 一、RBAC概述
- 二、RBAC的核心概念
- 三、RBAC的优势
- 四、RBAC的级别
- 五、RBAC的完整例子
- 基于RBAC的表设计
- 1. 用户表(Users)
- 2. 角色表(Roles)
- 3. 权限表(Permissions/Menus)
- 4. 用户角色关联表(User_Roles)
- 5. 角色权限关联表(Role_Permissions)
- 示例说明
- 细说ACL
- 一、ACL介绍
- 二、ACL的主要作用
- 三、ACL的分类
- 四、ACL的工作原理
- 五、ACL配置示例
概述
角色权限控制是确保系统安全性和数据完整性的关键机制。以下是几种常见的角色权限控制策略,并分别举例说明:
一、基于角色的访问控制(RBAC)
RBAC是目前最为流行的权限控制策略之一。它将权限与角色相关联,然后将角色分配给用户。这样,用户的权限管理就转化为对角色的管理,从而简化了权限管理的复杂性。
举例:
在一个企业信息管理系统中,可以定义不同的角色,如管理员、编辑者、查看者等。管理员角色拥有对系统的完全访问权限,可以创建、修改和删除用户、角色和权限。编辑者角色则只能编辑系统中的数据,但不能删除或创建新的用户或角色。查看者角色只能查看系统中的数据,不能进行任何修改或删除操作。
二、访问控制列表(ACL)
ACL是一种更细粒度的权限控制策略。它直接定义了用户对具体资源的操作权限,可以针对每个资源和操作进行细粒度的控制。
举例:
在一个文件共享系统中,可以为每个文件或文件夹设置访问控制列表。例如,某个文件夹的ACL可以规定只有特定用户或角色才能访问、修改或删除该文件夹中的文件。这样,即使某个用户拥有对其他文件夹的完全访问权限,也无法访问或修改这个受保护的文件夹。
三、基于属性的访问控制(ABAC)
ABAC是一种更加灵活的权限控制策略。它根据用户的属性(如职位、部门、等级等)和资源的属性(如类型、敏感度等)来决定用户的访问权限。
举例:
在一个医疗信息管理系统中,可以根据医生的职位和科室来设置其访问权限。例如,只有心血管科的医生才能访问心血管科患者的病历信息,而其他科室的医生则无法访问。同时,高级医生可能拥有更多的访问权限,如查看患者的详细检查结果和诊断报告,而初级医生则只能查看基本的病历信息。
四、最小权限原则
最小权限原则要求每个用户或角色只拥有完成其工作所必需的最小权限集合。这样可以减少权限滥用和误操作的风险,提高系统的安全性。
举例:
在一个电子商务网站中,可以为用户设置不同的角色和权限。例如,客服人员只能查看和修改用户的订单信息,但不能访问用户的支付信息或进行退款操作。这样,即使客服人员误操作或恶意攻击,也不会对用户的支付信息造成泄露或损失。
五、责任分离原则
责任分离原则要求系统中的任务应该分散到不同的角色中,以防止权力过于集中。通过责任分离,可以确保系统中的关键操作由多个角色共同完成,从而避免单个角色拥有过多的权力。
举例:
在一个财务管理系统中,可以将财务审批流程分解为多个步骤,每个步骤由不同的角色来完成。例如,采购部门可以提交采购申请,财务部门可以审核采购申请并支付款项,而审计部门则可以监督整个审批流程并检查是否存在违规行为。这样,即使某个角色存在不当行为,也无法单独完成整个审批流程,从而保证了系统的安全性和可靠性。
综上所述,角色权限控制的策略有多种类型,每种策略都有其独特的优点和适用场景。在选择角色权限控制策略时,需要根据系统的业务需求、安全要求和管理复杂性进行综合考虑和权衡。
细说RBAC
RBAC详细说明及例子
一、RBAC概述
基于角色的访问控制(Role-Based Access Control,简称RBAC)是一种访问控制机制,通过为用户分配角色来管理权限。RBAC模型使得权限的管理更加简便高效,尤其适用于复杂的系统架构。RBAC的核心思想是“用户-角色-权限”的授权模型,即一个用户拥有若干角色,一个角色拥有若干的权限。
二、RBAC的核心概念
- 用户(User):请求访问系统资源的实体,可以是人、程序或设备。
- 角色(Role):一组相关权限的集合,用于执行特定的工作职能。角色是权限的载体,将权限赋予角色,再将角色分配给用户。
- 权限(Permission):允许或禁止用户执行特定操作的规则。
在RBAC中,用户与角色之间、角色与权限之间一般是多对多的关系。
三、RBAC的优势
- 模块化:RBAC将权限管理模块化,简化了权限管理的复杂性。
- 易维护性:通过管理角色和权限的关系,而不必直接管理用户与权限的关系,使得权限管理更加易于维护。
- 安全性:RBAC提供了更细粒度的权限控制,提高了系统的安全性。
四、RBAC的级别
RBAC根据权限的复杂程度,可分为不同的级别,如RBAC0、RBAC1、RBAC2、RBAC3和RBAC4。其中,RBAC0是基础,RBAC1、RBAC2、RBAC3、RBAC4都是以RBAC0为基础的升级。
- RBAC0:RBAC模型中最基本的模型,用户与角色可为多对一或多对多的关系,当一个用户的角色为多对多时,当前用户的权限是多个角色的并集。
- RBAC1:在RBAC0的基础上,加入了角色继承的概念。一个角色可以分为多个级别,高级别的角色可继承低级别角色的权限,并可额外赋予权限。
- RBAC2:在RBAC0的基础上,加入了角色限制的概念。当用户可以存在多个角色时,多个角色之间存在限制条件,如静态职责分离(SSD)和动态职责分离(DSD)。
- RBAC3:既有角色分层,也包括可以增加各种限制。
- RBAC4:RBAC2和RBAC3的合集。
五、RBAC的完整例子
以下是一个基于RBAC的企业管理系统的例子:
-
系统背景:
- 企业需要管理员工信息、客户信息、订单信息等。
- 系统中存在多种角色,如管理员、销售经理、财务经理、市场经理等。
-
角色定义:
- 管理员:拥有对系统的完全访问权限,可以创建、修改和删除用户、角色和权限。
- 销售经理:可以访问和管理销售相关的信息,如客户信息、订单信息等。
- 财务经理:可以访问和管理财务相关的信息,如财务报表、付款信息等。
- 市场经理:可以访问和管理市场相关的信息,如市场调研、广告活动等。
-
权限定义:
- 页面权限:定义哪些角色可以访问哪些页面。例如,销售经理可以访问销售相关的页面,而财务经理则不能。
- 操作权限:定义哪些角色可以对哪些数据进行操作。例如,销售经理可以新增、删除和修改客户信息和订单信息,而市场经理则只能查看这些信息。
- 数据权限:定义哪些角色可以查看哪些范围的数据。例如,销售经理只能查看自己负责的销售区域的数据,而管理员则可以查看整个公司的数据。
-
角色分配:
- 将定义好的角色分配给用户。例如,将销售经理角色分配给负责销售的员工,将财务经理角色分配给负责财务的员工。
-
权限管理:
- 通过管理角色和权限的关系来管理用户的权限。例如,如果需要给某个用户增加新的权限,只需将该用户添加到相应的角色中即可。
-
实际应用:
- 当用户登录系统时,系统会根据用户的角色来显示相应的页面和操作按钮。
- 用户只能访问和操作自己拥有权限的页面和数据。
通过RBAC模型,企业可以更加灵活地管理员工的权限,提高系统的安全性和管理效率。同时,RBAC模型也使得权限管理更加易于理解和维护。
基于RBAC的表设计
基于RBAC(Role-Based Access Control,基于角色的访问控制)的表设计通常涉及以下几张核心表:用户表、角色表、权限表(有时也称菜单表或功能表)、用户角色关联表和角色权限关联表。以下是一个详细的表设计示例:
1. 用户表(Users)
用于存储用户的基本信息。
字段名称 | 字段类型 | 字段含义 |
---|---|---|
USER_ID | bigint(20) | 用户ID,主键,自动递增 |
USERNAME | varchar(50) | 用户名,唯一 |
PASSWORD | varchar(128) | 密码 |
varchar(128) | 电子邮件 | |
MOBILE | varchar(20) | 联系电话 |
STATUS | char(1) | 状态(0锁定,1有效) |
CREATE_TIME | datetime | 创建时间 |
MODIFY_TIME | datetime | 修改时间 |
LAST_LOGIN_TIME | datetime | 最近登录时间 |
SSEX | char(1) | 性别(0男,1女,2保密) |
AVATAR | varchar(100) | 头像 |
DESCRIPTION | varchar(100) | 描述 |
2. 角色表(Roles)
用于存储角色的基本信息。
字段名称 | 字段类型 | 字段含义 |
---|---|---|
ROLE_ID | bigint(20) | 角色ID,主键,自动递增 |
ROLE_NAME | varchar(100) | 角色名称 |
DESCRIPTION | varchar(255) | 角色描述 |
CREATE_TIME | datetime | 创建时间 |
MODIFY_TIME | datetime | 修改时间 |
3. 权限表(Permissions/Menus)
用于存储权限(或菜单、功能)的基本信息。
字段名称 | 字段类型 | 字段含义 |
---|---|---|
PERMISSION_ID | bigint(20) | 权限ID,主键,自动递增 |
NAME | varchar(100) | 权限名称 |
DESCRIPTION | varchar(255) | 权限描述 |
CREATE_TIME | datetime | 创建时间 |
MODIFY_TIME | datetime | 修改时间 |
4. 用户角色关联表(User_Roles)
用于存储用户和角色之间的多对多关系。
字段名称 | 字段类型 | 字段含义 |
---|---|---|
USER_ID | bigint(20) | 用户ID,外键,关联用户表 |
ROLE_ID | bigint(20) | 角色ID,外键,关联角色表 |
CREATE_TIME | datetime | 创建时间 |
MODIFY_TIME | datetime | 修改时间 |
PRIMARY KEY | (USER_ID, ROLE_ID) | 联合主键 |
FOREIGN KEY | (USER_ID) REFERENCES Users(USER_ID) ON DELETE CASCADE | 外键约束 |
FOREIGN KEY | (ROLE_ID) REFERENCES Roles(ROLE_ID) ON DELETE CASCADE | 外键约束 |
5. 角色权限关联表(Role_Permissions)
用于存储角色和权限之间的多对多关系。
字段名称 | 字段类型 | 字段含义 |
---|---|---|
ROLE_ID | bigint(20) | 角色ID,外键,关联角色表 |
PERMISSION_ID | bigint(20) | 权限ID,外键,关联权限表 |
CREATE_TIME | datetime | 创建时间 |
MODIFY_TIME | datetime | 修改时间 |
PRIMARY KEY | (ROLE_ID, PERMISSION_ID) | 联合主键 |
FOREIGN KEY | (ROLE_ID) REFERENCES Roles(ROLE_ID) ON DELETE CASCADE | 外键约束 |
FOREIGN KEY | (PERMISSION_ID) REFERENCES Permissions(PERMISSION_ID) ON DELETE CASCADE | 外键约束 |
示例说明
- 用户表:存储系统中所有用户的基本信息,如用户名、密码、电子邮件等。
- 角色表:存储系统中所有角色的基本信息,如角色名称、描述等。
- 权限表:存储系统中所有权限(或菜单、功能)的基本信息,如权限名称、描述等。
- 用户角色关联表:用于建立用户和角色之间的多对多关系,即一个用户可以有多个角色,一个角色也可以被多个用户所拥有。
- 角色权限关联表:用于建立角色和权限之间的多对多关系,即一个角色可以有多个权限,一个权限也可以被多个角色所拥有。
通过这样的表设计,可以实现RBAC模型中的“用户-角色-权限”授权模型,从而灵活地管理用户的权限。在实际应用中,可以根据具体需求对表结构和字段进行调整和扩展。
细说ACL
ACL(Access Control List,访问控制列表)是网络当中策略的一种,以下是对ACL的详细介绍及一个详细的例子:
一、ACL介绍
ACL是由一系列permit(允许)或deny(拒绝)语句组成的、有序的规则集合,它通过匹配报文的相关字段实现对报文的分类。ACL本身只是一组规则,只能区分某一类报文,换句话说,ACL更像是一个“工具”,当希望通过ACL来实现针对特定流量的过滤时,就需要在适当的应用中调用已经定义好的ACL。
ACL能够识别一个IP数据包中的源IP地址、目的IP地址、协议类型、源目的端口等元素,从而能够针对上述元素进行报文的匹配。ACL使用包过滤技术,在路由器或三层交换机上读取数据包的三层和四层包头信息(如源地址、目的地址、源端口、目的端口等),并根据预定义的规则进行过滤。
二、ACL的主要作用
ACL能够在多种场景下被调用,是一个使用非常广泛的工具,它的主要作用包括:
- 被流量策略调用,用于过滤流量(可基于源、目的IP地址、协议类型、端口号等元素);
- 在route-policy中被调用,用于匹配特定的路由前缀,从而执行路由策略;
- 在VPN中调用,用于匹配感兴趣数据流;
- 在防火墙的策略部署中调用,用于匹配流量。
三、ACL的分类
按照功能不同,ACL存在多种类型,其中最主要的两种是基本ACL和高级ACL:
- 基本ACL:只能够针对IP报文的源IP地址等信息进行流量匹配。例如,可以使用基本ACL来拒绝源IP地址段为192.168.1.0/24的报文。如果在交换机上使用数字命名的方式创建一个基本ACL,数字的范围为2000~2999。
- 高级ACL:能够针对IP报文的源IP地址、目的IP地址、协议类型、TCP源或目的端口、UDP源或目的端口等元素进行流量匹配。因此它的功能相较基础ACL要更丰富一些。如果在交换机上使用数字命名的方式创建一个高级ACL,数字的范围为3000~3999。
四、ACL的工作原理
ACL规则从上到下依次匹配,一旦匹配成功,则不再继续匹配后续规则。如果数据包没有匹配到任何规则,则根据ACL的默认行为(通常是拒绝)来处理数据包。以下是ACL处理数据包的具体流程:
- 数据包捕获:数据包到达接口时,设备首先捕获该数据包。
- 信息提取:设备从数据包中提取出关键信息,如源地址、目的地址、端口号等。
- 规则匹配:根据提取的信息,在ACL中查找匹配的规则。
- 决策执行:根据匹配到的规则,决定数据包是被允许通过还是被拒绝。
- 结果处理:如果数据包被允许通过,则继续传输;如果数据包被拒绝,则可能被丢弃或进行其他处理。
五、ACL配置示例
假设有两个VLAN(VLAN10和VLAN20),它们通过一台三层交换机或路由器进行互连。现在需要限制VLAN10中的主机不能与VLAN20中的主机互访,但可以正常访问外网(假设外网连接在VLAN10的网关上)。以下是基于华为设备的ACL配置示例:
-
配置VLAN及接口
- [Switch]vlan batch 10 20
- [Switch]interface Vlanif 10
- [Switch-Vlanif10]ip address 192.168.1.1 255.255.255.0
- [Switch-Vlanif10]quit
- [Switch]interface Vlanif 20
- [Switch-Vlanif20]ip address 192.168.2.1 255.255.255.0
- [Switch-Vlanif20]quit
-
配置VLAN间路由(如果交换机支持)
- [Switch]ip route-static 192.168.2.0 255.255.255.0 192.168.1.1
注意:在真实环境中,如果交换机不支持三层路由功能,则需要通过路由器或其他三层设备来实现VLAN间路由。
-
在交换机上配置ACL(拒绝来自VLAN10到VLAN20的流量)
直接在交换机上可能无法直接按VLAN进行ACL匹配,这里假设有方法可以间接实现,如通过接口地址或更复杂的路由策略。更常见的做法是在路由器上配置ACL。
假设在路由器上配置ACL,具体步骤如下:
* [Router]acl 3000+ [Router-acl-adv-3000]rule deny ip source 192.168.1.0 0.0.0.255 destination 192.168.2.0 0.0.0.255+ [Router-acl-adv-3000]rule permit ip source any destination any
* [Router]interface GigabitEthernet 0/0/1(假设为连接VLAN10和VLAN20的接口)+ [Router-GigabitEthernet0/0/1]traffic-filter inbound acl 3000(将ACL3000应用到接口的入站方向)
通过以上配置,即可实现VLAN10中的主机不能与VLAN20中的主机互访,但可以正常访问外网的需求。
综上所述,ACL是一种强大的网络流量控制工具,通过灵活配置ACL规则,可以实现对网络流量的精细控制和管理。