이 글의 개요와 도달 목표
PFCG로 만든 역할(Role)을 개발기(DEV)에서는 정상 작동하는데, 품질기(QAS)나 운영기(PRD)에 반영하고 나면 "권한 없음" 오류가 쏟아지는 상황은 SAP Basis 초심자가 가장 자주 겪는 사고 유형이다. 원인의 대부분은 Transport Request(TR) 구성 실패다. 프로파일이 함께 담기지 않았거나, 사용자 매핑이 이송 대상에서 빠졌거나, 이송 순서가 뒤엉킨 경우다. 이 글은 PFCG 역할을 운영계까지 안전하게 옮기기 위한 3단계 절차(생성 · 이송 · 검증)와 각 단계에서 반드시 확인해야 할 지점들을 실전 관점에서 정리한다.
- PFCG 역할과 프로파일(Profile)의 차이를 구분한다
- SE10 / STMS 흐름 안에서 역할 TR이 어떻게 이동하는지 이해한다
- PFCG_TIME_DEPENDENCY, SUPC 등 운영계 후처리 트랜잭션을 활용한다
- 이송 실패의 대표 리턴 코드(RC=4, RC=8)를 해석한다
먼저 알고 있어야 할 것
SAP GUI 기본 조작, SE10(Transport Organizer), STMS(Transport Management System) 화면 진입 경험, PFCG에서 역할을 하나라도 만들어 저장/생성해 본 경험이 필요하다. 3-티어 랜드스케이프(DEV→QAS→PRD) 개념과 클라이언트(Client)와 시스템(System)의 차이를 구분할 수 있어야 이 글의 예제가 자연스럽게 읽힌다.
실습 환경과 준비 사항
이 글은 SAP S/4HANA 2022 (또는 SAP NetWeaver AS ABAP 7.55 이상) 기준으로 작성했다. 하위 릴리즈(예: ECC 6.0 EHP7)에서도 트랜잭션 코드와 화면 흐름은 거의 동일하지만, PFCG 화면 레이아웃과 SU25 절차 일부가 다를 수 있다.
- 권한: S_TRANSPRT, S_USER_GRP, S_USER_AGR, S_USER_PRO 오브젝트가 부여된 Basis/보안 관리자 계정
- 랜드스케이프: 최소 DEV 100 / QAS 200 / PRD 300 3-시스템 구성
- 트랜잭션: PFCG, SU01, SU25, SUPC, SE10, SE09, STMS, STMS_IMPORT, PFCG_TIME_DEPENDENCY, SUIM
- 사전 점검: STMS에서 Transport Route가 DEV → QAS → PRD로 정확히 정의되어 있는지, 그리고 QAS/PRD 클라이언트가 이송 수신 가능 상태(SCC4에서 "Changes without automatic recording" 이상)인지
운영계는 일반적으로 SCC4에서 "No changes allowed" 로 잠겨 있으므로 로컬 수정은 불가능하고, TR로만 반영 가능해야 정상이다.
PFCG 역할 이송의 동작 원리
PFCG에서 만든 역할은 실제로 하나의 오브젝트가 아니라 세 개의 논리적 구성요소가 세트로 묶인 형태다. 이 셋을 구분해서 이해하는 것이 트랜스포트 실패를 예방하는 핵심이다.
- Role(AGR_*): 메뉴 트리, 권한 데이터, 사용자 할당 정보를 담는 마스터. 테이블 AGR_DEFINE, AGR_HIER, AGR_1251 등에 저장된다.
- Authorization Profile(T-*/SAP_*): 권한 데이터를 실제 런타임에서 체크하기 위해 생성(generate)된 프로파일. PFCG "Authorizations" 탭에서 신호등이 초록불이 될 때 만들어진다.
- User Assignment: 이 역할을 누구에게 부여할지에 대한 매핑. 일반적으로 이송 대상에서 제외한다(운영계 계정은 각 시스템에서 별도 관리).
역할을 TR에 담을 때 SAP는 위 세 요소 중 어디까지 넣을지 사용자에게 묻는다. 여기서 프로파일 포함 옵션을 놓치면, QAS로 이송된 뒤 신호등이 노랑/빨강이 되어 "권한 없음"이 발생한다. 마치 문서(Role)만 배송되고 도장(Profile)이 빠진 것과 같다.
흐름을 그림으로 표현하면 다음과 같다.
[DEV 100]
PFCG 저장 → TR 생성(Workbench Request)
│
│ (릴리즈: SE10 → Release)
▼
[QAS 200] STMS Import Queue
├─ Role 마스터 반영
├─ Profile 반영 (포함되었을 경우)
└─ 후처리: SU25 Step 2C / PFCG_TIME_DEPENDENCY
│
│ (승인 후 재이송)
▼
[PRD 300] STMS Import Queue → 동일 후처리
또 하나의 함정은 Customizing Request와 Workbench Request 중 무엇을 쓰는가이다. 역할 자체는 Cross-client 오브젝트이므로 Workbench Request로 분류되지만, 조직 레벨 값(예: 회사코드, 판매조직) 같은 커스터마이징 데이터가 함께 걸리면 Customizing Request가 요구될 수 있다. 이 때문에 첫 이송에서 RC=8이 나면 대개 요청 유형이 잘못 지정된 경우다.
3단계 실전 예제
1단계 · 기본: 단일 역할 TR 생성과 릴리즈
가장 단순한 시나리오부터 시작한다. 개발기에서 ZFI_AP_CLERK라는 새 역할을 만들고 QAS로 넘긴다고 하자.
" 시나리오: 신규 역할 ZFI_AP_CLERK 을 DEV(100) → QAS(200) 로 이송
* 1) PFCG 진입
* Transaction: PFCG
* Role: ZFI_AP_CLERK
* → [Create Single Role]
* 2) Menu 탭에서 트랜잭션 FB60, FBL1N 추가
* 3) Authorizations 탭 → [Change Authorization Data]
* → 조직레벨 팝업에서 BUKRS = 1000 입력
* → [Generate] (신호등 초록불 확인)
* → [Back]
* 4) 저장 시 TR 팝업 발생
* "Prompt for Customizing request" 다이얼로그에서
* [Create Request] 클릭 후 아래 값 입력
* Short Description: FI AP Clerk role for BUKRS 1000
* Owner : (본인 계정)
* → 예: TR 번호 DEVK900123 발급됨
여기까지가 TR "안에 담기"까지의 흐름이다. 이 시점에 SE10에서 요청을 열어보면 아래처럼 오브젝트 라인이 잡혀 있어야 한다.
DEVK900123 Workbench Request
└─ Task DEVK900124 (username)
├─ R3TR ACGR ZFI_AP_CLERK " 역할 마스터
└─ R3TR SUSO T-XXXXXXXX " 생성된 프로파일 (자동 포함)
SUSO 라인이 비어 있다면 프로파일이 생성되지 않았거나, 저장 시 "Also transport profiles" 체크를 해제한 것이다. 이 상태로 릴리즈하면 QAS에서 반드시 사고가 난다. 릴리즈는 SE10에서 태스크 → 요청 순으로 트럭 아이콘을 눌러 진행한다.
2단계 · 실무: 대량 역할 + 후처리 자동화
실제 프로젝트에서는 역할 한 개가 아니라 20~200개를 한 번에 옮긴다. 이때 사용하는 관용적인 접근이 Mass Transport이다. PFCG 초기화면에서 [Utilities → Mass Transport of Roles] 를 선택하거나, 프로그램 PFCG_MASSGENERATION / SAP_ALL_ROLES 관련 유틸을 활용한다.
REPORT z_role_transport_helper.
DATA: lt_agr_name TYPE STANDARD TABLE OF agr_define,
lv_rc TYPE sy-subrc.
SELECT * FROM agr_define
INTO TABLE lt_agr_name
WHERE agr_name LIKE 'ZFI_%'
AND parent_agr = space.
LOOP AT lt_agr_name ASSIGNING FIELD-SYMBOL().
CALL FUNCTION 'PRGN_RFC_CHECK_ROLE_STATUS'
EXPORTING
role_name = -agr_name
IMPORTING
subrc = lv_rc.
IF lv_rc <> 0.
WRITE: / -agr_name, '프로파일 미생성 → 이송 제외'.
DELETE lt_agr_name.
ENDIF.
ENDLOOP.
IF lt_agr_name IS INITIAL.
MESSAGE '이송 가능한 역할이 없습니다' TYPE 'E'.
ENDIF.
WRITE: / '검증 통과 역할 개수:', lines( lt_agr_name ).
사전 검증 스크립트를 하나 두면 "신호등이 빨간 채로 릴리즈되어 QAS에서 터지는" 사고를 대부분 막을 수 있다. QAS 반영 이후에는 반드시 아래 후처리를 스케줄링한다.
- PFCG_TIME_DEPENDENCY: 유효 기간이 지난 사용자 할당을 정리하고 프로파일 재비교를 수행. 일반적으로 매일 새벽 배치로 등록한다.
- SUPC: 프로파일 신호등이 빨강/노랑인 역할을 일괄 재생성.
- SU25 Step 2C: SAP 표준 권한 변경 사항을 QAS/PRD 역할에 반영. 업그레이드 직후에는 필수.
3단계 · 운영: 승인 게이트와 회귀 방지
운영계는 되돌리기 어렵기 때문에 이송 전에 최소 세 개의 게이트를 두는 것이 안전하다. 첫째, TR에 담긴 오브젝트 목록의 정합성 점검. 둘째, QAS에서의 실제 로그인 테스트. 셋째, 릴리즈 후 STMS Import Queue의 상태 코드 확인이다.
REPORT z_prd_transport_gate.
PARAMETERS: p_trkorr TYPE trkorr OBLIGATORY.
DATA: lt_e070 TYPE STANDARD TABLE OF e070,
lt_e071 TYPE STANDARD TABLE OF e071.
SELECT * FROM e070 INTO TABLE lt_e070 WHERE trkorr = p_trkorr.
SELECT * FROM e071 INTO TABLE lt_e071 WHERE trkorr = p_trkorr.
READ TABLE lt_e070 INTO DATA(ls_e070) INDEX 1.
IF ls_e070-trstatus <> 'R'.
WRITE: / '[FAIL] TR이 아직 릴리즈되지 않음:', ls_e070-trstatus.
RETURN.
ENDIF.
DATA: lv_acgr TYPE i, lv_suso TYPE i.
LOOP AT lt_e071 INTO DATA(ls_e071).
IF ls_e071-object = 'ACGR'. lv_acgr = lv_acgr + 1. ENDIF.
IF ls_e071-object = 'SUSO'. lv_suso = lv_suso + 1. ENDIF.
ENDLOOP.
IF lv_acgr > 0 AND lv_suso = 0.
WRITE: / '[WARN] 역할은 있지만 프로파일 오브젝트가 없음 → 권한 없음 위험'.
ENDIF.
WRITE: / '[OK] Gate 통과, ACGR=', lv_acgr, ' SUSO=', lv_suso.
운영 배포 뒤에는 SUIM의 "Roles by Complex Selection Criteria"로 특정 사용자에게 역할이 실제로 붙었는지, SU53으로 대표 사용자 한두 명의 권한 체크 실패가 없는지 즉시 회귀 테스트를 수행한다.
자주 마주치는 실수와 해결법
Q1. QAS에 이송 후 "권한 없음" 오류가 발생한다. 개발기에서는 정상인데?
가장 흔한 원인은 프로파일 미포함이다. SUPC를 QAS에서 실행해 해당 역할을 선택 후 [Generate]를 눌러 프로파일을 재생성한다. 이후 재발 방지를 위해 DEV에서 저장 시 "Also generate profile" 옵션이 눌려 있는지, TR 릴리즈 직전 SE10에서 R3TR SUSO 라인 존재 여부를 확인하는 절차를 표준화한다.
Q2. Import 로그에 RC=8이 뜨고 이송이 실패로 종결됐다.
RC=8은 명백한 에러다. SLOG(Import log)를 열어 정확한 메시지를 확인한다. 자주 보이는 사례는 (a) 종속 오브젝트(권한 오브젝트 SU21이 QAS에 아직 없음), (b) 커스터마이징/워크벤치 요청 유형 불일치, (c) 대상 클라이언트가 SCC4에서 잠긴 경우다. 종속성 문제는 선행 TR을 먼저 이송하고, 요청 유형 문제는 SE10에서 오브젝트를 새 TR로 이동시켜 재릴리즈한다.
Q3. 이송 후 사용자에게 역할이 자동으로 붙지 않는다.
User Assignment는 기본적으로 이송 대상이 아니다. 각 시스템에서 SU01/SU10 또는 CUA(Central User Administration)로 별도 부여하는 것이 일반적이다. 이송에 포함하고 싶다면 PFCG 저장 시 "User Assignments" 체크를 명시적으로 켜야 하며, 이 경우에도 대상 시스템에 동일 사용자 ID가 존재해야 의미가 있다. 반영 후에는 PFCG_TIME_DEPENDENCY를 반드시 실행해 사용자-프로파일 매핑을 동기화한다.
Q4. 이송된 역할의 조직레벨 값이 개발기와 다르다.
조직레벨(예: 회사코드)은 시스템별로 값이 다를 수 있고, PFCG는 이 값을 이송에 포함시키지 않는 경우가 있다. QAS/PRD에서 PFCG로 해당 역할을 열어 조직레벨을 재설정한 뒤 프로파일을 재생성하는 것이 안전하다.
더 깊이 살펴볼 주제
기본 흐름이 잡혔다면 Composite Role(복합 역할)의 이송과 CUA 환경에서의 사용자 매핑 자동화, 그리고 charm(Change Request Management)이나 cTMS(Cloud Transport Management Service, BTP)에서의 승인 워크플로 연동으로 확장할 수 있다. S/4HANA Cloud Private Edition을 사용하는 경우 이송 승인 게이트를 SolMan ChaRM에 연결해 감사 대응까지 자동화하는 구성이 권장된다. 보안 감사(SOX, ISO27001) 준비에는 SUIM 리포트 자동화와 SAP GRC Access Control 연계를 검토할 만하다.
댓글 0
아직 댓글이 없습니다.