“当企业决定拥抱 SAP S/4HANA 时,通常意味着一场大规模的业务流程革新,还有全新的用户界面 SAP Fiori。可以说,企业正从一个大而全的整体解决方案,迈向一个个更加灵活、基于具体“活动”的应用程序。这样的转变,无论是对于技术大牛还是业务骨干,都带来了不少新挑战和新变化,尤其是在权限管理这块。”
1.S/4HANA 本地版与私有云版
权限管理安全模型的基石
无论是选择本地部署的 S/4HANA,还是私有云版本(SAP S/4HANA Cloud, private edition),其安全模型的底子其实和Basisi 熟悉的传统 ABAP 应用是一脉相承的。S/4HANA 应用里的最终用户,依然会和 NetWeaver 的安全功能打交道。
S/4HANA 的授权机制还是构建在那些“经典”的 ABAP 技术之上,比如我们常说的 PFCG、SU01、SU22 这些。不过,在新的 S/4HANA 环境下,有不少新的元素会影响到授权的具体处理方式。总结起来,主要涉及以下几个层面:
- SAP Fiori:这套基于角色的应用程序,采用了面向服务的架构(SOA),是用户直接打交道的前端。
- ABAP 核心数据服务 (CDS):这些是用来保护那些暴露给各类用户访问数据的“守门员”。
- SAP HANA:HANA 数据库自身的安全功能,则负责管理对底层数据模型的访问。
2. 部署 SAP Fiori for S/4HANA
嵌入式 SAP Fiori 前端服务器模式
3. Fiori 的授权配置
3.1 快速启动板和应用的授权
经典的 ECC 时代,Basis 要运行 SAP 后端的 GUI 事务 PFCG ,维护角色里面包含了启动权限和数据访问权限的数据。现在到了 Fiori 的世界,用户就需要一些针对特定应用的界面实体和授权了,PFCG 角色也会被分配给这些新的实体类型。
Fiori 快速启动板(Launchpad)就像是在手机或电脑上访问各种应用的“大门”。用户要想顺畅使用 Fiori 应用,就得有和具体应用类型相匹配的实体。这些 Fiori UI 实体,就是定义了哪些 Fiori 应用会展示给用户看,而这些应用又是通过“目录”和“组”来管理的。
所以,要想玩转 Fiori,从打开快速启动板,到启动某个 Fiori 应用,再到使用应用里的业务逻辑和数据,每一步都离不开授权。举个例子,为了能成功启动一个应用,用户得有已激活的 OData 服务的模型提供程序的启动权限,通常就是把这个 OData 服务添加到 PFCG 角色的菜单里。
3.2 后端服务器上的 PFCG 角色
Fiori 应用背后用到的 OData 服务,其实是在后端系统上实现的。用户不仅需要有启动这些 OData 服务数据提供程序的权限,还得有访问应用里显示的具体业务数据的所有业务权限。好在 SAP 已经根据建议,给 OData 服务预设了一些业务权限的默认值。
为了拿到这些权限,一般会把 OData 服务加到 PFCG 角色的菜单里,启动权限和应用业务权限的默认值也就顺带加到角色里了。如果条件允许,更推荐把“目录”也加到角色菜单里,这样做的好处是系统能自动识别出目录里包含了哪些 OData 服务,并且当目录发生变化时,相关的授权更新也会更有条理。
4. ABAP 核心数据服务 (CDS) 视图的授权
4.1 核心数据服务(CDS)视图
在 SAP HANA 里,把代码推到数据层去执行,效率会高很多,计算任务从 ABAP 应用服务器“下沉”到了 SAP HANA 数据库中,只有最终结果才会传回来。随着 S/4HANA 的到来,ABAP 代码库也通过核心数据服务(CDS)视图得到了增强。这些 CDS 视图呢,会作为 HANA 视图部署在 SAP HANA 数据库里。
ABAP CDS 有一套它自己的授权概念,这套概念基于数据控制语言(DCL),ABAP CDS 的授权机制会利用底层的数据模型来检查用户的权限。这和传统的授权概念有点不一样,传统的授权要么是在调用事务时“暗中”进行,要么是通过 AUTHORITY-CHECK 语句“明着”来。而 CDS 的授权概念,则是在通过服务适配定义语言(SADL)访问 CDS 实体时,进行一种“隐式”的授权检查。
4.2 CDS 的声明式方法
CDS 的授权概念,可以称之为一种“声明式方法”。它不是硬编码在程序里的(虽然它也是在访问 CDS 实体时进行隐式检查),而是基于 CDS 建模对象,它本身就是数据模型的一部分。通过扩展 Open SQL 的 SELECT 语句,这种授权也一并“下沉”到了数据库层面。
实际操作中该怎么用呢,赛锐信息建议对于应用的启动权限(就是先检查用户能不能打开这个应用),还是沿用传统的授权检查方式;而 CDS 访问控制呢,则可以在应用程序内部大显身手,用来执行那些基于实例的授权检查(也就是检查由数据模型和相关数据定义的用户权限)