2017년 2월 3일 금요일

라이센스(License) - 중복로그인(MultiLogon) 제한

[출처 : http://yongandju.tistory.com/ ]

SAP를 운영하다 보면 빡빡한 라이센스(License) 정책으로 인해 골치가 조금 아픕니다.

도입 시점에서는 별 문제 없다가도, 불시에 라이센스 검사(Audit)가 나와서 추가 구매를 해야한다고 하니까요.

게다가 비용도 만만치 않습니다ㅜ

듀얼 모니터의 추세로 인해 창을 여러개 띄워놓고 작업을 하게 되는데, 하나의 로그인으로는 5개의 창 밖에는

띄울 수 없는 구조도 중복 로그인을 하게 만드는 이유가 됩니다.

물론, 라이선스 계약(1 User / 1 License)은 반드시 준수해야 합니다.

라이선스 계약이 문제가 될 것이라고 판단 된다면 도입을 보류하던지 협상을 통해 원하는 결과를

이끌어 내야 합니다. 계약할 때는 몰랐다는 식의 대응은 기업의 신뢰도를 손상시키기 때문이죠.




여기서 어느 정도 유두리(?)를 SAP에서 인정해줘야 한다고 주장하는 것은

1 User / 1 License 정책 안에서 1 User가 여러 작업을 할 수 있도록 해달라는 점 입니다.

5개 밖에 띄울 수 없는 창의 개수를 늘려 주던지, 동일 IP에 대한 복수의 로그인을 인정해 줘야 한다는거죠 : )



각설하고, 오늘은 멀티로그인을 허용한 기업에서 최대 로그인을 제한하는 방안을 소개하고자 합니다.



로그인 프로세스 안에 Exit을 걸어두고 다음과 같은 기능을 하게 만드는 것이죠   

  ▶ 동시접속 4개 이상을 초과할 경우 강제 로그아웃
  ▶ 현재 접속한 내역 안내 팝업창
  ▶ 특수 계정은 중복 로그인 허용(ADMIN, INTERFACE 등)


먼저, Exit을 거는 위치는 아래와 같습니다.
  ▶ Function 그룹 : XUSR
  ▶ 모듈 : EXIT_SAPLSUSF_001
  ▶ INCLUDE : ZXUSRU01


소스코드는 하기와 같습니다. 최대 4개 로그인만 허용하도록 한 코드 입니다.
*&---------------------------------------------------------------------*
*&  Include           ZXUSRU01
*&---------------------------------------------------------------------*

TABLES: UINFO.
DATA: N TYPE I VALUE 5.         "<- 최대 허용 중복 로그인 수치
DATA: OPCODE TYPE X VALUE 2, I TYPE I, A(60), N_C(3), B(250), c(250), TEMP_A(250),
          TEMP_B(250), TEMP_C(250),TEMP_D(250).
DATA: I_n TYPE I VALUE 4.
DATA: BEGIN OF BDC_TAB1 OCCURS 5.
        INCLUDE STRUCTURE BDCDATA.
DATA: END OF BDC_TAB1.

DATA: BEGIN OF USR_TABL OCCURS 10.
        INCLUDE STRUCTURE UINFO.
DATA: END OF USR_TABL.

DATA: GT_USR41 LIKE USR41 OCCURS 0 WITH HEADER LINE.

* 예외처리할 ID있으면 아래에 표시
IF  SY-UNAME <> 'ADMIN'
      AND SY-UNAME <> 'SAP*'
      AND SY-UNAME <> 'INTERFACE'
      AND SY-UNAME <> 'DDIC'
      AND SY-UNAME <> 'DDID'
      AND SY-UNAME <> 'ALEREMOTE'
      AND SY-UNAME <> 'BWREMOTE'
      AND SY-UNAME <> 'IF_BIZTALK'
      AND SY-UNAME <> 'ALEREMOTE'
      AND SY-UNAME <> 'RSDUSER'
      AND SY-UNAME <> 'SAPCPIC'
      AND SY-UNAME <> 'TMSADM'.

CALL 'ThUsrInfo' ID 'OPCODE' FIELD OPCODE
  ID 'TAB' FIELD USR_TABL-*SYS*.

LOOP AT USR_TABL.
  IF SY-UNAME = USR_TABL-BNAME AND SY-MANDT = USR_TABL-MANDT.
    I = I + 1.
  ENDIF.

ENDLOOP.


  SELECT *
  INTO TABLE GT_USR41
  FROM USR41
  WHERE BNAME = SY-UNAME.

    I_n = 0.
    TEMP_C = ''.
    TEMP_D = ''.

  LOOP AT GT_USR41.
    TEMP_A  = GT_USR41-TERMINAL.
    TEMP_B  = '  /  '.
    I_n  = I_n + 1.
    IF I_n < 3 .
      CONCATENATE  TEMP_A TEMP_B TEMP_C INTO TEMP_C.
    ELSEIF I_N < 5.
      CONCATENATE  TEMP_A TEMP_B TEMP_D INTO TEMP_D.
    ENDIF.
  ENDLOOP.

IF I >= N.

    N_C = I - 1.

    CONCATENATE ''  SY-UNAME '  계정이 현재  '  N_C ' 개가  로그인  되어  있습니다' INTO A.

      CALL FUNCTION 'POPUP_TO_INFORM'
           EXPORTING
                TITEL = 'SAP ID 정책 위반 안내'
                TXT1  = A
                TXT2  = '중복 로그인 정책에 위반되어 종료 합니다, 접속된 PC명 : '
                TXT3  = TEMP_C
                TXT4 =  TEMP_D.

      MOVE: 'SAPMSSY0' TO BDC_TAB1-PROGRAM,
              '120' TO BDC_TAB1-DYNPRO,
              'X' TO BDC_TAB1-DYNBEGIN.
      APPEND BDC_TAB1.CLEAR BDC_TAB1.
      MOVE: 'BDC_OKCODE' TO BDC_TAB1-FNAM,
             '/nex' TO BDC_TAB1-FVAL.
      APPEND BDC_TAB1.CLEAR BDC_TAB1.

      CALL TRANSACTION 'SM04' USING BDC_TAB1 MODE 'N'.

ENDIF.
ENDIF.

댓글 없음:

댓글 쓰기