之前笔者在网络上,曾经也阅读过一些 SAP ABAP同仁们介绍如何通过 ABAP 单步调试,绕过SAP标准权限检查“小技巧”的文章,比如说在调试器里修改权限检查语句AUTHORITY-CHECK的返回值sy-subrc, 或者干脆用调试器的“跳转到某条语句”这一功能,直接绕过权限检查语句。
虽然说在SAP生产系统里,按照惯例,普通的业务用户绝对不会有调试的权限,更别说在调试器里修改变量的值了,但如果是在开发系统里,直接在调试器里修改变量的值,或是跳过某些语句的执行,真的就能够不会被别人发现么?
答案是否定的。
看个例子:
![](https://img.haomeiwen.com/i2085791/9029f4f589b42d1b.png)
我在ABAP调试器里把变量的值从12改成123,回车使更改生效。
然后事务码SM21,打开系统日志查看工具:
![](https://img.haomeiwen.com/i2085791/69f83dc96797e62f.png)
我刚才在ABAP调试器里修改变量值的行为,赫然在案:
![](https://img.haomeiwen.com/i2085791/87c48305e6e8eed7.png)
再试试在ABAP调试器里,使用“Goto statement”,直接跳过某些语句:
![](https://img.haomeiwen.com/i2085791/2f3ad5e010dd9a7f.png)
这一行为也逃不过系统日志的记录,甚至连我从第几行ABAP代码跳转到另外的第几行,都清晰地记录下来了。
![](https://img.haomeiwen.com/i2085791/834f7ac5782d436d.png)
Terminal字段即在调试器里执行了语句跳转的用户使用的终端机器ID,每台连接到ABAP Netweaver服务器上的机器都具有一个唯一的终端ID.
这些系统日志文件存储的具体位置在哪?
点击Display Components,在Component trace面板里,能有选择性地查看某种类别的系统日志:
![](https://img.haomeiwen.com/i2085791/e277e5f0b23c0b6f.png)
其中/usr/sap/AG3/D56开头的路径,即是我当前登录的Application Server,ID为AG3,instance numeber 为56这台服务器的工作目录:
![](https://img.haomeiwen.com/i2085791/d921317416bb74b4.png)
使用事务码AL11沿着这条路径找下去,在work子目录就能发现这些系统日志文件:
![](https://img.haomeiwen.com/i2085791/6e80e769f50f78df.png)
![](https://img.haomeiwen.com/i2085791/9ba3a89f176295e8.png)
普通ABAP用户没有操作系统的访问权限,也就不能对这些系统日志文件进行任何写操作。
总而言之,一旦你使用单步调试的方法绕过一些权限检查或者执行其他危险操作时,这些行为立即记录在系统日志里,普通用户无法删除这些日志文件。
SAP系统的权限控制体系设计得非常完善,当大家在实际工作中发现自己缺少某个事务的执行权限时,请按照SAP权限管控的标准流程去解决问题。通过ABAP单步调试绕过权限检查,在任何情况下都绝非SAP推荐的解决方式。即便是大家想在开发系统上这样做的之前,也务必三思而后行。
聊完了 SAP ABAP 系统里的权限管控,我们再来看看其事务记录功能的实现。
用过“瘟酒吧”的七零后八零后,对于Windows注册表一定不陌生。在那个距今已经显得有些遥远的时代,甚至还有很多专门出版的书籍,教授如何修改Windows注册表来提高系统性能,或是启用一些微软默认disable了的隐藏功能。
![](https://img.haomeiwen.com/i2085791/b25932da371086e3.png)
![](https://img.haomeiwen.com/i2085791/2cf1ea44e4e00a48.png)
我们知道Windows注册表用于存储系统和应用程序的设置信息,从Windows 95启用一直沿用到今天的Windows10.
![](https://img.haomeiwen.com/i2085791/b54dc11803266985.png)
那么SAP GUI命令行里用过的事务码列表,会不会也保存在Windows系统注册表的某个地方呢?
![](https://img.haomeiwen.com/i2085791/28004b3f3c3aa9a3.png)
Windows操作系统里,Win + R,执行regedit打开注册表,沿路径HKEY_USERS\Software\SAP\SAPGUI Front\SAP Fronted Server\Code展开,即可看到这些用过的事务码列表。
![](https://img.haomeiwen.com/i2085791/a1927abe546d750b.png)
同样,在本地SAP GUI目录下,有SAPHistory<User Name>.db和SAPHistory<User Name>.mdb这两个文件:
![](https://img.haomeiwen.com/i2085791/326275821700bbe0.png)
按照SAP note 1121688 - SAP History: explaining database files, etc的说法,扩展名.mdb文件是旧版本的SAP GUI使用,而.db对应新版本。
![](https://img.haomeiwen.com/i2085791/c8048bd79f8f9b80.png)
授人以鱼不如授人以渔,如何自行找到SAP GUI存储这些本地信息的注册表位置?
假设想知道下列这些History Settings的值是否维护在Windows注册表里,
![](https://img.haomeiwen.com/i2085791/81d1df50f06eda57.png)
首先,在修改设置之前,导出一个注册表镜像文件before.reg:
![](https://img.haomeiwen.com/i2085791/97e38a89019f5332.png)
在SAP GUI里对设置做修改,保存后,导出第二个注册表镜像文件after.reg, 然后用Windows自带的文件比较工具fc比较两个镜像文件的差别,结果即为SAP GUI这些设置在Windows注册表里的位置。
![](https://img.haomeiwen.com/i2085791/7cd3590c05d25da3.png)
结果如下:
![](https://img.haomeiwen.com/i2085791/0074be9d4eb80346.png)
![](https://img.haomeiwen.com/i2085791/a949c94b58c0cab6.png)
绝大多数注册表项都位于SAPGUI Front这个节点下面,而从该节点向上追溯,也能发现其他SAP软件在注册表里写入的值,比如SAP Cloud Connector,SA Cloud Application Studio,SAP Intelligent Robotic Process Automation套件等等。
![](https://img.haomeiwen.com/i2085791/c3c0c29056631ac0.png)
SAP GUI设置里的checkbox如果勾上,对应Windows注册表里的值维护为00000001:
![](https://img.haomeiwen.com/i2085791/06e7fc904cb2f09e.png)
而在SAP GUI里按照十进制存储的值,存储在Windows注册表里会自动转换成十六进制:
![](https://img.haomeiwen.com/i2085791/4dbb0c6dec4e5be1.png)
总结
本文从 SAP 系统开发人员通过单步调试的方式试图绕过系统权限的监控这一行为本身及其后果进行分析,介绍了 SAP 系统权限管控的完备实现,接着从 Windows 操作系统的注册表展开类别,介绍了 SAPGUI 事务记录功能的工作原理。
网友评论