SAP tableObjectAGR_DEFINEModuleSECURITY_GRC

AGR_DEFINE table — AGR_DEFINE role header table

AGR_DEFINE is the header table for PFCG roles (activity groups). One row represents one role's basic master record: its technical name, whether it is single, composite, or derived, and its link back to a parent role if derived. It does not store the authorization objects or the user assignments themselves; those live in AGR_1251 and AGR_USERS respectively.

This page covers what a row in AGR_DEFINE actually represents, the fields worth trusting, and how the table joins to the rest of the PFCG data model. The pitfalls section focuses on the common mistake of treating this table as proof of a role's authorization content or its live user assignments, when it only proves the role's existence and basic type.

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

What it stores

AGR_DEFINE holds the base master record for a PFCG role, which SAP internally still calls an activity group, hence the AGR prefix used across this whole family of tables. Each row corresponds to exactly one role name and carries the administrative facts about that role: when it was created and last changed, and by whom, plus its category, meaning whether it is a single role, a composite role that bundles other roles, or a derived role that inherits menu and authorization structure from a parent role. It does not hold the menu, the authorization objects, or the list of assigned users. Those are held in separate tables keyed on the same role name. A missing row here for a role name that shows up elsewhere in the AGR_* tables usually means the role was deleted, renamed, or never transported correctly.

Key fields

  • MANDT - client, every row is client-dependent, no cross-client role sharing
  • AGR_NAME - the technical role name, primary key, referenced by every other AGR_* table
  • ERNAM / ERDAT - user and date that created the role record (standard SAP creation stamp fields, present on most master tables of this kind)
  • AENAM / AEDAT - user and date of the last change to the role record

How it joins the data model

  • AGR_DEFINE-AGR_NAME = AGR_USERS-AGR_NAME, to find which users are assigned to the role
  • AGR_DEFINE-AGR_NAME = AGR_1251-AGR_NAME, to reach the authorization object values maintained in the role
  • AGR_DEFINE-AGR_NAME = AGR_TCODES-AGR_NAME, to reach the transactions assigned in the role menu
  • AGR_DEFINE-AGR_NAME joins to a language-dependent text table for the role's short description, since AGR_DEFINE itself does not carry the description in a readable long text

How to read it safely

Always restrict by MANDT first, this is a client-dependent table and cross-client selection returns meaningless duplicates across landscapes replicated in the same system. AGR_NAME is the natural filter; use the customer naming convention prefix (commonly Z or Y for custom roles) to scope a selection before joining outward. The table itself is small relative to AGR_1251 or AGR_USERS, since it holds one row per role rather than one row per authorization field or per user assignment, so it is rarely the performance bottleneck. The bottleneck sits in whatever table gets joined to it next.

How to prove it in the data

To confirm a role genuinely exists and to check its type before chasing an authorization complaint, select AGR_DEFINE with MANDT equal to the working client and AGR_NAME equal to the role in question. If the row is missing, the role name quoted by the user or found in AGR_USERS is stale, misspelled, or was deleted after assignment; stop investigating authorization content and go fix the assignment or transport gap first.

ECC vs S/4HANA

AGR_DEFINE continues to exist as a standard table in S/4HANA and PFCG remains the transaction that maintains it; no compatibility view replacement is required because the underlying role concept did not change shape. Business roles and Fiori catalog assignments built for Fiori launchpad access sit on top of this same PFCG role model rather than replacing it, so authorization troubleshooting for Fiori-based access still traces back through AGR_DEFINE and its sibling tables.

Common pitfalls

  • Treating a row's existence in AGR_DEFINE as proof the role currently grants any specific access; this table has no authorization values, only AGR_1251 does, and a role can exist here fully empty of authorizations
  • Assuming the role's short description accurately reflects what the role actually does; descriptions are free text maintained manually and drift out of sync with the real authorization content over time
  • Confusing a role existing in AGR_DEFINE with it being assigned to any user; existence and assignment are recorded in different tables, always check AGR_USERS separately before concluding a role is in use
  • For derived roles, assuming the link to the parent role means the derived role's authorization data is currently synchronized with the parent; the linkage only records the relationship, not whether the derived role has been regenerated after the parent last changed
  • Reading the creation or change timestamp as the date authorizations were last generated; those stamps reflect changes to the role header record, not necessarily a profile regeneration event
  • Assuming a role missing from AGR_DEFINE in a target system after transport means the transport failed outright, when it can also mean the role object was deliberately excluded or renamed during transport routing

Whose problem this is

Role master data questions belong to the security or identity access management team that owns role design and PFCG maintenance. GRC access risk analysis teams query this table indirectly through their tools when scoping risk analysis to specific roles. Basis is only involved if the table itself needs technical repair, which is rare.

Related SAP objects

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

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