一
前言
首先郑重申明:本文并不是想教唆你怎么把SAP服务器搞死.
虽然你确实可以从本文中学到搞死SAP服务器的技巧,但是如果因为你对公司的抱怨而导致你无意中使用了本文中的方式无意中搞死了贵公司的SAP服务器.
请不要甩锅给本文作者. 罪过在于你无意的报复之心及贵公司无意让你拥有了报复之心.
鉴于本文可能让部分心有芥蒂的程序员有更强的破坏力.
在文末会给出相应的解决方案
本文主要介绍怎么让SAP系统无意中无法连接数据库系统
二
破坏效果
(犯罪电影中搞了破坏的犯罪者,往往喜欢留在现场观看一下自己的杰作能达成的效果.可以归因于犯罪者的变态,但更多是一个杰出犯罪者的一种总结,通过观察现场警察的反应,观察破坏达成的效果,分析总结执行方式,以便改进? )
同样,如果你想搞一个特定的系统破坏活动,肯定希望知道杀伤力有多大,系统表现是什么样的:
所有涉及到数据库的系统操作(激活表,释放请求,查询或修改单据等)都会报错,报错信息在ST22中大部分以: DBSQL_CONNECTION_NO_METADATA 呈现. 这样的效果还满意不?
通过报表 RSDUMPQM 可以看到一个DUMP的统计报表.
可以发现大量的
DBSQL_CONNECTION_NO_METADATA报错.
三
相关NOTES
通过查询DBSQL_CONNECTION_NO_METADATA 可以获取几个相关的NOTES
NOTES: 2076388 中给出了报错的原因,但是不具体.
2995840 其中提到NOTES 2399990
四
段子的提示
曾经听过一个段子:
怎么简单有效的报复那些电话诈骗犯?
答案是: 假装上套,获取到对方的银行信息及卡号, 然后登录网银随机尝试密码,错误3-5次后,卡会被锁.
没有实际尝试过. 不太清楚可操作性?(貌似系统隔天会自动解锁,哼,每天一大早都去试试).
中断系统与数据的连接方案呼之欲出.
五
几个问题
段子中的报复手段有几个需要解决的问题:
银行信息(数据库IP地址)
银行卡号(数据库用户)
网银地址(数据库连接方式)
怎么解决这些问题呢? (这些问题在段子中都不是问题,骗子会主动告诉你的)
六
技能储备
做任何事情都需要有一定的知识/技能储备,才能把事情做成.
当然做坏事的技能要求可能比做好事的技能要求要低.现实世界的很多事似乎都是如此,所谓破坏容易重建难.
01
获取数据库IP地址
如果通过询问系统管理员解决,那么你就会留下线索.
因此需要一个隐秘的方式.
系统状态中可以看到主机.
有点计算知识的,都知道可以通过ping 命令获取主机的IP,这里需要一个稍微复杂的技能: 了解并知道怎么使用 SM49
详见链接 无峰,公众号:ABAP 技巧与实战SAP小技巧 终止进程
创建一个外部命令,
ping -c 2 <主机名称>
必须使用参数 -c n 指定一个ping的次数, 否则系统会一致等待ping的执行,假死.(linux ping 没有默认4次,默认无限次)
02
数据库用户
DB02可以查询,系统会显示默认数据库连接用户. 当然很多S4系统链接数据库的默认用户是SAPABAP1
03
数据库连接方式
通过HANA STUDIO客户端连接
通过DB02/DBCO连接
详见链接 无峰,公众号:ABAP 技巧与实战ABAP基础知识 访问外部数据库-配置篇
七
推荐实施方案
通过DB02中连接外部数据库的方式
通过DB02中的数据库连接有一个很有意思的特性
DB02中创建了连接本地数据库的DBCO S4D (密码可能不正确,连接名称最好和系统名称一致,否则效果不好. )
当第一次输入的密码不正确时,系统会警告, 此时回车或者重新输入另一个错误密码,可以忽略警告,并保存成功.
当你测试这个连接时, 系统会提醒连接成功. 所以你会以为自己输入的账号,密码是正确的.
创建后, DB02 进入后会报错,系统尝试两次连接 S4D(一次是标准的, 第二次是DBCO中维护的?并且尝试多次 )
此时,数据库系统已经锁住了SAPABAP1账号.
用SE11 修改数据字典对象报DUMP
DB02中已经无法删除远程数据库连接 S4D.
用SQL编辑器也无法查询表内容
释放请求会报DUMP.
......
各种错误纷至沓来.
八
解决方式
解决方式很简单,用SYSTEM 账号登录HANA STUDIO 找到SAPABAP1 账号(锁定状态),解锁即可.
但是所有的报错信息都没有明确的指向这一点. 根据ST22中的DUMP信息找到这个解决办法还是挺麻烦的.
九
总结
SAPABAP1是S4应用服务器连接HANA 数据库的默认用户(ECC连接数据库的默认用户似乎是<SID>ADM). 数据库用户因为安全考虑, 错误尝试登录次数过多会导致锁定.
创建DB02中的外部系统连接时,输入错误的密码.再次启动DB02时,系统会同时尝试外部连接中与系统ID相同的数据库连接. 因为输入了错误的密码, 多次连接报错导致用户被锁.
服务连接命名 R/3*<字符串> 比如报错中的 R/3*DDFTX
系统连接数据库不同的场景使用了不同的服务连接, 这些服务连接共用了 SAPABAP1 账号/密码连接数据库. 这个账号被锁, 导致所有的服务连接报错.
解锁用户SAPABAP1,需要用到数据库SYSTEM账号及密码.
DB02中可以查询到数据库的所有连接信息