ABAP报表的用户访问控制

User access control of ABAP reports

有一个 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.

综合方法包括两部分:

  1. 整个系统的正确配置,限制目标系统上的关键事务,例如SE38 和许多其他人。通常,由基础团队或系统所有者根据 SAP 安全指南执行。

  2. 在报告本身内部实施授权检查。这是 ABAP 开发人员的职责。

下面,我重点介绍由 ABAP 开发人员执行的第 2 部分。 为了保证可靠的访问控制,我们需要:

  • 验证某人是否有权访问报告本身;

  • 检查此人是否具有访问 table 的必要权限。

由于在大多数生产环境中,通过 SE38 直接执行报告被阻止,我们应该遵循以下步骤:

  1. 创建交易,例如MY_TCODE,通过 SE93.

    进行报告
  2. MY_TCODE 分配给报告。

  3. 在交易 MY_TCODE.

    的报告中添加 AUTHORITY-CHECK OBJECT 'S_TCODE'
  4. 在报告中添加一个 AUTHORITY-CHECK OBJECT 'S_TABU_NAM' 以获得所需的 table,例如MY_TABLE,按通缉activity.

  5. 向用户配置文件添加一个角色,该角色有权通过 SU01.

    执行 MY_TCODE

因此,授权逻辑的行为如下:

  • 如果您 运行 a MY_TCODE,SAP 将根据步骤 #5 验证您是否具有权限。

  • 如果你运行一个报表,那么报表会根据步骤A对指定的MY_TCODE执行一个AUTHORITY-CHECK OBJECT 'S_TCODE'

  • 如果您的步骤“A”和“B”都正常,那么报告将针对所需的 table.

    执行 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.