【发布时间】:2020-07-05 22:00:18
【问题描述】:
有一个ABAP报告,在生产系统上应该通过访问控制来保护,以避免被未经授权的人执行。
什么是限制和控制仅授权人员访问 ABAP 报告和表格的正确方法?
【问题讨论】:
标签: permissions abap roles user-permissions
有一个ABAP报告,在生产系统上应该通过访问控制来保护,以避免被未经授权的人执行。
什么是限制和控制仅授权人员访问 ABAP 报告和表格的正确方法?
【问题讨论】:
标签: permissions abap roles user-permissions
全面的方法由两部分组成:
整个系统的正确配置,限制目标系统上的关键事务,例如SE38 和许多其他人。通常由基础团队或系统所有者根据 SAP 安全指南执行。
报告本身内部的授权检查实现。这是 ABAP 开发人员的职责。
下面,我将重点介绍由 ABAP 开发人员执行的第 2 部分。 为了保证可靠的访问控制,我们需要:
验证某人是否有权访问报告本身;
检查此人是否具有对表格的所需访问权限。
由于在大多数生产环境中通过SE38 直接执行报告被阻止,我们应该遵循以下步骤:
创建一个事务,例如MY_TCODE,通过SE93进行报告。
将MY_TCODE 分配给报告。
将AUTHORITY-CHECK OBJECT 'S_TCODE' 添加到事务MY_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”都正常,那么报表将为所需的表执行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.
【讨论】:
如果您想限制对整个报告的访问,您可以在事务级别执行此操作。创建事务时,您可以指定授权对象,也可以选择指定字段。未获得此授权对象授权的用户将被排除在报告之外。确保用户无法通过 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.
【讨论】: