Контроль доступа пользователей к отчетам ABAP - PullRequest
0 голосов
/ 25 марта 2020

Существует отчет ABAP, который в производственной системе должен быть защищен контролем доступа, чтобы избежать выполнения посторонним лицом.

Как правильно ограничивать и контролировать доступ к отчету ABAP и таблицам для только уполномоченные лица?

Ответы [ 2 ]

1 голос
/ 25 марта 2020

Комплексный подход состоит из двух частей:

  1. Правильная конфигурация всей системы с ограничением ключевых транзакций в целевой системе, например SE38 и многих других. Обычно выполняется основной группой или владельцем системы на основе рекомендаций по безопасности SAP.

  2. Реализация проверки полномочий в самом отчете. Это обязанность ABAP-разработчика.

Ниже я остановлюсь на части № 2, выполняемой ABAP-разработчиком. Чтобы обеспечить надежный контроль доступа, нам необходимо:

  • , чтобы убедиться, что у человека есть разрешение на сам отчет;

  • , чтобы проверить, у пользователя есть требуемый доступ к таблицам.

Поскольку в большинстве производственных сред непосредственное выполнение отчета через SE38 блокируется, мы должны выполнить следующие шаги:

  1. Создать транзакцию, например MY_TCODE, для отчета с помощью SE93.

  2. Присвоить MY_TCODE отчету.

  3. Добавить AUTHORITY-CHECK OBJECT 'S_TCODE' в отчет по транзакции MY_TCODE.

  4. Добавить AUTHORITY-CHECK OBJECT 'S_TABU_NAM' в отчет для требуемой таблицы, например MY_TABLE, в соответствии с требуемой активностью.

  5. Добавьте в профиль пользователя роль с разрешением на выполнение MY_TCODE через SU01.

В результате логин авторизации c будет вести себя следующим образом:

  • Если вы запускаете MY_TCODE, SAP проверяет, есть ли у вас разрешение из-за шага # 5.

  • Если вы запустите отчет, тогда отчет выполнит AUTHORITY-CHECK OBJECT 'S_TCODE' для указанного MY_TCODE в соответствии с шагом A.

  • Если с шагами «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.
1 голос
/ 25 марта 2020

Если вы хотите ограничить доступ ко всему отчету, вы можете сделать это на уровне транзакции. При создании транзакции вы можете указать объект авторизации, при желании также с указанными полями. Пользователи, которые не авторизованы для этого объекта авторизации, будут исключены из отчета. Убедитесь, что пользователи не могут обойти это, запустив отчет через 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.
...