User Has the Role But Transaction Still Fails
The role assignment being visible in SU01 does not mean the role grants access. The usual causes are an ungenerated profile, blank org level values in a derived role, an authorization object the transaction checks that was never proposed into the role, or a validity period on the role assignment that has expired or not started yet. Confirm with an authorization trace rather than SU53 alone.
This page covers why a user with a role listed against their user ID still gets 'no authorization' when running the transaction. It orders the checks from most to least likely and separates data fixes that can be applied directly from configuration changes that require a transport.
Published 16 Sept 2026· 1,194 words
The business symptom
The user says the role was assigned last week, or has always been there, and the transaction still throws a authorization error, sometimes with no useful message beyond 'you are not authorized'. The helpdesk checks SU01, sees the role sitting under the user's assignment tab, and escalates because 'the role is clearly there'. Sometimes the complaint is inconsistent: the transaction worked yesterday, or works for one plant or company code and not another, or works in QA but not production. Occasionally the user reports that a colleague with 'the same role' can run the transaction fine, which usually means the roles are not actually identical, just similarly named. The report almost never mentions org levels, profile generation, or authorization objects, because from the user's side the only visible fact is: role present, access denied.
The configuration behind it
- Role not generated. The role was changed in PFCG (menu or authorization data) and saved but the profile was never regenerated, or generation failed silently and the traffic light sits on yellow or red. The role exists and is assigned, but the profile behind it in the user buffer is stale or missing the new object.
- Blank org level in a derived role. The parent role carries the authorization structure, the derived role is supposed to fill in plant, company code, or sales org, but the field was left open (shown as needing maintenance in PFCG) instead of populated, so the object never matches at runtime.
- Authorization object not proposed for the transaction. A custom program or a changed standard transaction performs an AUTHORITY-CHECK on an object that SU24 never proposed, so it was never pulled into the role's authorization data at all. This is a distinct and common cause covered on its own page.
- Validity period on the role-to-user assignment. The assignment in SU01 has a 'valid from' date in the future or a 'valid to' date already passed, which SU01 will show if the assignment row is expanded, but is easy to miss on a quick glance.
- Composite role without the single role behind it. The user is assigned the composite, but the specific single role that carries the transaction's authorization was removed from the composite, or was never generated even though the composite shows green.
- Field value mismatch, not a missing field. The org level or a custom field is filled but with the wrong value: wrong plant, wrong purchasing organization, wrong document type, so the check fails for that specific instance even though the object is present.
- Role changed in the design or quality system but the transport carrying the new authorization data was never released or never imported into the system the user is actually working in.
- User buffer not refreshed after a role or assignment change, which is a distinct and frequent cause with its own resolution path and is covered separately.
What to check
Start with SU53 immediately after the failed attempt, but treat it as a hint, not proof, since it only shows the last object checked, not the full check sequence. Run an authorization trace with ST01 or the newer authorization trace transaction while the user reproduces the error, this shows every object checked and whether each passed or failed. Open PFCG for the role in question and check the traffic light status on the authorization data tab, confirm it is green and that the last generation timestamp is recent. Check the org level fields in the role for blank or asterisk values that should carry a specific value. In SU01, expand the role assignment line for the user and check the validity dates. If a composite role is involved, drill into each single role inside it and confirm each one is generated. Compare the role in the system where the user is failing against the same role in the design system using SUIM's role comparison to catch a missed transport.
How to prove it in the data
Capture an authorization trace for the exact user, exact transaction, exact time window of the failed attempt. The trace output lists every object checked with its field values and the pass or fail result; the first failed line is the object to fix. Cross-check that object and its field values against the role's authorization data in PFCG for the same role listed in SU01, and confirm the assignment's validity dates cover the attempt date.
Resolution path
If the profile is ungenerated, regenerate it in PFCG and have the user log off and on; this is a data action inside the target system, no transport needed unless the underlying role definition also changed and needs to move from a design system. If an org level is blank, populate it in the derived role's authorization data and regenerate, this is a config change that must be transported through the landscape if the role originates upstream. If an authorization object is missing because it was never proposed, add it manually to the role's authorization data or fix the SU24 proposal for the transaction and regenerate; both routes require a transport if the role is maintained upstream. If the assignment validity period is wrong, correct the dates directly in SU01, this is a data fix local to each client and does not transport. If a transport was simply never imported, get it moved through the landscape rather than remediating the target system by hand, otherwise the fix will be lost on the next import. If the cause is a field value mismatch, correct the value in the role and regenerate, again a config change needing transport if the role is centrally maintained.
The fix people try first (and why it fails)
The reflex fix is to remove and re-add the same role to the user, or to add a broader role, or grant temporary SAP_ALL to unblock the ticket. Re-adding the identical role does nothing if the profile was never generated or the org level was never filled, because the same broken role is reassigned. Broad emergency access hides the real gap and tends to stay in place long after the ticket closes, becoming an audit finding later. Neither action tells anyone which object actually failed, so the next user who needs the same transaction hits the identical wall.
Whose problem this is
Security or GRC access management owns role generation, org level maintenance, and assignment validity. The functional module owner confirms which value the transaction actually requires, since security cannot guess the correct plant or document type. The handover note should carry the trace output, the failed object and field, the role name and system, and whether the fix needs a transport or was a direct data correction.
Related SAP objects
Reviewed pages this object connects to in the ERPClimb knowledge graph.
Source: ERPClimb — https://erpclimb.com/sap-functional-issues/user-cannot-execute-a-transaction-despite-having-the-roleERPClimb is an independent platform and is not affiliated with SAP SE. Reference pages are written and reviewed by SAP consultants for learning and troubleshooting.