谈谈 SAP 系统的权限管控和事务记录功能的实现

之前笔者在网络上,曾经也阅读过一些 SAP ABAP 同仁们介绍如何通过 ABAP 单步调试,绕过 SAP 标准权限检查“小技巧”的文章,比如说在调试器里修改权限检查语句 AUTHORITY-CHECK 的返回值 sy-subrc, 或者干脆用调试器的“跳转到某条语句”这一功能,直接绕过权限检查语句。
虽然说在 SAP 生产系统里,按照惯例,普通的业务用户绝对不会有调试的权限,更别说在调试器里修改变量的值了,但如果是在开发系统里,直接在调试器里修改变量的值,或是跳过某些语句的执行,真的就能够不会被别人发现么?
答案是否定的。看个例子:

我在 ABAP 调试器里把变量的值从 12 改成 123,回车使更改生效。然后事务码 SM21,打开系统日志查看工具:

我刚才在 ABAP 调试器里修改变量值的行为,赫然在案:

再试试在 ABAP 调试器里,使用“Goto statement”,直接跳过某些语句:

这一行为也逃不过系统日志的记录,甚至连我从第几行 ABAP 代码跳转到另外的第几行,都清晰地记录下来了。

Terminal 字段即在调试器里执行了语句跳转的用户使用的终端机器 ID,每台连接到 ABAP Netweaver 服务器上的机器都具有一个唯一的终端 ID.
这些系统日志文件存储的具体位置在哪?点击 Display Components,在 Component trace 面板里,能有选择性地查看某种类别的系统日志:

其中/usr/sap/AG3/D56 开头的路径,即是我当前登录的 Application Server,ID 为 AG3,instance numeber 为 56 这台服务器的工作目录:

使用事务码 AL11 沿着这条路径找下去,在 work 子目录就能发现这些系统日志文件:


普通 ABAP 用户没有操作系统的访问权限,也就不能对这些系统日志文件进行任何写操作。
总而言之,一旦你使用单步调试的方法绕过一些权限检查或者执行其他危险操作时,这些行为立即记录在系统日志里,普通用户无法删除这些日志文件。
SAP 系统的权限控制体系设计得非常完善,当大家在实际工作中发现自己缺少某个事务的执行权限时,请按照 SAP 权限管控的标准流程去解决问题。通过 ABAP 单步调试绕过权限检查,在任何情况下都绝非 SAP 推荐的解决方式。即便是大家想在开发系统上这样做的之前,也务必三思而后行。
聊完了 SAP ABAP 系统里的权限管控,我们再来看看其事务记录功能的实现。
用过“瘟酒吧”的七零后八零后,对于 Windows 注册表一定不陌生。在那个距今已经显得有些遥远的时代,甚至还有很多专门出版的书籍,教授如何修改 Windows 注册表来提高系统性能,或是启用一些微软默认 disable 了的隐藏功能。


我们知道 Windows 注册表用于存储系统和应用程序的设置信息,从 Windows 95 启用一直沿用到今天的 Windows10.

那么 SAP GUI 命令行里用过的事务码列表,会不会也保存在 Windows 系统注册表的某个地方呢?

Windows 操作系统里,Win + R,执行 regedit 打开注册表,沿路径 HKEY_USERS\Software\SAP\SAPGUI Front\SAP Fronted Server\Code 展开,即可看到这些用过的事务码列表。

同样,在本地 SAP GUI 目录下,有 SAPHistory<User Name>.db 和 SAPHistory<User Name>.mdb 这两个文件:

按照 SAP note 1121688 - SAP History: explaining database files, etc 的说法,扩展名.mdb 文件是旧版本的 SAP GUI 使用,而.db 对应新版本。

授人以鱼不如授人以渔,如何自行找到 SAP GUI 存储这些本地信息的注册表位置?
假设想知道下列这些 History Settings 的值是否维护在 Windows 注册表里,

首先,在修改设置之前,导出一个注册表镜像文件 before.reg:

在 SAP GUI 里对设置做修改,保存后,导出第二个注册表镜像文件 after.reg, 然后用 Windows 自带的文件比较工具 fc 比较两个镜像文件的差别,结果即为 SAP GUI 这些设置在 Windows 注册表里的位置。

结果如下:


绝大多数注册表项都位于 SAPGUI Front 这个节点下面,而从该节点向上追溯,也能发现其他 SAP 软件在注册表里写入的值,比如 SAP Cloud Connector,SA Cloud Application Studio,SAP Intelligent Robotic Process Automation 套件等等。

SAP GUI 设置里的 checkbox 如果勾上,对应 Windows 注册表里的值维护为 00000001:

而在 SAP GUI 里按照十进制存储的值,存储在 Windows 注册表里会自动转换成十六进制:

总结
本文从 SAP 系统开发人员通过单步调试的方式试图绕过系统权限的监控这一行为本身及其后果进行分析,介绍了 SAP 系统权限管控的完备实现,接着从 Windows 操作系统的注册表展开类别,介绍了 SAPGUI 事务记录功能的工作原理。
版权声明: 本文为 InfoQ 作者【Jerry Wang】的原创文章。
原文链接:【http://xie.infoq.cn/article/63ed2dbf534ea7f7eeaebf95b】。文章转载请联系作者。
评论