Eine Berechtigungsprüfung in ABAP ist notwendig, um die angelegten und zugeordneten Rollen, die Berechtigungsobjekte enthalten, zu prüfen. Nur durch die Prüfung der Berechtigungen im ABAP-Code mit der ABAP-Anweisung AUTHORITY-CHECK kann die Datensicherheit und der Datenschutz gewährleistet werden und sichergestellt werden, dass nur berechtigte SAP-Benutzer Daten anlegen, ändern, einsehen oder auch löschen können. Insbesondere bei selbst entwickelten ABAP-Anweisungen sollte daher der Berechtigungsprüfung besondere Aufmerksamkeit geschenkt werden.
In diesem Artikel wird daher die Berechtigungsprüfung in ABAP mit der ABAP-Anweisung AUTHORITY-CHECK näher vorgestellt.
AUTHORITY-CHECK – Syntax
AUTHORITY-CHECK OBJECT auth_obj [FOR USER sap_user] ID id1 {FIELD val1}|DUMMY [ID id2 {FIELD val2}|DUMMY] ... [ID id10 {FIELD val10}|DUMMY].
AUTHORITY-CHECK – Beispiel
In diesem Beispiel wird mit der ABAP-Anweisung AUTHORITY-CHECK geprüft, ob ein SAP-Benutzer ein ABAP-Programm im Paket $TMP verändern kann.
AUTHORITY-CHECK OBJECT 'S_DEVELOP' ID 'DEVCLASS' FIELD '$TMP' ID 'OBJTYPE' FIELD 'PROG' ID 'OBJNAME' DUMMY ID 'P_GROUP' DUMMY ID 'ACTVT' FIELD '02'. IF sy-subrc <> 0. WRITE / 'Keine Berechtigung, um ein ABAP-Programm im Paket $TMP zu verändern.'. ENDIF.
AUTHORITY-CHECK – Definition
Die ABAP-Anweisung AUTHORITY-CHECK prüft, ob im Benutzerstammsatz des aktuellen oder des im Zusatz FOR USER angegebenen Benutzers eine Berechtigung für das angegebene Berechtigungsobjekt eingetragen ist und ob diese Berechtigung für die in der Anweisung angegebene Anforderung ausreicht. Das Berechtigungsobjekt wird als zeichenartiges Feld angegeben. Ohne den Zusatz FOR USER wird die Berechtigung des aktuellen SAP-Benutzers geprüft. Das Ergebnis der Berechtigungsprüfung steht in der Systemvariablen sy-subrc.
Es müssen mindestens ein und maximal 10 verschiedene Berechtigungsfelder des angegebenen Berechtigungsobjekts angegeben werden. Die Berechtigungsfelder werden als zeichenartige Felder in Großbuchstaben angegeben. Wird ein Berechtigungsfeld angegeben, das im Berechtigungsobjekt nicht existiert, kann keine Prüfung erfolgen und die Systemvariable sy-subrc wird auf den Wert 4 gesetzt.
Für jedes angegebene Berechtigungsfeld muss entweder mit FIELD ein zu prüfender Wert als zeichenartiges Feld oder der Zusatz DUMMY angegeben werden. Ein zu prüfender Wert darf maximal 40 Zeichen lang sein und es werden nur maximal 40 Zeichen ausgewertet. Längere Felder führen zu einer Warnung der erweiterten Programmprüfung.
Die Berechtigungsprüfung wird durchgeführt, wenn das Prüfkennzeichen (Transaktion SU22 bzw. SU24) für das angegebene Berechtigungsobjekt für den aktuellen Kontext auf „prüfen“ mit beliebigem Defaultstatus gesetzt ist. Wenn das Prüfkennzeichen auf „nicht prüfen“ gesetzt ist, wird keine Berechtigungsprüfung durchgeführt und sy-subrc wird wie bei einer erfolgreichen Prüfung auf 0 gesetzt.
Eine Berechtigungsprüfung ist erfolgreich, wenn im Benutzerstammsatz eine oder mehrere Berechtigungen für das Berechtigungsobjekt angelegt sind und für mindestens eine dieser Berechtigungen jede der dort definierten Wertemengen für die mit ID angegebenen Berechtigungsfelder den zu prüfenden Wert enthält. Berechtigungsfelder, die in der Anweisung nicht aufgeführt sind oder für die DUMMY angegeben ist, werden nicht geprüft. Bei erfolgreicher Prüfung wird sy-subrc auf 0 gesetzt, ansonsten auf einen Wert ungleich 0.
Die Systemvariable sy-subrc kann im Rahmen der Berechtigungsprüfung durch AUTHORITY-CHECK folgende Werte annehmen:
sy-subrc | Beschreibung |
---|---|
0 | Berechtigungsprüfung erfolgreich oder keine Prüfung durchgeführt |
4 | Die Berechtigungsprüfung war nicht erfolgreich |
12 | Im Benutzerstammsatz wurde keine Berechtigung für das Berechtigungsobjekt gefunden |
24 | Obsolet. Dieser Rückgabewert wird nicht mehr gesetzt |
40 | Ungültige Benutzer-ID angegeben |
Berechtigungsprüfung in ABAP einfach gemacht
Im ABAP Editor kann man einfach und schnell eine Berechtigungsprüfung in ABAP mit dem Muster verwenden. Wenn Du auf den Button „Muster“ in der Toolbar klickst oder die Tastenkombination „Strg + F6“ verwendest, erscheint ein PopUp, in dem man die Anweisung „AUTHORITY-CHECK“ auswählen kann. Im Eingabefeld gibt man das notwendige Berechtigungsobjekt ein und bestätigt die Eingaben mit der Enter-Taste.

Daraufhin wird automatisch die notwendige ABAP-Anweisung mit den Berechtigungsfeldern eingefügt. Nun musst Du nur noch die Werte entsprechend anpassen.

Funktionsbaustein AUTHORITY_CHECK
Anstelle der Anweisung AUTHORITY-CHECK kann der Funktionsbaustein AUTHORITY_CHECK verwendet werden. Der Funktionsbaustein prüft die Berechtigungen für einen angemeldeten SAP-Benutzer. Die Verwendung des Funktionsbausteins AUTHORITY_CHECK ist überflüssig, wenn der Zusatz FOR USER verwendet wird.
Im Function Builder (Transaktion SE37) kann man sich den Funktionsbaustein im Detail ansehen.
Berechtigungen in SQL-Bedingungen umwandeln
Die ABAP-Klasse CL_AUTH_OBJECTS_TO_SQL ermöglicht es, dynamische WHERE-Bedingungen aus Berechtigungsobjekten zu generieren. Mit einer solchen WHERE-Bedingung können bereits beim Zugriff auf eine Datenbanktabelle nur die Daten selektiert werden, für die der aktuelle SAP-Benutzer eine Berechtigung hat. Damit kann die Verwendung der AUTHORITY-CHECK-Anweisung z. B. in einer SELECT-Schleife ersetzt werden.

Über den Autor
Mein Name ist Andreas Geiger und ich bin ein erfahrener Senior SAP Berater. Mit mehr als 10 Jahren Berufserfahrung habe ich mehrere SAP-Projekte erfolgreich abgeschlossen und umfangreiche Kenntnisse in verschiedenen Bereichen wie SAP FI, SAP MM und ABAP erworben. Nun möchte ich mein Wissen mit Dir teilen, um Dir einen Mehrwert zu bieten und Dich bei Deiner täglichen Arbeit mit dem SAP-System zu unterstützen.
ERP UP unterstützen
Wenn Du mit ERP UP zufrieden bist, kannst Du mich gerne unterstützen. Dabei gibt es unzählige Möglichkeiten, wie Du mich einfach und schnell unterstützen kannst. Wie Du genau ERP UP unterstützen kannst, erfährst Du hier. Vielen Dank.