1SaaS概述和成熟度模型
1.1SaaS概述
SaaS是SoftwareasaService(软件即服务)的简称,是一种通过互联网向公众特别是中小企业提供应用软件的模式。SaaS软件厂商将应用软件统一部署在中心服务器上,租户可以根据自己实际需求,通过互联网向厂商定购所需的应用软件服务,按定购的服务多少和时间长短向厂商支付费用,并通过互联网获得厂商提供的服务和技术支持。SaaS本质就是以在线租赁的方式替代传统的信息化建设投资,并保证租户充分享有信息化技术的便利、效率和专业的信息化服务。
SaaS服务模式在给社会公众特别是中小企业带来极大便利和经济效益的同时,也带来了很多的安全隐患。首先,SaaS面向众多企业级用户,用户数量多,角色繁杂,给身份认证和访问控制造成了很大的困难,服务需要支持多种角色和多类用户的资源访问控制;其次,SaaS软件生产商向租户提供的服务功能模块众多,不同租户对不同服务功能模块的访问控制权限并不完全相同。为了能够使租户方便地使用SaaS服务功能模块,对于SaaS软件厂商来讲也需要将应用服务功能发布出去供多租户访问和使用。
1.2SaaS成熟度模型
SaaS模式应用的成熟度可以从低到高分成四个级别,每一级别都比前一级增加了新的成熟特性,从而最终达到成熟SaaS模式要求具备的可扩展性、多用户、高效性、可配置等特性。
第—级:定制级。
每个租户使用一个独立的数据库实例和应用服务器实例,数据结构和应用程序的代码根据租户需求进行定制化修改来满足不同租户的个性化需求。
第二级:简单多实例可配置级。
每个租户依然使用一个独立的数据库实例和应用服务器实例,但是不同租户使用的实例都是基于相同的应用程序代码进行实施的。应用程序已经考虑到了可定制和可配置性,针对每个租户的定制工作可通过配置的方式实现来满足租户的定制化要求。
第三级:单实例可配置级。
所有租户共享一个数据库实例和一个应用服务器实例,数据库通过增加租户表和TENANT_ID字段来解决识别多个租户的问题,并采用可配置的方式支持租户的定制化需求。通过授权与安全性策略可确保不同租户的数据彼此区分开,因此从最终用户的角度来看,不会察觉到应用是与多个用户共享的。第三级SaaS从计算资源的利用效率而言是大大提高了,从而直接降低了成本,但是对于租户的安全控制和数据权限控制的隔离级别而言是最低的,开发时需加大对数据安全的控制,同时也难以消除租户的数据安全性顾虑。
第四级:可扩展的多实例可配置级。
通过在负载平衡的服务器群上为不同租户提供服务,系统有多个应用服务器实例,但运行相同的应用程序代码实例,最终租户通过负载均衡被分配到不同的应用服务器实例,不同租户的数据彼此分开,同时采用可配置的方式支持租户的定制化需求。第四级的SaaS系统具备良好的可扩展性,可轻松适应大规模租户的需要,可根据需求灵活地增减后端服务器的数量而无需对应用进行额外架构设计,并满足多租户的定制化需求。
本文主要基于SaaS第四级成熟度“可扩展的多实例可配置级”要求,设计和实现了一个可以支持多租户且支持多服务的SaaS系统架构和统一的安全认证与权限管理系统。
2系统总体设计
2.1总体架构
为了满足SaaS应用服务要求的支持多租户、多服务功能的特点,在总体技术架构上得满足两方面要求:一方面,依照SaaS第四级成熟度的可扩展的多实例可配置级要求,通过在后台服务器上基于相同的应用程序代码运行多个应用服务器实例来满足不同租户的定制化需求,并可通过负载均衡实现租户的服务器运行示例的动态分配;另一方面。在系统中要采用可配置的方式支持租户的定制化需求,并通过统一的安全认证和权限管理系统实现不同租户对不同服务功能模块的安全控制机制和权限管理要求。
2.2存储结构设计
在SaaS系统中,在满足服务资源的共享与多租户高效性的同时,必须确保用户数据的访问控制和逻辑隔离。为了保证用户数据的安全性要求,我们采用了“公有+私有”的数据库存储结构。
首先,我们将存储了SaaS系统的用户认证、功能访问权限信息等数据结构统一放在了“公有数据库”中,以便于进行统一的用户认证、功能权限控制等,即SaaS系统中的用户认证和功能权限控制信息存放在一起,共享一个公有数据库schema;而对于各租户的业务数据信息,由于需确保不同用户只能访问自己的数据,并实现用户业务数据的逻辑隔离,则存放在不同的“私有数据库”中,即每个租户的业务数据存放在各自的私有schema中,从而达到了业务数据逻辑隔离的需求,安全性可以得到保证,同时对于数据宦的备份、导入导出等运行维护工作也提供了较好的便利性。
“公有+私有”数据库存储结构的示意图如图2所示。由于在安全认证与权限管理系统中需要统一进行用户身份认证和操作权限管理与控制,因此将相关的用户认证信息和权限管理信息存放在统一的公有数据库中,以支持用户的身份认证和服务功能权限管理,在用户登录时根据服务功能权限信息构造用户所能访问的服务功能集合,并根据后台服务器信息动态分配相应的应用服务器实例。同时不同租户的运行实例根据用户身份不同访问各自的私有业务数据库,每个租户都拥有自己的业务数据库,互相隔离,不能跨库进行非法访问。
“公有+私有”数据库能够保证统一用户认证和权限管理需要,同时也能保证用户数据的高安全性,确保业务数据的逻辑隔离性,并使每个数据库资源得到了充分的利用。
2.3统一的安全认证与权限管理系统
安全认证与权限管理系统是SaaS系统的重要部分,主要实现用户身份认证和服务权限管理与控制,在用户登录时验证用户身份并根据服务功能权限信息构造该用户有权访问的服务功能集合,并将该用户的服务功能集合和身份信息传入系统动态分配的应用服务器实例,再动态链接到该租户对应的业务数据库实例。
安全认证与权限管理系统主要包括3个功能模块:认证、构造权限清单和授权。
2.3.1认证
认证主要实现用户登录时的身份认证和安全验证。具体认证过程为:
用户登录到Web页面,输入自己的联合身份认证信息,即用户D和密码,或者提供CA证书。
身份认证模块通过联合身份认证信息,进行认证。
如果认证失败,则返回失败信息;如果认证成功,则为用户重定向到登录成功的页面。
2.3.2构造权限清单
构造权限清单过程是用户通过了身份认证后,系统根据服务功能权限配置信息,构造符合租户企业购买范围和客户权限范围内的服务功能清单。在SaaS系统中,软件开发商会提供多个服务功能模块,不同租户根据自己需要可以购买不同的服务功能,形成本企业租户的服务功能集合;同时,不同租户内部也会划分不同角色,不同角色用户可以使用本企业所购买服务功能集合中不同的服务功能,从而形成本企业租户的不同角色客户的具体服务功能清单。因此,构造权限清单过程就是根据租户企业的购买信息和角色权限信息,动态构造客户的服务功能清单并形成具体的应用系统功能主界面,每个服务功能对应不同的菜单项或模板区。如果某客户的界面跟其余客户的界面不同,则新增一个菜单,把这个菜单加载到界面上,而这个菜单对应了后台一个服务功能。这样就实现了不同客户可以有自己完全不同的服务功能集合和应用系统界面。
具体构造权限清单过程为:
(1)根据用户身份信息,获取该用户对应的企业租户购买的服务功能清单信息;
(2)根据用户的具体角色权限信息,从服务功能集合中抽取形成该用户有权使用的服务功能清单;
(3)依据服务功能清单和个性化配置信息,动态构造并形成具体的应用系统功能主界面;
(4)将应用系统功能主界面返回给用户;
(5)建立用户与系统动惫分配的应用服务器实例独立的通道,用户可选择具体功能进行相应的服务访问和使用。
2.3.3授权
授权过程分为两类:一类是针对具体角色进行服务功能授权;另一类是针对具体角色在企业租户服务功能集合内进行权限提升。
对具体角色进行服务功能授权的过程如下。
(1)用户查询具体角色拥有的服务功能权限信息。
(2)用户一方面可以查询该用户对应的企业租户所拥有的服务功能集合信息,再在对应的服务功能集合内,选择对具体角色进行服务功能的授权,并提交清求。
(3)另一方面,用户也可以查询SaaS平台中所有可提供的服务功能集合,在平台所有可提供的服务功能集合内,修改所对应企业租户的服务功能集合内的信息,再选择对具体角色进行服务功能的授权,并提交请求。
(4)权限管理模块调用相应的方法修改具体角色对应的服务功能权限配置信息。如果授权所请求的服务功能涉及修改该用户对应的企业租户服务功能集合的,则同时修改企业租户的服务功能集合信息。
(5)权限管理模块返心修改结果。
对具体角色进行权限提升的过程如下。
(1)用户查询具体角色拥有的服务功能权限信息,并得到该用户对应的企业租户所拥有的服务功能集合信息。
(2)用户在对应的企业租户所拥有的服务功能集合内,选择对具体角色进行服务功能的授权,并提交请求。
(3)权限管理模块调用相应的方法修改具体角色对应的服务功能权限配置信息。
(4)权限管理模块返回修改结果。
3结束语
本文基于SaaS第四级成熟度“可扩展的多实例可配置级”要求,设计和实现了一个可以支持多租户且支持多服务的SaaS系统架构,并从系统结构和安全认证及权限管理的角度,提出了“公有+私有”的数据库存储模型和统一的安全认证与权限管理系统模型。这两个模型是SaaS应用的关键技术,也是实现的难点。当然,动态资源凋度、负载均衡以及服务水平协议等也是SaaS应用实施的难点;