ERPClimb logoERPClimb
SAP authorization objectObjectS_TCODEModuleSECURITY_GRC

S_TCODE — S_TCODE Transaction Start Authorization

S_TCODE is the authorization object that controls whether a user is allowed to start a given transaction code at all. It has a single field, TCD, holding the transaction code value. Passing S_TCODE only clears the door to enter the transaction screen; it says nothing about whether the user can display, change, or post anything once inside, which is the single most common source of confusion around this object.

This page covers what S_TCODE actually gates versus what people assume it gates, the one field it checks, where in the transaction-start flow SAP triggers it, and how to read a failed check in SU53 or a trace before escalating to security. It also covers the recurring pitfall where a passed S_TCODE check masks a failure on a completely different object further down the call stack.

Reviewed by an ERPClimb SAP consultant on 16 Sept 2026· 900 words

What it protects

S_TCODE guards entry into a transaction code, nothing more. It is the gatekeeper check that runs the instant a user tries to open a transaction, whether by typing it in the command field, clicking a menu node, or being navigated there from another screen. The structural fact that causes most confusion: S_TCODE has no concept of what the transaction does once opened. A user can hold S_TCODE for SM30 and still be denied every table inside it because SM30's own logic runs a separate check against a table maintenance object. Consultants who see a role fail and only check whether the tcode is listed in the role menu are checking the wrong layer half the time. S_TCODE tells you the user reached the front door; every subsequent authority check inside the transaction's code is a separate lock the user still has to clear.

Fields checked

  • TCD - the transaction code being started. Values are the exact four-to-twenty character tcode strings (for example VA01, ME21N, SM30). A role can list one specific tcode, several discrete tcodes, or in rare and generally discouraged cases a wildcard value covering a range.

Where it is checked

  • Transaction start via the command field, menu navigation, or a favourite - checked before the transaction's initial screen loads, before any other authority-check statement in the transaction's code runs
  • Parameter transactions and variant transactions defined in the transaction maintenance object - the check runs against the tcode the user actually entered, not necessarily the underlying transaction it calls
  • CALL TRANSACTION issued from custom ABAP code - only triggers the S_TCODE check if the statement explicitly includes the authorization-check addition; developers can and do omit it, which is a known gap worth confirming during any custom-program review
  • Batch input sessions and background job steps that invoke a transaction - checked at the point the job step starts the transaction, using the executing user's authorizations, not the scheduler's
  • Reports run directly through the ABAP editor or reporting transaction rather than through a transaction code are governed by a program-level object instead, not by S_TCODE

How to trace a failed check

Start with SU53 immediately after the failure, while the session is still live, since it only shows the most recent failed check for that user. Look for S_TCODE in the failed-object list and compare the TCD value shown against what the role actually carries in its authorization data. If SU53 shows an unrelated object or nothing useful, the S_TCODE check likely passed and the real block is downstream. If SU53 is stale or empty, ask security to run an authorization trace (ST01 or the newer trace transaction), have the user reproduce the exact failure, then filter the trace by user ID and object S_TCODE to see the return code recorded at that instant. Hand security the user ID, the exact tcode, the client, and the timestamp of the reproduction, plus whether it was a menu click or a direct tcode entry, since that distinguishes an S_TCODE gap from a CALL TRANSACTION bypass elsewhere in the same workflow.

Whose problem this is

Ownership of the fix sits with the security team; the functional consultant's job is to supply an unambiguous request, not to guess at role content. A usable request states the user ID, the exact tcode failing, the client and system, the business justification, and whether the tcode should be added through the role menu (preferred) rather than typed directly into the authorization data tab.

Common pitfalls

  • A passed S_TCODE check is mistaken for full access to the transaction; the real failure is on a secondary object checked later in the program, and adding a wildcard to S_TCODE does nothing to fix it while creating an audit finding
  • Adding a tcode directly into the authorization data tab instead of the role menu tab; the profile generator derives S_TCODE from the menu, so a manually inserted entry can be silently lost the next time the role is regenerated or merged
  • Custom Z-transactions with no authorization object assigned in the transaction definition - S_TCODE is the only line of defence for them, so a missing menu entry is the entire cause of the failure with nothing else to check
  • A CALL TRANSACTION in custom code without the authorization-check addition bypasses S_TCODE entirely, so a transaction can appear to work fine from a custom program while failing when the same user tries the standard menu path, and the inconsistency is mistaken for a role defect
  • Composite roles carrying the same tcode with conflicting organizational-level restrictions on a downstream object; the S_TCODE portion of the trace shows a clean pass, so time gets wasted looking at the wrong role instead of the object actually enforcing the restriction

Take the next diagnostic step

Use these ERPClimb resources to explore the scenario. Verify all actions in your SAP system before making production changes.

Related SAP objects

Reviewed pages this object connects to in the ERPClimb knowledge graph.

Lessons and topics

Source: ERPClimb — https://erpclimb.com/sap-auth-objects/s-tcodeERPClimb is an independent platform and is not affiliated with SAP SE. Reference pages are written and reviewed by SAP consultants for learning and troubleshooting.