AUTHORITY-CHECK im Programm

Das AUTHORITY-CHECK Statement

Es gibt einige Dinge, die immer wieder von Entwicklern beim Rollenadmin erfragt werden, so auch das Handling mit dem AUTHORITY-CHECK! Als Rollenadministrator hat man ja nicht unbedingt den vollständigen Überblick über die ABAP-Sprache, deshalb soll die Definition AUTHORITY-CHECK Statement hier nochmals dargestellt werden.

Die Dokumentation des AUTHORITY-CHECK in der ABAP-Hilfe besagt das folgende [Quelle: linkhttp://help.sap.com/abapdocu_70/de/ABAPAUTHORITY-CHECK.htm]:

Syntax:

AUTHORITY-CHECK OBJECT auth_obj [FOR USER user]
   ID id1 {FIELD val1}|DUMMY
   [ID id2 {FIELD val2}|DUMMY]
      …
   [ID id10 {FIELD val10}|DUMMY].

Zusatz:

… FOR USER user

Wirkung

Diese Anweisung überprüft, ob im Benutzerstammsatz des aktuellen oder des in user angegebenen Benutzers für das im Feld auth_obj angegebene Berechtigungsobjekt eine Berechtigung eingetragen ist und ob diese für die in der Anweisung spezifizierte Anforderung ausreicht. Für auth_obj wird ein flaches zeichenartiges Feld erwartet, das den Namen eines Berechtigungsobjekts enthält. Ohne den Zusatz FOR USER wird die Berechtigung des aktuellen Benutzers überprüft.

Mit id1 … id10 muss mindestens ein und können maximal 10 Berechtigungsfelder des angegebenen Berechtigungsobjekts aufgeführt werden. Für id1 … id10 werden flache zeichenartige Felder erwartet, die die Namen der Berechtigungsfelder in Großbuchstaben enthalten. Wenn ein Berechtigungsfeld angegeben ist, das nicht im Berechtigungsobjekt vorkommt, kann keine Prüfung durchgeführt werden und sy-subrc wird auf 4 gesetzt. Für jedes angegebene Berechtigungsfeld muss entweder mit FIELD ein zu prüfender Wert in einem flachen zeichenartigen Feld val1 … val10 oder der Zusatz DUMMY angegeben werden.

Die Berechtigungsprüfung wird durchgeführt, wenn das Prüfkennzeichen für das angegebene Berechtigungsobjekt für den aktuellen Kontext auf prüfen mit beliebigem Vorschlagsstatus gesetzt ist. Wenn das Prüfkennzeichen auf nicht prüfen gesetzt ist, wird keine Berechtigungsprüfung durchgeführt und sy-subrc 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 wenn für mindestens eine der Berechtigungen jede der Wertemengen, die dort für die mit FIELD angegebenen Berechtigungsfelder definiert sind, den jeweils zu prüfenden Wert val1 … val10 umfasst. Berechtigungsfelder, die nicht in der Anweisung aufgeführt sind oder für die DUMMY angegeben ist, werden nicht überprüft. Bei erfolgreicher Überprüfung wird sy-subrc auf 0, ansonsten auf einen Wert ungleich 0 gesetzt (siehe unten).

Systemfelder

sy-subrc Bedeutung
0 Berechtigungsprüfung erfolgreich oder es wurde keine Prüfung ausgeführt. Bei Ausführung der Prüfung wurde eine Berechtigung für das Berechtigungsobjekt im Benutzerstammsatz gefunden, deren Wertemengen die angegebenen Werte umfassen.
4 Berechtigungsprüfung nicht erfolgreich. Es wurden zwar eine oder mehrere Berechtigungen für das Berechtigungsobjekt im Benutzerstammsatz gefunden, deren Wertemengen umfassen aber nicht die angegebenen Werte oder es wurden falsche oder zu viele Berechtigungsfelder angegeben.
12 Es wurde keine Berechtigung für das Berechtigungsobjekt im Benutzerstammsatz gefunden.
24 Es wurden falsche oder eine falsche Anzahl Berechtigungsfelder angegeben. Dieser Rückgabewert wird seit Release 6.20 nicht mehr und zu Release 4.6 nur gesetzt, wenn der Profilparameter „auth/new_buffering“ einen Wert kleiner als 3 hat.
40 In user wurde eine ungültige Benutzerkennung angegeben.

Hinweise

Die Berechtigungsfelder eines Berechtigungsobjekts sind Felder für Daten und ein Feld namens ACTVT für Aktivitäten. Aktivitäten werden durch zweistellige Kürzel dargestellt, die in der Spalte ACTVT der Datenbanktabelle TACT oder kundenspezifisch in TACTZ definiert sind. Dem Berechtigungsfeld ACTVT sind im Berechtigungsobjekt mögliche Aktivitäten zugeordnet. Im Benutzerstammsatz sind Berechtigungen für Daten und Aktivitäten in der Form von Operanden logischer Ausdrücke als Wertemengen abgelegt, wobei Maskenzeichen für generische Berechtigungen verwendet werden können.
Bei der Überprüfung der Berechtigung des aktuellen Benutzers ohne den Zusatz FOR USER wird nicht der Inhalt des Systemfelds sy-uname ausgewertet, sondern der tatsächliche Benutzernamen verwendet.
Die wichtigsten Kontexte, für die Prüfkennzeichen gesetzt werden können, sind Transaktionen. Die Ausführung einer Anweisung AUTHORITY-CHECK kann deshalb unterschiedliche Ergebnisse haben, je nachdem wie der aktuelle Programmablauf gestartet wurde. In der Regel sollte ein Püfkennzeichen immer auf prüfen gesetzt sein.
Für Berechtigungsobjekte aus den Bereichen SAP NW AS ABAP (BC) und Personalwirtschaft (HR) kann ein Prüfkennzeichen nicht auf nicht prüfen gesetzt sein.

Zusatz

… FOR USER user
Wirkung

Wenn der Zusatz FOR USER angegeben ist, wird die Berechtigung des Benutzers überprüft, dessen Benutzername in user angegeben ist. Für user wird ein Feld vom gleichen Typ wir das Systemfeld sy-uname erwartet. Bei einem ungültigen Benutzernamen sy-subrc auf 40 gesetzt.

Beispiel

Überprüfung, ob der aktuelle Benutzer die Berechtigung zum Anzeigen derjenigen Fluggesellschaft hat, die er auf dem Selektionsbild eingibt. Das verwendete Berechtigungsobjekt heißt S_CARRID und umfasst die Berechtigungsfelder CARRID für die Bezeichnung einer Fluggesellschaft und ACTVT für die Aktivität. Das Kürzel „03“ steht für die Aktivität „Anzeigen“ und ist eine der Aktivitäten, die dem Berechtigungsobjekt S_CARRID zugeordnet sind.

PARAMETERS carr TYPE spfli-carrid.

AT SELECTION-SCREEN.
AUTHORITY-CHECK OBJECT ‚S_CARRID‘
ID ‚CARRID‘ FIELD carr
ID ‚ACTVT‘ FIELD ’03‘.

IF sy-subrc <> 0.
MESSAGE ‚No authorization‘ TYPE ‚E‘.
ENDIF.

Fazit

  1. Damit wird klar, man ist auf der sicheren Seite, wenn man genaue Angaben in den Objekten des AUTHORITY-CHECK macht. Man kann zwar einen DUMMY-Wert angeben, dann sollte man dies aber auch als ID idx DUMMY programmieren. Ggf wird beim Ergebnis des Vergleichs in der SU53 dann auch das Dummy mit angezeigt. Was dann symbolisiert, dass dieser Wert nicht berücksichtigt wurde.
  2. Lässt man Objekte im AUTHORITY-CHECK weg, dann müssen die restlichen Objekte genau das abprüfen, was man zulassen will! Beachten Sie aber den Rückgabewert 24 im sy-subrc, und damit die Version Ihres Systems
  3. Andere Werte wie z.B. blank sollten in den Programmen dokumentiert werden, sie verlangen dann in der Rolle auch einen Objektwert von ‚ ‚!
  4. Die Angaben im AUTHORITY-CHECK sollen mit denen in den Rollen abgestimmt werden! Sie sehen hier, wie wichtig eine ordentliche Programmdokumentation für Sie als Rollenadmin ist

Auf die Einflußfaktoren und Implikationen des AUTHORITY-CHECKs, sowie Forderungen an die Entwicklung wird im Ratgeber „Techniken im Berechtigungswesen“ in mehreren Kapiteln eingegangen.

Viele Grüße
Bernd Klüppelberg

Schreiben Sie bitte einen Kommentar





SAP Berechtigungen, -Konzepte, -Technik | System Beratung Bernd Klüppelberg