很多企业SaaS系统刚开始设计权限时,最容易采用一种非常简单的方式:管理员拥有全部权限,普通用户只能使用部分功能。用户数量较少、业务比较简单的时候,这种设计看起来没有问题。但系统一旦进入企业环境,组织结构、部门、项目、客户、区域、数据类型和审批流程全部复杂起来,“管理员”和“普通用户”这两个身份很快就无法覆盖实际需求。
企业权限管理解决的也从来不只是“谁能登录系统”,而是一个用户在什么组织、什么业务场景下,可以访问哪些数据,可以执行哪些操作,可以操作到什么程度,以及这些操作是否需要审批和留下审计记录。
这几个问题如果没有在系统架构阶段设计清楚,后期再往里面不断添加角色,很容易形成一个庞大而混乱的权限系统。
角色并不等于权限
企业SaaS首先需要把“用户”“角色”和“权限”区分开。
用户是具体的人或者账号,角色则代表这个人在组织中的职责。例如销售、销售经理、财务人员、财务主管、客服、项目负责人等。权限才是系统真正判断的对象,例如查看客户、创建客户、修改客户、删除客户、导出客户数据、审批订单等。
因此,一个用户可以拥有多个角色,一个角色也可以包含多个权限。
例如一个企业员工可能同时属于“销售经理”和“项目负责人”。如果系统把所有权限直接写死在用户身上,人员一多,权限维护就会变得非常困难。更合理的做法,是通过角色组织权限,再根据实际业务情况增加数据范围、资源归属和特殊限制。
这也是RBAC,也就是基于角色的访问控制,最适合解决的问题。
但RBAC并不能解决所有问题。
同一个角色,不一定能看到同样的数据
这是企业SaaS最容易出现权限漏洞的地方。
假设两个员工都是“销售人员”,他们拥有相同的功能权限,但甲负责加拿大西部客户,乙负责安大略省客户。两个人都可以查看客户资料,并不意味着甲可以看到乙负责的全部客户。
这时系统需要控制的已经不是“能不能查看客户”,而是“可以查看哪些客户”。
因此,数据权限通常需要进一步按照组织、部门、区域、项目、客户负责人或者资源归属进行限制。
例如销售人员只能查看自己负责的客户,销售经理可以查看本部门客户,区域经理可以查看自己区域的数据,而总部管理人员可能拥有跨区域的数据访问权限。
这种设计与单纯的角色权限是两层不同的问题。
更复杂的系统还可能需要限制字段。例如员工可以看到客户姓名和联系方式,但不能看到完整的身份证号码、银行账户或者其他高度敏感字段。这样就涉及字段级的数据访问控制。
管理员也不能天然拥有所有权限
“管理员=什么都能做”是很多早期系统留下来的设计习惯,但在企业环境中,这种模式本身就可能制造风险。
企业内部通常需要区分平台超级管理员、企业管理员、部门管理员和业务管理员。
例如SaaS平台运营方的超级管理员负责租户管理和平台配置,但不应该因为拥有平台管理权限,就可以随意查看每一家企业的业务数据。
一个租户内部的企业管理员可以管理本公司的用户、角色和业务设置,但也未必应该直接修改财务审批结果。
财务管理员能够处理财务数据,也不代表他应该拥有用户权限管理能力。
这种职责分离非常重要,因为高权限账号一旦被盗,或者内部人员滥用权限,影响范围可能远远超过普通用户。
所以成熟系统往往会把“管理系统的权限”和“访问业务数据的权限”分开。
操作权限还需要考虑业务条件
很多权限不是简单的允许或者拒绝。
例如员工可以提交报销单,部门经理可以审批一定金额以内的报销,超过一定金额则需要更高级别审批。
这里的权限实际上包含了金额、组织、流程状态等业务条件。
同一个财务人员,在报销单处于“待审核”状态时可能拥有审批权限,审批完成以后则只能查看,不能再修改。
一个项目经理可以修改自己负责项目的数据,却不能修改已经进入结算阶段的项目。
因此,企业SaaS的权限系统不能只判断“用户有没有某个权限”,还需要结合资源状态、数据属性和业务规则进行判断。
这也是ABAC,也就是基于属性的访问控制,在复杂企业系统中有价值的地方。
不过,ABAC并不是RBAC的简单替代品。现实系统通常会把两者结合起来:角色负责提供基础权限,组织、资源、地域、时间、状态等属性再对权限进行进一步限制。
权限和审批不是一回事
另一个容易混淆的问题是把权限系统和审批系统完全混在一起。
例如一个员工有没有资格申请采购,是权限问题;申请采购以后是否需要经理批准,是工作流问题;经理是否有资格审批这笔采购,又属于权限问题。
因此,成熟的SaaS系统通常会让权限控制和工作流系统协同工作,而不是让权限系统承担全部业务流程。
权限系统决定用户是否具备执行某类操作的资格,工作流系统决定操作按照什么流程进行,以及在什么条件下进入下一阶段。
这样设计以后,企业才能实现比较复杂的职责分离,例如申请人不能审批自己的申请,部门经理只能审批本部门的事项,财务人员负责复核金额,但不能修改业务人员提交的原始数据。
临时权限同样重要
企业里的权限并不一定是永久的。
项目制企业经常会出现临时加入项目的员工。一个工程师可能需要访问某个项目的数据三个月,项目结束以后权限应该自动失效。
类似情况还包括临时代理、紧急维护、夜间值班以及外部顾问访问企业系统。
因此,权限系统最好能够处理有效期,而不是只保存“允许”或者“不允许”两个状态。
对于高风险操作,还可以进一步采用临时提升权限的机制。用户平时只有普通权限,执行特殊任务时经过审批获得短时间的额外权限,任务完成后自动恢复。
这比长期给员工一个高权限角色更加安全。
多租户环境还必须解决租户边界
对于企业SaaS来说,还有一层比角色权限更加基础:租户隔离。
不同企业使用同一个SaaS平台时,即使两个用户拥有完全相同的角色,他们也不能因为权限相同而访问彼此的数据。
因此系统中的业务数据通常需要明确记录所属租户,并在服务器端的查询和授权过程中持续验证租户上下文。
这里不能依赖前端隐藏按钮,也不能认为用户没有看到某个ID就代表数据安全。
例如用户修改一个客户记录时,服务器不能只根据客户ID查询数据,然后判断用户是不是“销售经理”。还必须确认这个客户属于当前租户,并进一步确认该用户是否有权操作这个具体资源。
否则就可能出现典型的越权访问问题:用户虽然没有界面上的权限,但只要修改请求中的资源ID,就能够访问其他用户或者其他租户的数据。
这类问题往往比普通的“按钮显示错误”严重得多。
权限继承不能无限复杂
大型企业通常存在集团、公司、区域、部门、团队和项目等多层组织结构。
员工可能从部门获得基础权限,又因为项目角色获得额外权限,同时还受到数据范围限制。
这时候权限继承很容易变得复杂。
例如员工属于销售部门,因此拥有客户查看权限;又因为参与某个特殊项目获得了更多数据访问权限;后来员工调到其他部门,原来的项目权限是否继续存在,就必须有明确规则。
权限系统不能只考虑“增加权限”,还必须设计权限撤销、覆盖、继承以及组织变化后的自动调整。
一个重要原则是:高权限不要因为组织关系变化而永久残留。
员工离职、调岗、项目结束、合同到期,都应该能够触发权限回收。
高风险权限最好实行职责分离
企业系统中有一些操作风险远远高于普通查询,例如删除大量数据、导出敏感信息、修改权限、关闭安全策略、修改付款账户等。
这类操作不适合简单地交给一个“超级管理员”。
可以根据业务风险建立职责分离机制,让不同人员负责不同环节。例如一个人负责创建权限申请,另一个人负责审批;一个人提交付款,另一个人进行复核。
这样即使某一个账号被盗,攻击者也不容易仅凭一个身份完成整个高风险操作链条。
对于特别敏感的操作,还可以增加多因素认证、二次确认和短期授权。
审计日志不是普通的系统日志
权限系统如果只有授权判断,没有完整的审计能力,企业在出现安全事件以后很难回答一个关键问题:谁在什么时候访问或者修改了什么。
因此,权限管理应该与审计系统结合。
对于普通查询,可以根据业务风险决定记录策略;对于删除数据、导出大量数据、修改权限、修改安全配置等敏感操作,则应该记录操作者、租户、时间、资源、操作类型、结果以及必要的上下文。
审计日志本身也需要保护,不能让拥有业务管理员权限的人随意删除自己的操作记录。
对于企业客户来说,权限系统不仅要能够“阻止错误操作”,还必须能够在事情发生以后提供完整的追踪证据。
异常行为也应该进入权限体系
传统权限系统通常只回答“允许还是拒绝”,但现代企业安全越来越关注“这个操作虽然被允许,是否异常”。
例如一个平时每天只访问几十条客户记录的员工,突然在凌晨大量读取几十万条数据。从静态权限来看,这个用户可能完全有权限访问这些数据,但从行为角度看却非常异常。
因此,大型SaaS平台可以把权限日志、访问日志和安全监控结合起来,对异常访问进行风险评分和告警。
这并不意味着系统应该简单地因为一次异常行为就立即封锁账号,而是可以根据风险等级采取重新认证、临时限制、管理员审核等措施。
权限控制正在从单纯的“访问控制”逐渐发展为“身份、权限、资源和行为”共同判断。
权限越复杂,越要控制复杂度
企业客户经常要求“权限越细越好”,但权限并不是越细越安全。
如果系统拥有几百个角色、几千条特殊规则,最终可能连管理员自己都无法准确判断某个用户为什么拥有某项权限。
这会形成所谓的权限蔓延。员工因为过去承担过某项工作获得权限,后来岗位发生变化,权限却没有被收回,最终一个普通账号可能积累出远超当前职责所需要的访问能力。
因此,权限设计需要考虑最小权限原则,同时建立定期权限审查、权限到期、离职回收、调岗调整以及高权限账号审核机制。
对于大型系统,还需要考虑权限决策的性能。权限规则过多以后,每次请求都重新计算完整的角色继承、组织关系和资源属性,会增加数据库查询和应用层计算压力。
这时候可以使用权限缓存、策略预计算以及专门的授权服务,但缓存必须考虑权限变更后的失效问题。否则用户已经被撤销权限,缓存却仍然认为用户拥有旧权限,同样会产生安全漏洞。
企业SaaS真正需要的不是一个简单的“管理员”和“普通用户”开关,而是一套能够随着企业组织和业务变化持续运行的授权体系。角色解决“你是什么身份”,数据范围解决“你可以看到哪些资源”,操作权限解决“你可以做什么”,属性和业务规则解决“在什么条件下可以做”,审批和职责分离解决“高风险操作是否需要其他人参与”,审计系统则负责回答“谁做过什么”。
对于多租户SaaS,还必须把租户边界放在权限体系的基础位置。一个成熟系统首先要确保企业之间的数据不会串在一起,然后再解决企业内部不同人员之间的数据和操作权限。等系统进入大型组织以后,临时授权、权限回收、异常行为、高风险操作审批和审计追踪也会逐渐成为核心能力。
权限系统设计得好不好,往往不是看它有多少个角色,而是看企业组织结构发生变化、员工调岗离职、项目结束、业务扩大甚至账号被盗以后,系统能不能准确知道谁还能访问什么,以及应该在什么时间自动失去这些权限。权限管理最终服务的不是“方便管理员分配权限”,而是让一个复杂企业在保持业务效率的同时,把每一次数据访问和关键操作控制在应该出现的范围之内。
企业 SaaS 的权限不能只分管理员和普通用户,还需要考虑哪些情况
喜欢这篇报道?
使用下面的功能,方便以后继续阅读和分享 MNewsTV
关于文章收藏
收藏不需要注册帐号,收藏信息仅保存在当前浏览器中。
删除收藏请进入「我的收藏」进行管理。
捐助(Paypal): https://www.paypal.me/observeccp 订阅中国观察电报 Telegram : https://t.me/s/ObserveCCP