前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SAP用户权限控制设置及开发

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

原创
作者头像
matinal
修改2020-10-30 14:14:04
3.8K0
修改2020-10-30 14:14:04
举报
文章被收录于专栏:SAP Technical

创建用户SU01

事务码:SU01,用户主数据的维护,可以创建、修改、删除、锁定、解锁、修改密码等

缺省:可以设置用户的起始菜单、登录的默认语言、数字显示格式、以及日期和时间的格式设置

image089
image089

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

image090
image090
image091
image091
image092
image092

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

image093
image093

权限角色

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

自定义权限角色 PFCG

事务码:PFCG

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

在实际应用中,往往会开发很多的工具和报表,并且需要对这些特定的程序进行权限分配,本节将通过新建一个自定义的角色来介绍用户角色权限维护细节。

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

image094
image094

为角色分配菜单权限

image095
image095
image096
image096

为角色分配权限数据

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

image097
image097

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

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

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

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

image098
image098

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

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

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

image099
image099

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

image100
image100
image101
image101
image102
image102

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

image103
image103

再点击

image104
image104

,激活权限数据,返回到角色维护界面,可以看到生成的权限参数文件:

image105
image105

将角色分配给用户

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

image106
image106

(注:当角色创建好以后,除了在PFCG里分给其他用户外,实质上可以直接通过SU01来对某用户进行角色的分配:

image107
image107

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

由于没有赋任何权限,所以此时800USER02没有任何权限:

image108
image108
image109
image109

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

image110
image110

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

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

image111
image111
image112
image112

通过上面的设置后,800USER02用户才有权执行VA01、VA02两个事务码,但是,由于前面数据权限字段“销售凭证类型”没有设置任何值,所以在创建时还是会报错:

image113
image113

可以将该凭证类型值加上即可:

image114
image114

权限角色在系统间的传输

image115
image115

自定义权限对象

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

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

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

SU22:维护权限对象的分配,可以通过该事务码为具体事务分配权限对象

权限字段的维护SU20

创建权限字段

image116
image116
image117
image117
image118
image118

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

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

一旦新增了用户的自定义权限对象后,需要单击工具栏中的

image119
image119

按钮,将把新增的权限对象赋值给 SAP_ALL 这个权限参数文件。

创建对象类

image120
image120

创建权限对象

image121
image121
image122
image122

将权限对象分配到事务码SU22

SU22:通过该事务码还可以查询某个事务有哪些权限对象

image123
image123
image124
image124
image125
image125
image126
image126
image127
image127

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

image128
image128
image129
image129

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

image130
image130

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

image131
image131
image132
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
image133

BW授权

BW标准授权(即操作授权)

控制用户是否可以修改、创建、查看报表

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

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

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

image134
image134
image135
image135

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

image136
image136
image137
image137

模板中S_RS_COMP权限数据有两组,多组方便灵活控制权限数据,一般只有一组权限数据,如果需要多组,则可以通过以下方式来让同一权限对象有多组权限数据:

image138
image138

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

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

image139
image139

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

image140
image140
image141
image141
image142
image142
image143
image143

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

image144
image144

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

image145
image145
image146
image146

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

image147
image147
image148
image148

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

image149
image149
手动添加权限对象

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

权限对象:S_RS_COMP

                         S_RS_COMP1

                         S_RFC

                         S_TCODE

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

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

image150
image150
image151
image151
image152
image152
image153
image153

BW分析授权

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

image154
image154

执行rsecadmin事务码:

image155
image155
image156
image156
image157
image157
image158
image158
image159
image159
image160
image160
image161
image161

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

image162
image162
image163
image163
image164
image164
image165
image165
image166
image166

注:如果你的标准授权是使用的是BW授权模板来创建的标准授权,则还是会查询出所有数据,因为授权模板中S_RS_AUTH授权对应中BIAUTH权限字段默认的值就是0BI_ALL,这是一个系统提供的标准分析对象,是可以查看所有权限的分析对象:

image167
image167

所以通过模板创建的标准授权是不行的,所以只能是手工加载一些必要的授权对象后来进行标准授权

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

image160[1]
image160[1]
image161[1]
image161[1]

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

image168
image168

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

image160[2]
image160[2]
image169
image169

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

image170
image170

在程序中调用权限对象

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

在程序中可以通过ABAP程序编辑器快速插入调用权限的代码:

image171
image171
image172
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
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
image174
image175
image175

用户权限缺失检查SU53

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

image176
image176
image177
image177

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

image178
image178
image179
image179

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

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

image180
image180

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 创建用户SU01
  • 权限角色
    • 自定义权限角色 PFCG
      • 为角色分配菜单权限
        • 为角色分配权限数据
          • 将角色分配给用户
            • 权限角色在系统间的传输
            • 自定义权限对象
              • 权限字段的维护SU20
                • 对象类及权限对象的维护SU21
                  • 将权限对象分配到事务码SU22
                  • BW授权
                    • BW标准授权(即操作授权)
                      • 通过角色模板生成权限数据
                      • 手动添加权限对象
                    • BW分析授权
                    • 在程序中调用权限对象
                      • 通过程序检查是否有权执行某个Tcd
                      • 在程序中读取权限对象所设定的权限值
                      • 用户权限缺失检查SU53
                      • 用户、角色、权限对象、事务等之间的关系查看 SUIM
                      相关产品与服务
                      腾讯云 BI
                      腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档