In umfassenden Unternehmens-Audits stellen technische Teams regelmäßig fest, dass die Mehrheit der benutzerdefinierten Universal Batch Engine (UBE)Die Batch-Verarbeitungs-Engine von JD Edwards, die für die Ausführung von Berichten und Massendatenprozessen im Hintergrund zuständig ist.-Berichte unbeabsichtigt den JDE-Sicherheitskernel (F00950Die zentrale JD Edwards-Systemtabelle, in der alle Sicherheitsberechtigungen, einschließlich der Zeilensicherheit, gespeichert sind.) umgeht. Die ERP-Leitung geht oft davon aus, dass eine aktive ZeilensicherheitEine Sicherheitsfunktion, die den Zugriff auf bestimmte Datenzeilen in einer Datenbanktabelle basierend auf Benutzerkriterien einschränkt. (Row Security) auf Tabellen wie F060116 (Payroll) oder F4105 (Item Cost) die Batch-Ausgabe von Natur aus einschränkt. Das ist nicht der Fall. In dem Moment, in dem ein Entwickler direktes Table I/ODirekte Datenbank-Lese- und Schreiboperationen, die innerhalb der JD Edwards Event Rules definiert werden. in den Event RulesDie proprietäre Skriptsprache von JD Edwards zur Definition von Geschäftslogik in Anwendungen und Berichten. verwendet oder eine benutzerdefinierte C Business FunctionIn C geschriebene Programme, die komplexe oder performancekritische Geschäftslogik in JD Edwards ausführen. aufruft, die JDB_OpenTableEine JD Edwards-Programmierschnittstelle (API), die verwendet wird, um eine Datenbanktabelle für Lese- oder Schreibzugriffe zu öffnen. ausführt, ohne explizit den Sicherheitskontext des Benutzers zu übergeben, wird die Zeilensicherheit auf Engine-Ebene ignoriert.
Die Minimierung von Sicherheits- und Datensichtbarkeitsrisiken bei benutzerdefinierten JDE UBE-Berichten erfordert die Bewertung der gesamten Ausgabe-Pipeline, nicht nur der Ausführungsberechtigungen der Benutzer. Benutzerdefinierte Batch-Prozesse legen routinemäßig unmaskierte Gehälter der Geschäftsführung, Stückmargen und Bankdaten von Lieferanten als unverschlüsselte PDF-Dateien direkt im PrintQueueDas Verzeichnis auf dem Enterprise Server, in dem JD Edwards temporäre Berichtsdateien wie PDFs vor der Verteilung speichert.-Verzeichnis des Enterprise Servers ab oder versenden sie über automatisierte Verteilerlisten an nicht autorisierte interne Rollen. Wenn Sicherheitskontrollen nicht direkt in der zugrunde liegenden Business ViewEin JD Edwards-Objekt, das Tabellen verknüpft und die für Berichte oder Anwendungen sichtbaren Datenfelder definiert. verankert oder zur Laufzeit programmatisch erzwungen werden, bleibt Ihre benutzerdefinierte UBE-Landschaft eine stille, unüberwachte Hintertür zur Datenbank.
Umgehung der Zeilensicherheit in benutzerdefinierten Business Views und ER-Code
Speziell für UBEs erstellte Business Views lassen häufig primäre Sicherheitssteuerungsfelder wie Company (CO), Business Unit (MCU) oder Address Number (AN8) weg. Wenn ein Entwickler eine View auf F0911 oder F0101 erstellt und MCU entfernt, um die Join-Kriterien zu bereinigen, verliert der SQL-Generator der EnterpriseOne-Runtime seinen Zielanker. Er kann die erforderlichen F00950-Zeilensicherheits-WHERE-Klauseln nicht an die generierten Datenbankabfragen anhängen. Die Engine verarbeitet die Anfrage ungefiltert und legt globale Hauptbuchtransaktionen (GL) oder Stammdaten für Benutzer offen, die eigentlich nur eine einzige Betriebsstätte sehen dürften.
Die Verlagerung des Datenzugriffs in die Event Rules führt über Table I/O zu einer parallelen Schwachstelle. Standardmäßige Abfragen im primären Business View-Bereich rufen die Laufzeitsicherheit auf, aber ER Table I/O-Operationen – wie Fetch Single oder explizite Select/Fetch Next-Konstrukte – führen reine Datenbankoperationen aus, die die F00950-Sicherheitsregeln vollständig umgehen. Wenn ein benutzerdefinierter Bericht die YTD-Salden berechnet, indem er die F0902 über ER Table I/O scannt, aggregiert ein Betriebsleiter, der auf die Business Unit 100 beschränkt ist, die Salden über alle operativen Einheiten hinweg, ohne dass eine Laufzeit-Sicherheitsausnahme ausgelöst wird.
Die explizite Systemfunktion Suppress Row Security, die in die Event Rules eingefügt wird, verwandelt eine lokale Datenoffenlegung in eine vollständige Umgehung der Sicherheitsprüfung. Entwickler fügen diesen Aufruf routinemäßig in Initialize Section ein, um Abfragefehler zu beheben oder die Ausführung bei Hunderttausenden von Datensätzen zu beschleunigen. Einmal ausgeführt, deaktiviert sie die Auswertung der Laufzeitsicherheit für den gesamten Ausführungskontext des Berichts dauerhaft, sodass jeder nachfolgende Datenbankaufruf mit administrativer Sichtbarkeit ausgeführt wird – unabhängig davon, wer den Job gestartet hat.
Diese Fehler gelangen regelmäßig in die Produktion, da Teams benutzerdefinierte UBEs während der Modultests ausschließlich unter SYSADMIN- oder CNCConfigurable Network Computing; die technische Systemadministration und Infrastruktur-Architektur von JD Edwards.-Profilen validieren. Administrative Rollen arbeiten ohne F00950-Einschränkungen, sodass fehlende Schlüsselfelder während der Qualitätssicherung (QA) korrekte Summen generieren, ohne das Team auf das zugrunde liegende Risiko aufmerksam zu machen. Die Validierung der UBE-Sicherheit erfordert obligatorische Testzyklen unter eingeschränkten operativen Rollen sowie die Überprüfung benutzerdefinierter Business View-Definitionen, um sicherzustellen, dass MCU, CO und AN8 in jeder steuernden Tabelle vorhanden sind.

Der Trugschluss des direkten Tabellenabrufs in C Business Functions
Wenn Entwickler C Business Functions schreiben, um den Overhead von Event Rules in rechenintensiven Batch-Jobs zu umgehen, ist die erste API, die sie aufrufen, JDB_OpenTable. Wenn dieser Aufruf ein Tabellen-Handle ohne ein explizit gebundenes Benutzer-Handle (hUser) initialisiert, das von JDB_InitUser oder JDB_InitBhvr abgeleitet ist, führt die Runtime die Datenbankabfrage mit vollen Prozessberechtigungen aus. Bei einem großen Teil der benutzerdefinierten Performance-Optimierungen übergeben Entwickler ein generisches System-Handle, um ein paar Zeilen Code zu sparen, wodurch der JDE-Sicherheitskernel vollständig aus dem Datenbank-Roundtrip entfernt wird.
Diese Praxis beginnt meist als Optimierungsversuch für benutzerdefinierte UBEs, die Hunderttausende von Datensätzen verarbeiten. Entwickler ersetzen Standard-Business Views durch direkte C-Abrufe, um die Joblaufzeiten von Stunden auf Minuten zu verkürzen, ohne zu wissen, dass asynchrone UBE-Hintergrundthreads die F00950-Sicherheitsregeln anders auswerten als interaktive APPL-Sitzungen. Während interaktive Anwendungsmasken den aktiven Benutzersitzungskontext automatisch an den Sicherheitskernel übergeben, verlassen sich im Hintergrund auf dem Enterprise Server ausgeführte Batch-Prozesse vollständig auf die Benutzer-Handles, die explizit im Funktionsaufruf-Stack erstellt wurden.
Das Verpacken dieser unvalidierten Abrufe in generische, wiederverwendbare C-BSFNs öffnet einen permanenten Datenabfluss-Vektor in Ihrer Berichtsbibliothek. Ein benutzerdefinierter Finanz-UBE, der eine direkte Abruffunktion auf sensible Tabellen wie F060116 für die Gehaltsabrechnung oder F4105 für tatsächliche Kosten aufruft, umgeht die Zeilensicherheit vollständig, wenn hUser fehlt. Der UBE stellt eingeschränkte Daten für jeden Benutzer dar, der zur Übermittlung des Berichts berechtigt ist, unabhängig von dessen F00950-Zeilensicherheitseinstellungen. Bevor Sie benutzerdefinierte C-Objekte über OWM hochstufen, sollten Sie jeden JDB_OpenTable-Aufruf überprüfen, um sicherzustellen, dass Datenbank-Handles direkt an den Laufzeit-Benutzerkontext gebunden sind.
Offenlegung des PrintQueue-Verzeichnisses und ungesicherte WSJ-Ausgabe
Wenn ein Enterprise Server einen UBE ausführt, schreibt die Runtime-Engine die rohen PDF-, CSV- und OSA-Ausgaben direkt als unverschlüsselte Flatfiles in das PrintQueue-Verzeichnis, bevor eine Verteilungslogik greift. Auf einem typischen Produktionsserver unter AIX oder Windows Server 2022 sammeln sich hier Tausende von temporären Dateien an, die rohe Gehaltsdaten, Bankverbindungen und unmaskierte Kundenkreditprofile enthalten. Wenn Systemadministratoren die Standardberechtigungen des Betriebssystems unverändert lassen, können Dienstkonten oder lokale Domänenbenutzer die EnterpriseOne-Sicherheit vollständig umgehen, indem sie das Dateisystem direkt über SSH oder SMB-Freigaben auslesen.
Innerhalb von EnterpriseOne äußert sich die Schwachstelle durch Fehlkonfigurationen in Work With Submitted Jobs (P986110B) und der zugrunde liegenden Job-Master-Tabelle F986110. Die standardmäßige JDE-Sicherheit ermöglicht es Benutzern, den Ausführungsstatus über alle Umgebungen hinweg abzufragen. Das bedeutet, dass ein einfacher Sachbearbeiter Job-Header einsehen kann, die von Führungskräften erstellt wurden. Ohne explizite Zeilensicherheit, die F986110.JCUSER auf den angemeldeten Benutzer beschränkt, kann jeder Mitarbeiter, der WSJ öffnet, einen vom CFO ausgeführten Gehaltsabrechnungs- oder GL-Batch-Job markieren und über Zeile > Ausgabe anzeigen (Row > View Output) das unverschlüsselte PDF herunterladen.
Das Risiko vergrößert sich, wenn das Aufteilen von Berichten (Report Bursting) in Standard-UBE- oder BI PublisherEin Berichts- und Dokumentengenerierungstool von Oracle, das Daten aus JD Edwards in formatierte Layouts wie PDFs umwandelt.-Definitionen aktiviert ist. Bursting-Routinen generieren oft Dutzende einzelner PDF-Segmente und schreiben sie in temporäre UNC-Netzwerkpfade, bevor sie per E-Mail an Verteilerlisten gesendet werden. Da diese Bereitstellungsordner selten dynamische Zugriffskontrolllisten auf Dateiebene erzwingen, bleibt ein für Provisionsabrechnungen von Lieferanten erstelltes Verzeichnis häufig tagelang für die gesamte Domäne lesbar.
Die Absicherung dieser Angriffsfläche erfordert sofortige administrative Maßnahmen sowohl auf Betriebssystem- als auch auf Anwendungsebene. Beschränken Sie die Berechtigungen des PrintQueue-Verzeichnisses auf dem Enterprise Server strikt auf das JDE-Dienstkonto und implementieren Sie eine Zeilensicherheit auf F986110, die JCUSER-Abfragen auf den Wert login_user beschränkt. Planen Sie schließlich den Job Master Purge (R9861101) so, dass er alle 24 Stunden mit aktiviertem Flag zur Ausgabelöschung ausgeführt wird, um sicherzustellen, dass temporäre Dateien weniger als 24 Stunden auf der Festplatte verbleiben.
Verteilerlisten und Sicherheitsmängel bei der Zustellung
Eingebettete Event Rules (ER)-E-Mail-Funktionen und BI Publisher-Bursting-Definitionen hebeln Sicherheitskontrollen in dem Moment aus, in dem eine Engine die Ausgabe generiert. Wenn ein Batch-Bericht unter einem generischen Systembenutzerkonto wie OVRWRITE oder JDE im Enterprise Scheduler ausgeführt wird, ignoriert die Ausführung die Echtzeit-Neubewertungen der F00950 Security Workbench für die endgültigen Empfänger der Ausgabe. Die Engine verarbeitet den Master-Datensatz mit den erweiterten Berechtigungen des Batch-Dienstbenutzers und umgeht die rollen- und zeilenbasierten Sicherheitsmodelle, die interaktive Anwendungen wie P0801 oder P4108 schützen.
Dynamische Verteilerlisten, die auf benutzerdefinierten Tabellen basieren, verschärfen diese Schwachstelle. Benutzerdefinierte UBEs fragen häufig benutzerdefinierte Kreuzreferenztabellen ab, um E-Mail-Empfänger-Arrays für Gehaltsabrechnungen der Geschäftsführung oder Bruttomargenberichte zusammenzustellen. Wenn die zugrunde liegende Abruflogik die explizite Validierung der Zeilensicherheit für die Benutzer-ID des Empfängers überspringt, landen sensible operative Kennzahlen direkt im falschen Posteingang. Ein Mitarbeiter, der am Dienstag aus einer Business Unit versetzt wurde, erhält am Freitag immer noch den unzensierten Finanzbericht dieser Einheit, schlicht weil die benutzerdefinierte Abfrage den aktiven Status im F0101 Address Book validiert, ohne die aktuellen Datenberechtigungen zu prüfen.
Zustellungsprotokolle stellen eine ebenso kritische Lücke dar. Standardmäßige BI Publisher- und native EnterpriseOne-E-Mail-Zustellungskonfigurationen leiten generierte PDF- und CSV-Ausgaben über unverschlüsselte SMTP-Verbindungen auf Port 25 weiter. Rohe Finanzdaten werden als Klartext über interne Netzwerke übertragen, wodurch unmaskierte Gehalts- und Kostenstrukturen einfachem Packet Sniffing ausgesetzt sind. Die Absicherung dieser Pipeline erfordert die Konfiguration von SMTPS mit explizitem TLS in den JDE.INI-Einstellungen des Enterprise Servers sowie das Ersetzen von rohen Dateianhängen durch sichere, authentifizierte URL-Verweise auf verschlüsselte Repositories.
Erzwingen der Laufzeit-Zeilensicherheit im benutzerdefinierten Berichtsdesign
Die standardmäßige Ausführung von Event Rules umgeht häufig die Zeilensicherheit, wenn Entwickler benutzerdefinierte Business Views ohne explizite Durchsetzung zur Laufzeit erstellen. Der explizite Aufruf der Systemfunktion Set User Selection innerhalb des Initialize Section-Ereignisses zwingt die UBE-Engine, den Sicherheitskontext des ausführenden Benutzers aus der Tabelle F00950 auszuwerten, bevor die dynamische SQL-WHERE-Klausel generiert wird. Dies stellt sicher, dass ER-gesteuerte Auswahlkriterien die aktive Zeilensicherheit, die der Rolle des Benutzers zugeordnet ist, ergänzen, anstatt sie unbeabsichtigt aufzuheben.
Wenn die Berichtsverarbeitung das Table I/O in benutzerdefinierte C Business Functions verlagert, werden standardmäßige JDB_OpenTable-Aufrufe häufig unter einem uneingeschränkten System-Handle ausgeführt, das die Laufzeit-Zeilensicherheit vollständig umgeht. Das Refactoring dieser C-Funktionen zur Übergabe expliziter Benutzer-Handles über JDB_InitBhvr stellt sicher, dass F00950-Sicherheitszuordnungen bei jeder JDB_SelectKeyed- und JDB_Fetch-Schleife kontinuierlich ausgewertet werden. Ohne dieses Refactoring bleiben Hauptbuchsalden oder Gehaltsabrechnungsdaten anfällig für eine vollständige Offenlegung, unabhängig davon, welche Einschränkungen auf Objektebene in der Umgebung existieren.
Berichtssicherheit muss gleichzeitig die Ausführungsdefinition innerhalb von F9860 und F00950 schützen. Wenn die Objektsicherheit uneingeschränkten Zugriff auf die Laufzeitabfrage gewährt, können Endbenutzer strukturelle Datenauswahlfilter im Bildschirm „Prompt for Values“ vor der Übermittlung problemlos löschen. Die Durchsetzung einer strengen Objektsicherheit (Object Action Security) verhindert die Manipulation von Parametern und stellt sicher, dass die Standard-Auswahllogik bei der Übermittlung an die Warteschlange unberührt bleibt.
Moderne Architekturen isolieren die Batch-Verarbeitung, indem sie UBE-Ausführungen über OrchestratorEin JD Edwards-Tool zur Erstellung von REST-Schnittstellen und zur Automatisierung von Geschäftsprozessen ohne klassischen Programmieraufwand.-Wrapper anstelle von direkten EnterpriseOne-Menüauswahlen leiten. Das Starten eines Berichts über eine Orchestration erzwingt eine Rollenvalidierung auf REST-Ebene und eine Bereinigung der Eingabedaten (Input Payload Sanitization), bevor der Job die Job-Warteschlangen des Enterprise Servers erreicht. Diese moderne API-Schicht verhindert, dass nicht autorisierte Benutzer UBE-Spezifikationen direkt aufrufen, während gleichzeitig lückenlose Audit-Trails über alle Unternehmensabläufe hinweg gewahrt bleiben.

Härtung von UBE-Ausgabeverzeichnissen und Audit-Kontrollen
Ein unüberwachtes PrintQueue-Verzeichnis auf dem Enterprise Server hortet häufig Zehntausende unverschlüsselter PDF- und CSV-Dateien aus mehreren Jahren Produktionsbetrieb. Der Entzug von Leseberechtigungen für Domänenbenutzer auf Betriebssystemebene – wodurch der Zugriff auf das Dateisystem strikt auf das JDE-Dienstkonto beschränkt wird, unter dem jdenet_k ausgeführt wird – ist Ihre grundlegende Verteidigungslinie. Kombinieren Sie dies mit automatisierten nächtlichen Shell- oder PowerShell-Skripten, um Flatfiles zu löschen, die älter als 7 bis 14 Tage sind. Das Erzwingen der Ausgabe-Verwaltung über autorisierte Web-Client-Schnittstellen verhindert, dass Benutzer veraltete Berichtsausgaben direkt von den Freigaben des Enterprise Servers abgreifen.
Verzeichnisberechtigungen allein verhindern nicht, dass ein Benutzer lokale Kopien vertraulicher Berichte speichert, sobald diese gerendert wurden. Setzen Sie in der Datei jde.ini des Enterprise Servers unter dem Abschnitt [UBE] die Flags für die PDF-Verschlüsselung mit EncryptPDF=1 zusammen mit 128-Bit- oder 256-Bit-Einschränkungsparametern (PrintAllow=N und CopyAllow=N). Dies erzwingt eine sofortige Dokumentsicherheit bei hochsensiblen Batch-Läufen wie R070901 (Payroll Register) und R09801 (GL Post). Die generierte Ausgabe bleibt im Ruhezustand (at rest) und bei der Übertragung (in transit) verschlüsselt, was unbefugtes Drucken, Kopieren von Text oder lokale Serialisierung verhindert, selbst wenn der rohe PDF-Stream abgefangen wird.
Verhindern Sie den massenhaften Abfluss sensibler Datensätze, indem Sie die CSV-Exportfunktionen auf der Ebene der UBE-Berichtseigenschaften (Report Properties) in der Report Design Aid für risikoreiche Objekte deaktivieren. Um die vollständige Kontrolle zu behalten, konfigurieren Sie die Auditierung für die Tabelle Job Control Status Master (F986110) und überwachen Sie die Vorgänge zur Anzeige der Ausgaben. Die Korrelation von F986110-Datensätzen (JCUSER, JCPDFNAME, JCJOBSTATUS) mit den Zugriffsprotokollen des Web-Applikationsservers liefert Sicherheitsteams eine detaillierte Trace-Historie. Bei der Untersuchung potenzieller interner Sicherheitsverletzungen dokumentiert diese Protokollaggregation den genauen Zeitstempel, die IP-Adresse und die Benutzer-ID hinter jedem Berichts-Ausführungs-, Download- oder Anzeigeereignis.