In diesem Kapitel greifen wir auf Datensätze in Datenbanktabellen zu. Hierfür lernen Sie die wichtigsten Open-SQL-Anweisungen kennen.
9 Mit Daten in einer Datenbanktabelle arbeiten 

Solange Sie nur Datensätze in Tabellen lesen, ist dies nicht weiter störend für andere Systemanwender. Was aber ist, wenn Sie einen Datensatz verändern möchten und ein anderer Anwender dies zur selben Zeit auch will; wie wird der konkurrierende Zugriff organisiert? In diesem Kapitel lernen Sie die wichtigsten Aspekte zum Schreiben, Ändern und Löschen von Datensätzen.
[»] Prinzipien verstehen
Eigentlich ist das Problem, dass eine unbekannte Anzahl Benutzer auf dieselbe Datenbanktabelle zugreift, nicht als Thema für Einsteiger, sondern aufgrund seiner Komplexität eher für Fortgeschrittene geeignet. Doch Sie sollten zumindest die Regeln und auch die Fettnäpfchen kennen, um Risiken besser einschätzen zu können, und für den Einstieg ist es wichtig, eine Vorstellung von den Prinzipien zu erhalten.
Zunächst einmal müssen Sie sich wieder ins Gedächtnis rufen, dass Sie in einer Client-Server-Architektur arbeiten. Die Applikation und die Datenbank liegen nicht auf dem PC »unter dem Schreibtisch«. Wenn Sie am Client – dem Präsentationsserver – sitzen und ein Programm auf dem Applikationsserver, der im Netz verfügbar ist, starten, greift dieser Applikationsserver wiederum auf einen Datenbankserver zu, der ebenfalls im Netz steht. Demnach sind verschiedene Rechner beteiligt und müssen koordiniert werden. Wie in Kapitel 1, »ABAP und die ersten Schritte im SAP-System«, beschrieben, kommunizieren die Applikation und das Datenbanksystem über eine Datenbankschnittstelle – um diese Technik müssen Sie sich als Anwendungsentwickler daher glücklicherweise nicht kümmern.
Die Programme des SAP-Systems greifen unabhängig vom installierten Datenbanksystem über Open SQL auf die Datenbanktabellen zu. Sie können mit Open SQL Daten lesen und verändern; ferner haben Sie die Möglichkeit, Daten auf dem Applikationsserver zu puffern und hierdurch Datenbankzugriffe zu reduzieren. Den Abgleich des Puffers mit der Datenbanktabelle übernimmt ebenfalls die Datenbankschnittstelle; die Synchronisation erfolgt in festgelegten Zeitabständen. Sie müssen leider in Kauf nehmen, dass die gepufferten Daten nicht immer aktuell sind. Die Pufferung empfiehlt sich deshalb eher bei relativ konstanten Daten wie Customizing-Einstellungen oder Stammdaten.
Open SQL kann keine Tabellen anlegen oder Strukturen von Tabellen modifizieren; hierzu ist das ABAP Dictionary gedacht. Diese Arbeitsteilung ist beabsichtigt: Normale Programme sollen die Aufgaben des ABAP Dictionarys nicht erfüllen können. Mit ABAP-Anweisungen, d. h. Open-SQL-Anweisungen, können Sie auch nur auf solche Tabellen zugreifen, die über das ABAP Dictionary auf der physischen Datenbank angelegt und administriert wurden.
Um wirklich unabhängig vom Datenbanksystem zu sein, werden auch keine Werkzeuge des Datenbanksystems verwendet, um Berechtigungen und Sperrkonzepte auf der Datenbank zu prüfen, sondern das SAP-System verfügt über ein eigenes Berechtigungs- und Sperrkonzept, das aus Systemsicht für alle zertifizierten Datenbanksysteme einheitlich angewendet wird.
9.1 Berechtigungskonzept 

Grundsätzlich soll ein Anwender nur auf die Daten zugreifen dürfen, für die er eine Berechtigung besitzt. Es muss deshalb definiert werden, auf welche Daten – d. h. auf welche Felder – er zugreifen darf und wie. Für jedes Feld ist eine Aktivität festgelegt, z. B. Anzeigen oder Ändern. Dieses Bündel aus Feld und Aktivität wird in einem Berechtigungsobjekt abgelegt.
Um die Verwaltung von Berechtigungsobjekten zu erleichtern, sind diese in Objektklassen zusammengefasst. Die Objektklassen werden Applikationen zugeordnet und zu Profilen aggregiert. Profile wiederum werden zu Sammelprofilen aggregiert. Dieser Prozess wird so lange fortgesetzt, bis er etwa auf Arbeitsplatzebene abbildet, welche Sichten auf Daten notwendig sind, um die zugeordneten Aufgaben erledigen zu können.
Glücklicherweise muss hier niemand das Rad neu erfinden. Bei der Auslieferung des SAP-Systems wird eine Fülle von Profilen und Sammelprofilen mitgeliefert, die nur noch geprüft und eventuell kopiert und marginal modifiziert werden müssen. Beispielsweise erhält man ein Profil für einen Sachbearbeiter in der Anlagenbuchhaltung und prüft im konkreten Fall, ob die tatsächlichen Anforderungen im Standard enthalten sind oder nicht. Falls nicht, können Sie das Profil kopieren und modifizieren. Die Sicht auf die für die Arbeit erforderlichen Daten und die nötigen Berechtigungen werden in einer sogenannten Rolle abgebildet.
Ein Benutzer muss im SAP-System angelegt sein und über einen Benutzerstammsatz verfügen; anderenfalls kann er sich nicht am System anmelden. Im Benutzerstammsatz müssen dem Benutzer auch eine oder mehrere Rollen zugeordnet sein, und über die Rollen sind ihm entsprechende Berechtigungen zugeteilt, die festlegen, mit welchen Daten er welche Aktivitäten durchführen darf. Die Aufgabe einer Anwendung, d. h. des ausgeführten Programms, ist es zu prüfen, ob der Anwender diese Berechtigungen besitzt oder nicht. Verfügt der Anwender über die jeweiligen Rechte, wird ihm der Zugriff auf die Daten erlaubt, sonst nicht.
Im physischen Datenbanksystem selbst finden keine Berechtigungsprüfungen mehr statt; diese Prüfungen müssen vorher aufseiten des SAP-Systems eingebaut sein. So kann beispielsweise die Berechtigung für eine Transaktion im Transaktionscode gepflegt und vor dem Ausführen der Transaktion geprüft werden. Die Transaktion startet nur dann, wenn der Benutzer in seinem Stammsatz entsprechende Berechtigungen eingetragen hat.
Analoge Einschränkungen existieren für den Start von ABAP-Programmen. Beispielsweise gibt es für die Ausführung von ABAP-Programmen ein eigenes Berechtigungsobjekt, in dem Sie ABAP-Programme zu Gruppen ordnen können. Über die Gruppenzuordnung können Benutzer dann bestimmte Programme ausführen und andere nicht.
[+] AUTHORITY-CHECK
Auch selbst definierte Berechtigungsprüfungen können in den ABAP-Quellcode eingebaut werden; speziell zu diesem Zweck gibt es die Anweisung AUTHORITY-CHECK. Diese Anweisung muss immer dann verwendet werden, wenn die Transaktion oder das ABAP-Programm selbst nicht hinreichend durch Berechtigungen geschützt ist.