有一个ABAP报告,它在生产系统上应该受到访问控制的保护,以避免未经授权的人执行。
限制和控制ABAP报告和表的访问权限的正确方法是什么?
如果您想限制对整个报告的访问,可以在事务级别进行限制。创建事务时,可以指定授权对象,也可以选择指定字段。未对此授权对象进行授权的用户将从报告中排除。确保用户无法通过SE38或类似事务运行报告来规避此问题。
然而,有时您需要对此进行编程。例如,您的报告中可能有一个公司代码的选择字段,并且您只希望允许某些用户查看某些公司代码的数据。在这种情况下,可以使用AUTHORITY-CHECK关键字。这里有一个例子:
AUTHORITY-CHECK OBJECT 'BUKRS_COMP'
ID 'BUKRS' FIELD lv_bukrs
ID 'ACTVT' FIELD '03'. "read access
IF sy-subrc <> 0.
MESSAGE 'No authorization' TYPE 'E'.
ENDIF.
综合方法由两部分组成:
-
整个系统的正确配置,限制目标系统上的关键事务,例如
SE38
和许多其他系统。通常由基础团队或系统所有者根据SAP安全指南执行。 -
在报告本身内部实现授权检查。这是ABAP开发人员的职责。
下面,我将关注由ABAP开发人员执行的第2部分。为了确保可靠的访问控制,我们需要:
-
验证某人是否拥有对报告本身的权限;
-
以检查该人员是否具有所需的表访问权限。
由于在大多数生产环境中,通过SE38
执行的直接报告被阻止,我们应该遵循以下步骤:
-
通过
SE93
为报告创建事务,例如MY_TCODE
。 -
将
MY_TCODE
分配给报告。 -
在事务
MY_TCODE
的报告中添加一个AUTHORITY-CHECK OBJECT 'S_TCODE'
。 -
根据需要的活动,将
AUTHORITY-CHECK OBJECT 'S_TABU_NAM'
添加到所需表的报告中,例如MY_TABLE
。 -
将具有通过
SU01
执行MY_TCODE
权限的角色添加到用户配置文件中。
因此,授权逻辑的行为如下:
-
如果您运行
MY_TCODE
,SAP将验证您是否具有步骤#5的权限。 -
如果运行报告,则该报告将根据步骤a为指定的
MY_TCODE
执行AUTHORITY-CHECK OBJECT 'S_TCODE'
。 -
如果你踩";A";以及";B";如果OK,则报告将为所需的表执行
AUTHORITY-CHECK OBJECT 'S_TABU_NAM'
。
最终ABAP代码:
" check the access-right for the tcode
AUTHORITY-CHECK OBJECT 'S_TCODE'
ID 'TCD' FIELD 'MY_TCODE'.
IF sy-subrc <> 0.
MESSAGE 'Access denied to the TCODE MY_TCODE' TYPE 'E'.
EXIT.
ENDIF.
" check write permission for the table
AUTHORITY-CHECK OBJECT 'S_TABU_NAM'
ID 'ACTVT' FIELD '02'
ID 'TABLE' FIELD 'MY_TABLE'.
IF sy-subrc <> 0.
MESSAGE 'Access denied to the table MY_TABLE' TYPE 'E'.
EXIT.
ENDIF.