SAP RFC Read Table: Zugriff auf beliebige Tabellen in SAP

Kein Funktionsbaustein wird in der SAP-Community häufiger diskutiert als der Funktionsbaustein RFC_READ_TABLE. Dieser remote-fähige Funktionsbaustein ermöglicht einen generischen Lesezugriff auf beliebige Tabellen, und fast jeder Softwareanbieter, der Nicht-ABAP-Software für SAP-Lösungen anbietet oder Schnittstellen/Extraktoren für SAP-Lösungen bereitstellt, wird ihn früher oder später in Betracht ziehen. Selbst Anbieter von ABAP-Add-Ons, deren Software auf alle Systeme einer SAP-Landschaft zugreifen muss, nutzen den Funktionsbaustein häufig, um die Notwendigkeit der Installation ihres Add-Ons auf allen Systemen eines Kunden zu umgehen und so die Gesamtbetriebskosten (TCO) auf einem Minimum zu halten.
In diesem Blog werden die neuen Optionen von RFC_READ_TABLE sowie die Sicherheitsaspekte des Funktionsbausteins behandelt.
Ein allgegenwärtiges Modul
Stand Juni 2022 liefert eine Suche nach „RFC_READ_TABLE“ im SAP-Support-Portal 347 SAP-Hinweise. Viele dieser Hinweise weisen darauf hin, dass der Funktionsbaustein von SAP nicht für die Nutzung durch Kunden freigegeben wurde, sodass Support und Wartung nicht garantiert sind. Da der Funktionsbaustein RFC_READ_TABLE bereits seit 27 Jahren existiert, wird diese Warnung bezüglich des Supports in der Regel ignoriert. Sie wird auch deshalb ignoriert, weil immer mehr SAP-Standardanwendungen ihn oder einen Klon davon nutzen, um bestimmte Einschränkungen zu umgehen. Eine Suche nach remote-fähigen Funktionsbausteinen in der Tabelle TFDIR mit dem Muster *RFC*READ*TABLE* auf einem SAP NW AS ABAP 7.56-System führt zu 17 weiteren Treffern:
- /BODS/RFC_READ_TABLE
- /BODS/RFC_READ_TABLE2
- /BODS/RFC_READ_TABLE_FIL
- /BODS/RFC_STREAM_READ_TABLE
- /PM0/ABC_IBC_RFC_READ_TABLE
- /SAPDS/RFC_READ_TABLE
- /SAPDS/RFC_READ_TABLE2
- /SAPDS/RFC_READ_TABLE_FILE
- /SAPDS/RFC_STREAM_READ_TABLE
- BBP_RFC_READ_TABLE
- CNVCF_CCE_RFC_READ_TABLE
- CNVCF_CCE_RFC_READ_TABLE_2
- CNVCF_CCE_RFC_READ_TABLE_TMP
- CNVCF_CCE_RFC_READ_TABLE_UNI
- CNV_CMIS_A_20_RFC_READ_TABLE
- EHPRC_MIGRATION_RFC_READ_TABLE
- RFC_READ_ALLOC_TABLE
Fast alle wurden entweder als Kopie von RFC_READ_TABLE erstellt und anschließend erweitert, oder sie dienen als Wrapper, um vor dem internen Aufruf von RFC_READ_TABLE zusätzlichen Code einzufügen.
Einschränkungen
Zu den technischen Einschränkungen von RFC_READ_TABLE gehören :
- Es können nur Tabellen mit einfachen Datentypen gelesen werden (z. B. keine Unterstützung für STRING- oder XSTRING-Felder );
- Die maximale Zeilenbreite beträgt 512 Zeichen;
- Die Anzahl der zurückgegebenen Datensätze ist durch Speichergrenzen begrenzt.
Die fehlende Unterstützung für STRING-Felder war einer der Hauptgründe dafür, dass all die oben genannten Klone intern bei SAP erstellt wurden. Daher hat SAP im Mai 2021 die Funktionen des Funktionsbausteins wie folgt erweitert:
- Unterstützung für einfachere Datentypen, darunter STRING und XSTRING;
- Unbegrenzte Zeilenbreite (optionale neue EXPORT-Struktur ET_DATA);
- Abfrage, sortiert nach Primärschlüssel.
Es gibt jedoch einige Kompatibilitätsaspekte und Probleme, die besondere Beachtung erfordern:
- Aufgrund der erweiterten Funktionen akzeptiert RFC_READ_TABLE nur typkonforme WHERE-Bedingungen. In älteren DBI-Versionen tolerierte Fehler wie SPRAS = ‘EN’ oder LANGU = ‘DE’ führen nun zum Laufzeitfehler SAPSQL_DATA_LOSS. Die korrekte Schreibweise für das angegebene Beispiel lautet SPRAS = ‘E’ oder LANGU = ‘D’. Während die Verwendung von MANDT in der WHERE-Bedingung in der Vergangenheit lediglich zu leeren Ergebnissen führte, löst sie nun eine Ausnahme aus.
- Bei der Verwendung von Klammern in der OPTION-Tabelle für die WHERE-Bedingung erwartet die erweiterte Funktion RFC_READ_TABLE ein Leerzeichen nach der öffnenden und vor der schließenden Klammer. Andernfalls wird eine OPTION_NOT_VALID-Ausnahme ausgelöst.
- Kunden sollten den SAP-Hinweis Nr . 3139000 unmittelbar nach der Implementierung des Hinweises Nr . 2246160 anwenden, da letzterer einen Fehler enthält, der sich auf die Reihenfolge der zurückgegebenen Feldwerte auswirkt.
- Einige Zwischenversionen der Erweiterung wurden von SAP mit neueren SAP-NetWeaver-Versionen ausgeliefert und weisen einige merkwürdige Fehler auf. So stießen wir beispielsweise in SAP NetWeaver 7.56 SP0 auf ein Problem mit geteilten WHERE-Bedingungen. Es wurden Dumps erzeugt, bis wir vor jeder Zeile ein zusätzliches Leerzeichen einfügten. Dieses Verhalten verschwand nach der Anwendung des Notes #2246160.
Die Erweiterungen von RFC_READ_TABLE können mit den im SAP-Hinweis Nr . 2246160 enthaltenen Korrekturen oder mit dem entsprechenden Support-Paket implementiert werden. Leider enthält der Hinweis die Erweiterungen nur für SAP NetWeaver ab Version 7.40.
Zum Thema Sicherheit
SQL-Injection
Der wohl gefährlichste Aspekt einer dynamischen SQL-Schnittstelle ist das Risiko eines SQL-Injection-Angriffs. Mit den Erweiterungen aus dem SAP-Hinweis Nr. 2246160 überprüft der Funktionsbaustein die übergebene WHERE-Bedingung auf kritische SQL-Schlüsselwörter, die auf einen SQL-Injection-Versuch hindeuten. Aus Kundensicht ist der Schutz vor SQL-Injection der wichtigste Grund für die Anwendung des SAP-Hinweises.
Systemschutz
Die Möglichkeit, beliebige Tabellendaten von außerhalb eines SAP-Systems auszulesen, stellt ein ernstes Sicherheitsrisiko dar. Die folgenden Schutzmaßnahmen können in Betracht gezogen werden.
Wenn Sie keinen Aufruf von RFC_READ_TABLE im System zulassen möchten:
- In SAP-Systemen ab SAP NetWeaver 7.40 kann das „Unified Connectivity“ (UCON)-Framework genutzt werden, um jeden Aufruf des Funktionsbausteins zu blockieren. Verwenden Sie vorab den Protokollierungsmodus, um zu prüfen, ob ein Aufruf des Funktionsbausteins erforderlich ist.
Falls in bestimmten Bereichen Aufrufe von RFC_READ_TABLE erforderlich sind :
- Weisen Sie Benutzern keine Rollen mit generischen Werten für die folgenden Berechtigungsobjekte zu:
- S_RFC
- S_TABU_DIS
- S_TABU_NAM
- Weisen Sie Rollen mit Berechtigungen für S_RFC mit der Funktionsgruppe SDTX oder dem Funktionsnamen RFC_READ_TABLE nur den Benutzern zu, die an den entsprechenden RFC-Szenarien beteiligt sind.
- Die den beteiligten Benutzern zugewiesenen Rollen sollten nur den Zugriff auf die erforderlichen Tabellen ermöglichen (Berechtigungsobjekte S_TABU_DIS oder S_TABU_NAM)
Der SAP-Hinweis Nr. 2246160 enthält zwei neue Zulassungslisten (d. h. Anwendungsregeln) in der Transaktion SLDW, die von RFC_READ_TABLE geprüft werden :
- RFC_READ_TABLE_CALL
- Diese Regel enthält die lokalen Programme, die RFC_READ_TABLE aufrufen dürfen
- RFC_READ_TABLE_TABL
- Diese Regel enthält die Tabellen, auf die über RFC_READ_TABLE zugegriffen werden darf
Der Vorteil der Verwaltung des Systemzugriffs über Zulassungslisten besteht darin, dass diese Einschränkungen unabhängig von den jeweiligen Benutzerberechtigungen sind und daher transparenter sind. Mithilfe der Protokollierungsfunktion in der Transaktion SLDW können Sie zunächst die erforderlichen Einträge für beide Zulassungslisten ermitteln, damit diese Ihren Anforderungen im täglichen Betrieb entsprechen.
Die Zulassungsliste RFC_READ_TABLE_TABL steuert zudem das Verhalten des Funktionsbausteins im Falle eines kritischen Befunds bei der SQL-Injection-Analyse. Ist die Zulassungsliste aktiviert, wird eine kritische Anweisung blockiert. Andernfalls wird sie ausgeführt und im Sicherheitsprotokoll (Ereignis EUU) protokolliert.
Fazit
Obwohl der Funktionsbaustein RFC_READ_TABLE von SAP nicht offiziell für die externe Nutzung freigegeben wurde , gilt er als De-facto-Standard, wenn Daten von außerhalb eines Systems gelesen werden müssen. Es gibt keine offizielle Zugriffsmethode (z. B. einen entsprechenden BAPI-Funktionsbaustein). Der Funktionsbaustein wurde ursprünglich 1995 mit eingeschränkten Funktionen erstellt, und der Status „Nicht für Kunden freigegeben“ gilt nach wie vor. Es scheint jedoch, dass SAP vor allem deshalb an diesem Status festhält, weil das Unternehmen mehr control haben möchte, ob und wann neue Optionen oder Fehlerbehebungen in den Funktionsbaustein implementiert werden. Die im Mai 2021 freigegebenen Erweiterungen haben bedeutende neue Funktionen eingeführt und – was noch wichtiger ist – zwei zusätzliche Sicherheitsebenen hinzugefügt, indem sie einen Schutz vor SQL-Injection und die Einführung von Zulassungslisten vorsahen.
Referenzen SAP-Hinweis 109533: Verwendung von SAP-Funktionsbausteinen SAP-Hinweis 382318: FAQ | Funktionsbaustein RFC_READ_TABLE SAP-Hinweis 2246160: Erweiterung RFC_READ_TABLE (7.40+) SAP-Hinweis 3139000: Spaltenreihenfolge von RFC_READ_TABLE in der Ergebnistabelle
