TCode для отдела и пользователя

У меня странная просьба от бизнеса. Им нужен отчет, где они дают tcode или tcodes, и программа проверит, в каком отделе есть это/эти и какие пользователи.

Хорошо, я нашел пару таблиц, таких как AGR_TCODES (присвоение ролей Tcodes), AGR_USERS (присвоение ролей пользователям) и USER_ADDR (пользователи по адресным данным), чтобы найти то, что я хочу.

Мой вопрос: если у пользователя есть доступ к tcode, который не принадлежит ни к одной из его ролей, как мы можем это поймать?

Например: у меня есть доступ к VA03, но ни одна из моих ролей не связана с этим tcode.

Есть ли способ поймать это?


person ekekakos    schedule 22.01.2018    source источник


Ответы (3)


Попробуйте транзакцию S_BCE_68001397 (выбор пользователя на основе значений разрешений), выберите для объекта разрешений S_TCODE и транзакция в качестве значения разрешения должна предоставить вам нужный список. Транзакция S_BCE_68001398 делает то же самое, но не позволяет запрашивать у пользователей другие объекты разрешений.

Проблема с этими отчетами заключается в том, что может быть сложно или утомительно проверять большое количество кодов транзакций. Вы можете просмотреть исходный код этих транзакций, создать отчет RSUSR002 и посмотреть, сможете ли вы использовать локально определенные классы, используемые в отчетах, для запроса нескольких кодов транзакций и создания отчета на основе ваших конкретных требований.

person Dirk Trilsbeek    schedule 22.01.2018
comment
S_BCE_68001398 также работает специально для доступа на уровне транзакций. - person Bryan Cain; 22.01.2018
comment
Эти TCodes доступны в SUIM, я думаю - person Eralper; 24.01.2018

Вы можете использовать таблицы AGR_1251 и AGR_USERS.

AGR_1251 предоставит вам роли с объектом S_TCODE и значением = tcode, заданным пользователем.

Затем вы переходите к таблице AGR_USERS и получаете пользователей для роли с S_TCODE= tcode.

SELECT adr_users~UNAME
FROM AGR_USERS JOIN AGR_1251 ON AGR_USERS~MANDT = AGR_1251~MANDT 
                            and AGR_USERS~AGR_NAME = AGR_1251~AGR_NAME
WHERE AGR_1251~OBJECT = 'S_TCODE'
AND AGR_1251~LOW = param_tcode.

Надеюсь это поможет

person Rene MF    schedule 23.01.2018

Наконец, с помощью Дирка Трилсбека я нашел решение того, что искал. Вот выбор:

  SELECT DISTINCT a~von e~ttext d~department d~bname d~name_first
                  d~name_last d~name_textc c~profile
      INTO CORRESPONDING FIELDS OF TABLE gt_tcode_per_dprtm_usr
    FROM ust12 AS a
      INNER JOIN ust10s AS b
        ON  a~auth = b~auth AND
            a~objct = b~objct AND
            a~aktps = b~aktps
      INNER JOIN ust04 AS c
        ON b~profn = c~profile
      INNER JOIN user_addr AS d
        ON c~bname = d~bname
      INNER JOIN tstct AS e
        ON e~tcode = a~von
    WHERE a~objct = 'S_TCODE' AND
          a~von   IN so_tcode AND
          e~sprsl = 'G'.

Я хочу поблагодарить всех вас за ваши ответы.

person ekekakos    schedule 26.01.2018