当前位置:网站首页>谈谈 SAP 系统的权限管控和事务记录功能的实现
谈谈 SAP 系统的权限管控和事务记录功能的实现
2022-07-08 00:37:00 【汪子熙】
之前笔者在网络上,曾经也阅读过一些 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.db和SAPHistory.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 事务记录功能的工作原理。
边栏推荐
- 生态 | 湖仓一体的优选:GBase 8a MPP + XEOS
- 什么样的MES系统才是好系统
- Codeforces Round #633 (Div. 2) B. Sorted Adjacent Differences
- Keras深度学习实战——基于Inception v3实现性别分类
- 快手小程序担保支付php源码封装
- I don't know. The real interest rate of Huabai installment is so high
- PHP to get information such as audio duration
- Redismission source code analysis
- 图解网络:揭开TCP四次挥手背后的原理,结合男女朋友分手的例子,通俗易懂
- Optimization of ecological | Lake Warehouse Integration: gbase 8A MPP + xeos
猜你喜欢
Applet running under the framework of fluent 3.0
MySQL查询为什么没走索引?这篇文章带你全面解析
剑指 Offer II 041. 滑动窗口的平均值
图解网络:揭开TCP四次挥手背后的原理,结合男女朋友分手的例子,通俗易懂
云原生应用开发之 gRPC 入门
Apache多个组件漏洞公开(CVE-2022-32533/CVE-2022-33980/CVE-2021-37839)
咋吃都不胖的朋友,Nature告诉你原因:是基因突变了
Voice of users | winter goes and spring comes, waiting for flowers to bloom -- on gbase 8A learning comprehension
Kwai applet guaranteed payment PHP source code packaging
Introduction à l'outil nmap et aux commandes communes
随机推荐
Codeforces Round #643 (Div. 2)——B. Young Explorers
Why did MySQL query not go to the index? This article will give you a comprehensive analysis
很多小夥伴不太了解ORM框架的底層原理,這不,冰河帶你10分鐘手擼一個極簡版ORM框架(趕快收藏吧)
Gbase observation | how to protect the security of information system with frequent data leakage
ANSI / nema- mw- 1000-2020 magnetic iron wire standard Latest original
Urban land use distribution data / urban functional zoning distribution data / urban POI points of interest / vegetation type distribution
QML fonts use pixelsize to adapt to the interface
pb9.0 insert ole control 错误的修复工具
nmap工具介紹及常用命令
软件测试笔试题你会吗?
Tapdata 的 2.0 版 ,开源的 Live Data Platform 现已发布
2022国内十大工业级三维视觉引导企业一览
cv2-drawline
神经网络与深度学习-5- 感知机-PyTorch
Codeforces Round #649 (Div. 2)——A. XXXXX
快手小程序担保支付php源码封装
SQLite3 data storage location created by Android
保姆级教程:Azkaban执行jar包(带测试样例及结果)
Why did MySQL query not go to the index? This article will give you a comprehensive analysis
【错误】加载h5权重出错AttributeError: ‘str‘ object has no attribute ‘decode‘