转载 SAP用户权限控制设置及开发

建立用户SU01

事务码:SU01,用户主数据的维护,能够建立、修改、删除、锁定、解锁、修改密码等前端

 

缺省:能够设置用户的起始菜单、登陆的默认语言、数字显示格式、以及日期和时间的格式设置编辑器

image089

 

参数:SAP不少屏幕字段都会对应一个指定的参数ID,该参数ID及值通常存储在SAP所划分的内存区域中,在SAP GUI启动时会自动读取,并做为默认值自动赋值给屏幕上相关字段中,如SD中销售组织参数ID为VKO,HR国家分组参数ID为MOL:工具

image090

 

image091

image092

注:一个角色只对应一个参数文件oop

image093

权限角色

用户的权限菜单是经过权限角色分配来实现的编码

自定义权限角色 PFCG

事务码:PFCGspa

SAP针对不一样的功能模块提供了不少内置的角色,如SD模块的权限角色名都是以 SAP_SD 为前缀,HR模块以 SAP_HR为前缀。.net

 

在实际应用中,每每会开发不少的工具和报表,而且须要对这些特定的程序进行权限分配,本节将经过新建一个自定义的角色来介绍用户角色权限维护细节。设计

 

角色维护又分为单一角色和复合角色,单一角色是一个独立的权限对象,而复合角色能够由多个单一角色组合而成,可以同时继承不一样单一角色的权限。下面建立一个SD的角色:3d

image094

为角色分配菜单权限

image095

image096

为角色分配权限数据

上面分配完菜单后,就实现了在用户菜单中能看到的相关事务码菜单项,可是可否操做菜单中所对应事务的业务数据还得设置具体的权限数据:code

image097

为某个角色分配具体的权限数据后,会自动产生一个参数文件,SAP在执行中会经过读取该参数文件的数据来进行用户权限的检查及管控。

 

在进行更改“权限数据”前,先简单了解一下SAP的权限对象(权限对象设置好后,须要绑定到事务码上,而后在ABAP程序中是经过AUTHORITY-CHECK OBJECT语句来作权限检查的,这样权限对象就起做用了):

在SAP实际应用中,用户所直接操做的是屏幕及屏幕所对应的字段,而这些具体字段都是由权限对象进行控制,包括该字段所容许的操做及容许的值(数据)。

本例中为角色分配了事务VA01——建立销售订单,在建立销售单时须要输入具体的组织级别,在“权限”页签中单击“更改权限数据”按钮,系统将自动抓取该角色菜单中所分配的全部事务码所对应的权限对象,会弹出一个定义组织级别对话框,要求用户输入具体的业务数据控制范围,如:

image098

为权限字段分配值能够是单个值,也能够是某个取值范围,输入符号“*”表示为该字段容许全部值,也能够单击对话框右下角的“彻底权限”按钮,为尚未分配的值的字段分配值。注:这个界面填充的值会带到下一界面,也能够在这里什么不输,而是直接到下一界面输入,这里只是将所分配的事物码所涉及的权限对象的权限字段集中在这是输入值,只是为了方便

 

SAP角色的权限分配是从权限对象直接派生过来的,能够在不一样的权限角色中同时调用同一权限对象,并为所生成对象分配定义不一样的权限值。

 

点击“保存”后,SAP会将权限对象以及所维护的权限值以树状结构分层列出,最顶级为对象类,对象类是同类属性的权限对象的集合,一个对象类能够包含多个权限对象。在权限角色维护页面的主菜单中执行“实用程序|技术名称打开”命令,将在每一个字段的右边显示全部的对象类名称及权限对象名称:

image099

该界面经过状态灯来表示各权限对象维护状态,绿灯表明激活,黄色表示未激活,红色表明未给权限字段分配值,单击权限字段前的铅笔能够定义该字段的受权值:

image100

image101

image102

 

权限对象维护完成后,节点的状态灯会变为绿色,单击“保存”按钮后会弹出一个“为生成权限参数文件分配参数文件名称”对话框:

image103

再点击image104,激活权限数据,返回到角色维护界面,能够看到生成的权限参数文件:

image105

将角色分配给用户

先建立新的用户 800USER02 但角色与参数文件都为空:

image106

(注:当角色建立好之后,除了在PFCG里分给其余用户外,实质上能够直接经过SU01来对某用户进行角色的分配:

image107,当分配好角色时,该角色所带的参数文件也会自动带过来放在参数文件Tab中,但你也能够在参数文件中还能够直接将其余的参数文件加进来,如SAP_ALL、SAP_NEW参数文件)

 

因为没有赋任何权限,因此此时800USER02没有任何权限:

image108

 

image109

 

单击“用户比较”按钮,将弹出“比较角色用户主数据记录”对话框:

image110

点击“完成比较”,该用户所对应的权限角色将正式生效。

 

完成后,再去查看 800USER02 用户的角色与参数文件页签,发现已关联上了:

image111

image112

 

经过上面的设置后,800USER02用户才有权执行VA0一、VA02两个事务码,可是,因为前面数据权限字段“销售凭证类型”没有设置任何值,因此在建立时仍是会报错:

image113

能够将该凭证类型值加上便可:

image114

权限角色在系统间的传输

image115

自定义权限对象

前面已经介绍了如何在权限角色中维护SAP所提供的标准权限对象,本节介绍如何自定义权限对象。

 

SU20:权限字段清单,能够新增、修改、删除权限字段,能够浏览该字段具体被哪些权限对象所调用。

SU21:维护权限对象,能够建立和维护权限类、权限对象,权限字段在该事务码中被分配到权限对象

SU22:维护权限对象的分配,能够经过该事务码为具体事务分配权限对象

权限字段的维护SU20

建立权限字段:

image116

image117

image118

对象类及权限对象的维护SU21

对象类是多个权限对象的集合,而一个权限对象又能够分配多个权限字段,对象类和权限对象都是经过事务码SU21来维护的。

一旦新增了用户的自定义权限对象后,须要单击工具栏中的image119按钮,将把新增的权限对象赋值给 SAP_ALL 这个权限参数文件。

 

建立对象类:

image120

 

建立权限对象:

image121

 

image122

权限对象分配到事务码SU22

SU22:经过该事务码还能够查询某个事务有哪些权限对象

image123

image124

image125

image126

image127

 

为了下面的演示,建立一个HELLO程序事务代码ZJZJ_HELLO:

image128

 

image129

输入事务码ZJZJ_HELLO后,执行该程序后进入权限对象分配页面,对于新增的事务,SAP都会默认分配一个S_TCODE权限对象,用于管控用户操做是否存在该事务的权限:

image130

 

可为权限字段设置默认值,这些值会在角色权限分配时自动带出:

image131

image132

 

经过上面建立完自定义的权限对象ZS001,并将它与事务代码ZJZJ_HELLO绑定,这样就能够将该事务代码分配到角色菜单中了(注:到目前为止,上面只是设置了某个事务码具体的权限数据,要使用这些权限数据的起做用,还得要经过该事务码所对应的ABAP程序来检查所分配的权限对象的权限数据,标准的Tcod不需另写ABAP,默认对应的ABAP程序已经实现了?)

 

 

  权限对象(Authorization Object),权限字段(Authorization Field),容许的操做(Activity),容许的值(Field Value)

       角色包含了若干权限对象,在透明表AGR_1250中有存储两者之间的关系;权限对象包含了若干权限字段、容许的操做和容许的值,在透明表 AGR_1251中体现了ROLE/Object/Field/Value之间的关系;有一个特殊的权限对象用来包含了若干事务码。这个权限对象叫 “S_TCODE”,该权限对象的权限字段叫“TCD”,该字段容许的值(Field Value)存放的就是事务代码;有一种特殊的权限字段用来表示能够针对该权限对象作哪些操做,是容许建立、修改、显示、删除或者其余呢,该权限字段叫 “ACTVT”,该字段容许的值(Field Value)存放的就是容许操做的代码,01表明建立、02表明修改、03表明显示等;SAP 系统自带了若干权限对象、默认控制了若干权限字段(对应到透明表的某些字段)。能够用事务码SU20来查看系统有哪些权限字段,用SU21来查看系统有哪些默认的权限对象。因而咱们知道了事务代码与权限对象的区别。从权限控制的范畴来看,事务代码属于一种特殊的权限对象;一个事务代码在执行过程当中,为了判断某个ID是否有权限执行此事务代码,还可能检查其余若干普通的权限对象。使用SU22来查看某个事务代码包含了哪些权限对象。在透明表USOBX中,存放了事务码与权限对象的对应关系。

自定义权限对象

 上文所说的系统自带权限对象与权限字段仅能知足有限的须要,其权限审核的逻辑也是系统硬编码了的,咱们能作的只是是否启用某项权限对象的检查(使用SU22)。若是须要自定义,经过SU20、SU21定义便可。调用的时候在程序中加入相似代码:

AUTHORITY-CHECK OBJECT 'Z_VKORG' ID 'VKORG' FIELD 'REC_VKORG-VKORG'.

IF SY-SUBRC <> 0.

MESSAGE 'No Authorization!' TYPE 'E'.

ENDIF.

 

image133

BW受权

BW标准受权(即操做受权)

控制用户是否能够修改、建立、查看报表

经过角色模板生成权限数据

上面(为角色分配菜单权限/为角色分配权限数据)是根据你选择的事务码(菜单)后,再进“权限”Tab点击“更改权限数据”时,会自动搜集该事务码所用到的权限对象所用来的组织结构权限字段罗列出来,在弹出组织级别值维护框中输入权限范围,则在角色权限数据维护树里,这会自动会使用这些值(固然也能够不在此框中进行设定,直接跳到角色权限数据维护树里进行设置)。咱们这里是给报表设置权限,没有对应于哪一个具体的TCD,因此只能过角色模板(角色模板其实就是为了控制某个应用功能所须要的权限对象集),或者在知道某个应用须要哪些权限对象时手动加入这些权限对象而不须要经过模块来设置(请参考后面):

 

但点击更改权限数据时,会弹出框,能够选择一个角色模板,能够基于此模板进行权限数据的设定:

image134 image135

选择S_RS_RREDE模板(该模板就是用来控制前端报表人员权限的),再点“采用参照”,就能够基于模板进行权限数据维护了(若是选择“不要选择模板”,则需手动加入所须要的权限对象,这个能够参考后面相应章节)。打开模板后,仅需对下面两个权限对象(S_RS_COMP、S_RS_COMP1)进行权限数据设置便可,如下是模板默认值:

image136

image137

模板中S_RS_COMP权限数据有两组,多组方便灵活控制权限数据,通常只有一组权限数据,若是须要多组,则能够经过如下方式来让同一权限对象有多组权限数据:

image138

上面有两组权限数据,当有多组数据时,若是某个权限在两组都有,最终的权限是叠加的的

 

S_RS_COMP权限对象: 每一个权限对象的每一个权限字段的业务含义是不同的,但通常都会有ACTVT这个权限字段,该权限字段就是控制是否能够增、删、改、查等这些权限的,其它权限字段的含义请经过SUIM事务码来查看该权限对象的文档说明:

image139

 

下面只可查询报表(权限参数“报告组件的类型”“查询”,即Query,表示报表组件)(注:必定要将执行勾上,不然查不出结果),不可新增、修改、删除报表:

image140

image141  image142 image143

下面加上了可删除、建立、修改报表功能权限:

image144

 

发现一个有趣现象:删除权限包含了修改权限?只要你勾上了删除,不勾修改,同样能够修改;但反过来不行:只勾修改,不勾删除,仍是不能删除:

image145 image146

 

下面权限状况下,不能经过报表工具建立、删除、修改变量(但查询时可使用):

image147

image148

 

S_RS_COMP1权限对应是对 S_RS_COMP权限对象的一种补充:即限制只准操做哪些人建立的报表

image149

手动添加权限对象

前提是要知道该项功能须要用到哪些权限对象,可使用SU22来查。上面模式权限用到了如下几个主要的权限对象,手动将他们加进去便可:

权限对象:S_RS_COMP

                         S_RS_COMP1

                         S_RFC

                         S_TCODE

               事务代码:RRMX  这个事务代码是必须的,用它来打开查询分析器的代码。

               自定义的权限和基于模板的同样。

 

image150 image151 

image152 

image153

BW分析受权

分析受权:限制报表用户只能看那些数据?

image154

执行rsecadmin事务码:

image155 image156 

image157 

image158 image159

image160 image161

 

回到报表设计工具,针对客户字段建立权限变量(权限变量的做用就是说建立的变量的值不用在界面上输入,而值是来自于分析权受权所分配的权限值):

image162 image163 

image164 image165

 

image166

注:若是你的标准受权是使用的是BW受权模板来建立的标准受权,则仍是会查询出全部数据,由于受权模板中S_RS_AUTH受权对应中BIAUTH权限字段默认的值就是0BI_ALL,这是一个系统提供的标准分析对象,是能够查看全部权限的分析对象:

image167

因此经过模板建立的标准受权是不行的,因此只能是手工加载一些必要的受权对象后来进行标准受权

 

注:分析受权除了经过rsecadmin将其分配个用户外:

image160[1]image161[1]

也能够将分析权限直接分配到BW模板权限中的S_RS_AUTH中:

image168

并将用户直接分配的分析受权删除掉(rsecadmin),其结果仍是可控:

image160[2] image169

这样分析权限就没有直接分配到某我的了,而是将其分配给标准受权,而标准受权是与用户相关的,因此最终分析权限就会间接与用户相关连了,下面是用户所分配的标准受权:

image170 

在程序中调用权限对象

在不少SAP标准程序中,已经存在了对权限数据的调用及管控功能

 

在程序中能够经过ABAP程序编辑器快速插入调用权限的代码:

image171

image172

权限代码须要放在AT SELECTION-SCREEN.事件块里

 

 

 

AUTHORITY-CHECK OBJECT '<object>'

ID '<name1>' FIELD <f1>

ID '<name2>' FIELD <f2>

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

ID '<name10>' FIELD <f10>.

<object>为检查的权限对象。你必须将全部的权限字段(<name1>,<name2> ...)列出来。<f1>,<f2>....为相应权限字段的值。AUTHORITY-CHECK语句会根据user’s profile来检查权限对象的权限字段,看用户是否对给出的<f1>,<f2>....权限字段值是否有权限。若是不想对某个权限字段进行权限检查,可使用DUMMY来代替FIELD <f>。

image173

AT SELECTION-SCREEN.
  PERFORM frm_auth_check.

FORM frm_auth_check .
  data: l_werks type werks,
        c_text1(60) type c value 'You have no authorization in Plant:'.
  select werks
    from t001w
    into l_werks
    where werks in s_werks.
    authority-check object 'ZDABAP'
           id 'VKORG' dummy
           id 'BUKRS' dummy
           id 'WERKS' field l_werks
           id 'EKORG' dummy
           id 'KOKRS' dummy
           id 'GSBER' dummy
           id 'SEGMENT' dummy.
    if sy-subrc <> 0.
      message e001(00) with c_text1 l_werks.
    endif.
  endselect.

 endform. 

 

form frm_auth_check .
  data: begin of lt_bukrs occurs 0,
    bukrs type t001-bukrs,
    end of lt_bukrs.
  select bukrs from t001 into corresponding fields of table lt_bukrs  where bukrs in s_bukrs.

  loop at lt_bukrs.
    authority-check object 'ZDABAP'
           id 'VKORG' dummy
           id 'BUKRS' field lt_bukrs-bukrs
           id 'WERKS' dummy
           id 'EKORG' dummy
           id 'KOKRS' dummy
           id 'GSBER' dummy
           id 'SEGMENT' dummy.

    if sy-subrc <> 0."
      message s001(00) display like 'E' with 'You do not have authorization to access company code:' lt_bukrs-bukrs.
      stop.
    endif.
  endloop.
endform. 

经过程序检查是否有权执行某个Tcd

ABAP代码中全部调用SAP事务处理命令的地方,都须要事先进行详细的受权检查(调用S_TCODE权限对象来实现),以确认当前用户是否拥有执行此命令所必须的权限:
        CALL TRANSACTION ‘SU10’.
增长一段AUTHORITY-CHECK代码:
        AUTHORITY-CHECK OBJECT 'S_TCODE
               ID 'TCD'
               FIELD 'SU10'. 
IF sy-subrc = 0.
CALL TRANSACTION 'SU10'.
ENDIF.
这样就能够在调用前肯定当前用户是否有权执行。

在程序中读取权限对象所设定的权限值

GET_AUTH_VALUES

返回该权限对象中的全部权限字段以及该字段所对应的权限值。

image174

image175

用户权限缺失检查SU53

建议为全部用户角色分配分配该事务的权限,以方便管理员在出现权限问题时及时核查。

image176

 

image177

在执行事务时出现权限检查错误后,输入事务代码SU53,则会显示权限评估检查结果:

image178

image179

用户、角色、权限对象、事务等之间的关系查看 SUIM

如:查看某个事务代码被分配到了哪些角色:SUIM

image180

原文出自  SAP师太 技术博客,博客连接: www.cnblogs.com/jiangzhengjun
相关文章
相关标签/搜索