SAP tableObjectUST04ModuleSECURITY_GRC

UST04 table — User to Authorization Profile Assignment Table

UST04 stores the assignment of authorization profiles to users. One row is one user-profile pair. It holds both legacy directly-assigned profiles and the generated profiles that PFCG writes when a role is assigned to a user, so a profile appearing here does not by itself tell you whether it came from a role or from a manual assignment.

UST04 is the transparent table behind the profile list a user carries in the SAP authorization concept, populated both by legacy direct profile assignment and by PFCG role generation. This page covers how to read it, the join into role and profile data, and the recurring mistake of treating it as a clean picture of current access.

Reviewed by an ERPClimb SAP consultant on 15 Sept 2026· 947 words

What it stores

One row in UST04 represents the assignment of one authorization profile to one user in one client. In the classic (pre-role) authorization concept this table was maintained directly through profile assignment in SU01 or SU02/SU03. In a role-based system it is populated indirectly: when a role is generated and assigned to a user through PFCG, the generated profile name for that role is written into UST04 for every user assigned to it. The table therefore mixes two origins of authorization: manually assigned single or composite profiles from older setups, and role-derived generated profiles from current setups. It is the table SU01 reads to show the 'Profiles' tab for a user, and it is the table most audit scripts scan when checking who holds a given profile, including SAP_ALL.

Key fields

  • MANDT - client, table is client-dependent
  • BNAME - user master record name the profile is assigned to
  • PROFN - authorization profile name assigned to the user, either a manually maintained profile or a PFCG-generated profile

How it joins the data model

  • UST04-BNAME = USR02-BNAME to confirm the user exists and check its status (locked, valid dates) before trusting a profile assignment
  • UST04-BNAME = AGR_USERS-UNAME to determine whether a profile in UST04 is explained by a currently assigned role, or is orphaned
  • UST04-PROFN = UST12-PROFN to pull the authorization object values actually contained in that profile
  • UST04-BNAME = USR04-BNAME when reconciling against older systems that still carry the legacy authorization data table

How to read it safely

The table is client-dependent, so MANDT must be part of every selection when working across systems or client copies. For a single-user question, restrict on BNAME first; that is highly selective and returns a short list even in large systems. For a single-profile question, such as who holds SAP_ALL, restrict on PROFN; this can still return a large result set because generated profiles from broadly assigned roles create many rows. Never scan UST04 without at least one of these two restrictions, particularly in systems with a large number of PFCG roles, since every role generation writes rows here in addition to the role assignment itself in AGR_USERS.

How to prove it in the data

Symptom: a user appears to have access that no currently assigned role explains. Select UST04 for that BNAME and list every PROFN. Then select AGR_USERS for the same UNAME and list the generated profile names tied to currently assigned roles. Any PROFN present in UST04 but absent from that list is either a legacy manual profile assignment or a stale generated profile left behind after a role was removed without a user master comparison being run.

ECC vs S/4HANA

The table structure and its role in the authorization concept carry into S/4HANA unchanged. It is still written whenever a PFCG role is generated and assigned, and it remains the correct place to check the raw profile-to-user link. In practice most consultants work from AGR_USERS and the role assignment first, since role-based authorization is the standard model in S/4HANA, and only drop down to UST04 when a profile-level discrepancy needs to be confirmed directly.

Common pitfalls

  • Reading a profile in UST04 as proof of a deliberate, current authorization decision. It may be a generated profile whose owning role was assigned years ago and never revisited.
  • Assuming removing a role in PFCG immediately clears the matching row from UST04. It does not; the profile stays assigned until a user master comparison is run for that user or role, which is why a removed role can still appear to grant access for a period after the change.
  • Treating the row count per user as a proxy for how much access the user has. A generated profile can exist with no meaningful authorization values if generation failed or was never re-run after an object change.
  • Deleting rows directly in UST04 as a quick access fix. This desynchronizes the user master from the role assignment it is supposed to reflect and will either be silently regenerated on the next comparison or leave the user in an inconsistent state that SU53 and later audits cannot explain.
  • Confusing UST04 with USR04. USR04 is the older authorization data table from earlier releases; current systems run profile assignment through UST04, and documentation that references USR04 for a live system is usually out of date.
  • Forgetting the client restriction when comparing UST04 across a landscape, which produces cross-client noise that looks like duplicate or conflicting assignments when it is simply different clients.

Whose problem this is

This is a security and GRC team question, not an application team one. The security administrator running SU01 and PFCG is the one whose actions write to this table, and any discrepancy found here should be resolved through role assignment and user comparison in those transactions, never through direct table maintenance.

Related SAP objects

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

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