Lors d'audits d'entreprise approfondis, les équipes techniques constatent régulièrement que la majorité des rapports Universal Batch Engine (UBE)Moteur de traitement par lots de JD Edwards utilisé pour générer des rapports et exécuter des processus en arrière-plan. personnalisés contournent involontairement le noyau de sécurité JDE (F00950Table système centrale de JD Edwards qui stocke toutes les règles de sécurité applicatives, par objet et par ligne.). Les directions ERP supposent souvent qu'une sécurité par ligne active sur des tables comme F060116 (Payroll) ou F4105 (Item Cost) limite intrinsèquement les résultats des traitements par lots. Ce n'est pas le cas. Dès qu'un développeur utilise des Table I/OOpérations d'entrée/sortie permettant de lire, écrire ou mettre à jour directement les données des tables dans JD Edwards. directs dans les Event RulesLangage de programmation propriétaire de JD Edwards utilisé pour coder la logique métier des applications et des rapports. ou appelle une Business FunctionComposant logiciel réutilisable, écrit en C ou en Event Rules, exécutant des calculs ou des processus métier spécifiques. C personnalisée exécutant JDB_OpenTable sans transmettre explicitement le contexte de sécurité de l'utilisateur, la sécurité par ligne au niveau du moteur est ignorée.
Atténuer les risques de sécurité et de visibilité des données des rapports JDE UBE personnalisés nécessite d'évaluer l'ensemble du pipeline de sortie, et pas seulement les autorisations d'exécution des utilisateurs. Les processus batch personnalisés stockent couramment des données non masquées de rémunération des dirigeants, des marges unitaires et des coordonnées bancaires de fournisseurs sous forme de fichiers PDF plats directement dans le répertoire PrintQueueDossier système sur le serveur JD Edwards où sont temporairement stockés les fichiers de sortie des rapports générés. de l'Enterprise Server, ou les diffusent via des listes de distribution automatisées à des rôles internes non autorisés. Si les contrôles de sécurité ne sont pas intégrés directement dans la Business ViewStructure logique qui sélectionne et joint des champs de tables de base de données pour les rendre utilisables par les rapports. sous-jacente ou appliqués par programmation lors de l'exécution, votre parc d'UBE personnalisés reste une porte dérobée silencieuse et non surveillée vers la base de données.
Contournement de la sécurité par ligne dans les Business Views personnalisées et le code ER
Les Business Views conçues sur mesure pour les UBE omettent fréquemment les champs clés de sécurité principaux tels que la Company (CO), la Business Unit (MCU) ou l'Address Number (AN8). Lorsqu'un développeur crée une vue sur F0911 ou F0101 et supprime MCU pour simplifier les critères de jointure, le générateur SQL d'exécution d'EnterpriseOne perd son point d'ancrage cible. Il ne peut pas ajouter les clauses WHERE de sécurité par ligne F00950 requises aux requêtes de base de données générées. Le moteur traite la demande sans filtre, exposant les transactions GL globales ou les enregistrements maîtres à des utilisateurs qui ne devraient voir qu'un seul site.
Le déplacement de l'accès aux données dans les Event Rules introduit une vulnérabilité parallèle via les Table I/O. Les lectures de section de Business View principales standard appellent la sécurité d'exécution, mais les opérations Table I/O des ERAbréviation d'Event Rules, le langage de programmation propriétaire de JD Edwards pour la logique métier. — telles que les structures Fetch Single ou Select/Fetch Next explicites — exécutent des opérations de base de données brutes qui contournent entièrement les règles de sécurité F00950. Si un rapport personnalisé calcule les soldes cumulés (YTD) en parcourant F0902 via des Table I/O ER, un responsable opérationnel limité à la Business Unit 100 agrègera les soldes de toutes les unités opérationnelles sans déclencher d'exception de sécurité à l'exécution.
La fonction système explicite Suppress Row Security insérée dans les Event Rules transforme une exposition de données localisée en un contournement total de l'exécution. Les développeurs insèrent couramment cet appel dans Initialize Section pour corriger des échecs de lecture ou accélérer l'exécution sur des centaines de milliers d'enregistrements. Une fois exécutée, elle désactive définitivement l'évaluation de la sécurité à l'exécution pour toute la portée d'exécution du rapport, exécutant chaque appel de base de données ultérieur avec une visibilité administrative, quel que soit l'utilisateur ayant lancé le traitement.
Ces failles atteignent régulièrement la production car les équipes valident les UBE personnalisés exclusivement sous des profils SYSADMIN ou CNCConfigurable Network Computing, l'architecture technique de JD Edwards et le terme désignant ses administrateurs système. lors des tests unitaires. Les rôles administratifs fonctionnant sans restrictions F00950, l'absence de champs clés génère des totaux exacts pendant la phase d'assurance qualité sans alerter l'équipe sur l'exposition sous-jacente. La validation de la sécurité des UBE nécessite d'exécuter des cycles de test obligatoires sous des rôles opérationnels restreints et d'auditer les définitions de Business Views personnalisées pour confirmer que MCU, CO et AN8 sont présents dans chaque table pilote.

L'illusion de la lecture directe des tables dans les Business Functions C
Lorsque les développeurs écrivent des Business Functions C pour contourner la surcharge des Event Rules dans les traitements batch lourds, la première APIInterface de programmation permettant à différents composants logiciels de communiquer et d'échanger des données. qu'ils appellent est JDB_OpenTable. Si cet appel initialise un handle de table sans handle utilisateur (hUser) explicitement lié dérivé de JDB_InitUser ou JDB_InitBhvr, l'environnement d'exécution exécute la requête de base de données avec les privilèges complets du processus. Dans une grande partie des réécritures de performances personnalisées, les développeurs transmettent un handle système générique pour économiser quelques lignes de code, éliminant complètement le noyau de sécurité JDE de l'aller-retour avec la base de données.
Cette pratique commence généralement par un effort d'optimisation pour les UBE personnalisés traitant des centaines de milliers d'enregistrements. Les développeurs remplacent les Business Views standard par des lectures C directes pour réduire les temps d'exécution des travaux de plusieurs heures à quelques minutes, sans savoir que les threads UBE asynchrones en arrière-plan évaluent les règles de sécurité F00950 différemment des sessions APPL interactives. Alors que les écrans d'applications interactives transmettent automatiquement le contexte de session de l'utilisateur actif via le noyau de sécurité, les processus batch en arrière-plan s'exécutant sur l'Enterprise Server s'appuient entièrement sur les handles d'utilisateurs explicitement construits dans la pile d'appels de fonctions.
L'encapsulation de ces lectures non validées dans des BSFNBusiness Function : composant logiciel réutilisable écrit en C ou en Event Rules pour exécuter des processus métier. C génériques et réutilisables ouvre un vecteur d'exfiltration de données permanent dans votre bibliothèque de rapports. Un UBE financier personnalisé appelant une fonction de lecture directe sur des tables sensibles comme F060116 pour la paie ou F4105 pour les coûts réels contournera entièrement la sécurité par ligne si hUser est absent. L'UBE présente des données restreintes à tout utilisateur autorisé à soumettre le rapport, quelle que soit sa configuration de sécurité par ligne F00950. Avant de promouvoir des objets C personnalisés via OWM, auditez chaque appel JDB_OpenTable pour vous assurer qu'il lie directement les handles de base de données au contexte utilisateur d'exécution.
Exposition du répertoire PrintQueue et sorties WSJ non sécurisées
Lorsqu'un EnterpriseServer exécute un UBE, le moteur d'exécution écrit les sorties brutes PDF, CSV et OSA directement dans le répertoire PrintQueue sous forme de fichiers plats non chiffrés avant que toute logique de distribution ne se déclenche. Sur un serveur de production typique exécutant AIX ou Windows Server 2022, des milliers de fichiers temporaires s'accumulent ici, contenant des chiffres de paie bruts, des coordonnées bancaires et des profils de crédit client non masqués. Si les administrateurs système laissent intactes les autorisations par défaut du système d'exploitation, les comptes de service ou les utilisateurs du domaine local peuvent contourner complètement la sécurité EnterpriseOne en lisant directement le système de fichiers via des partages SSH ou SMB.
Dans EnterpriseOne, la vulnérabilité se manifeste par des configurations incorrectes dans Work With Submitted Jobs (P986110B) et sa table maîtresse des travaux F986110 sous-jacente. La sécurité JDE standard prête à l'emploi permet aux utilisateurs d'interroger l'état d'exécution dans tous les environnements, ce qui signifie qu'un employé de niveau inférieur peut voir les en-têtes de travaux créés par des rôles de direction. Sans sécurité par ligne explicite limitant F986110.JCUSER à l'utilisateur connecté, tout employé qui ouvre WSJ peut sélectionner un travail batch de paie ou de GL exécuté par le CFO et choisir Row > View Output pour télécharger le PDF non chiffré.
L'exposition s'élargit lorsque le fractionnement de rapport (bursting) est activé dans les définitions standard d'UBE ou de BI PublisherOutil d'édition d'Oracle intégré à JD Edwards pour formater, personnaliser et distribuer des rapports sous divers formats.. Les routines de fractionnement génèrent souvent des dizaines de segments PDF individuels et les écrivent dans des chemins de stockage réseau UNC temporaires avant de les envoyer par e-mail à des listes de distribution. Comme ces dossiers de stockage temporaires appliquent rarement des listes de contrôle d'accès dynamiques au niveau des fichiers, un répertoire de stockage créé pour les relevés de commission des fournisseurs reste fréquemment lisible par l'ensemble du domaine pendant des jours.
La sécurisation de cette empreinte nécessite une action administrative immédiate au niveau du système d'exploitation et des couches applicatives. Limitez strictement les autorisations du répertoire PrintQueue de l'Enterprise Server au compte de service JDE, et implémentez une sécurité par ligne sur F986110 limitant les requêtes JCUSER pour qu'elles correspondent à login_user. Enfin, planifiez la purge du Job Master (R9861101) pour qu'elle s'exécute toutes les 24 heures avec l'indicateur de suppression des sorties activé, garantissant ainsi que les fichiers temporaires n'existent sur le disque que pendant moins de 24 heures.
Listes de distribution et failles de sécurité lors de la livraison
Les fonctions de messagerie intégrées aux Event Rules (ER) et les définitions de fractionnement BI Publisher suppriment les contrôles de sécurité dès que le moteur génère la sortie. Lorsqu'un rapport batch s'exécute sous un compte d'utilisateur système générique tel que OVRWRITE ou JDE dans le planificateur d'entreprise, l'exécution ignore les réévaluations en temps réel de la Security Workbench F00950 pour les destinataires finaux de la sortie. Le moteur traite le jeu de données maître en utilisant les privilèges élevés de l'utilisateur du service batch, contournant les modèles de sécurité basés sur les rôles et par ligne qui protègent les applications interactives comme P0801 ou P4108.
Les listes de distribution dynamiques construites à partir de tables personnalisées aggravent cette vulnérabilité. Les UBE personnalisés interrogent fréquemment des tables de correspondance personnalisées pour assembler des listes de destinataires d'e-mails pour les rapports de paie des cadres ou de marge brute. Si la logique de lecture sous-jacente ignore la validation explicite de la sécurité par ligne par rapport à l'ID utilisateur du destinataire, des indicateurs opérationnels sensibles atterrissent directement dans les mauvaises boîtes de réception. Un collaborateur muté en interne qui a quitté une business unit le mardi recevra toujours le rapport financier non expurgé de cette unité le vendredi, simplement parce que la requête personnalisée valide le statut actif dans l'Address Book F0101 sans évaluer les autorisations de données actuelles.
Les protocoles de livraison présentent une faille tout aussi critique. Les configurations standard de livraison de courrier de BI Publisher et d'EnterpriseOne natif acheminent les sorties PDF et CSV générées via des connexions SMTPProtocole standard de transmission de courriers électroniques sur les réseaux IP. non chiffrées sur le port 25. Les extraits financiers bruts transitent en texte clair sur les réseaux internes, laissant les structures de paie et de coûts non masquées exposées à une simple interception de paquets (sniffing). La sécurisation de ce pipeline nécessite de configurer SMTPS avec TLS explicite dans les paramètres JDE.INI de l'Enterprise Server et de remplacer les pièces jointes de fichiers bruts par des références URL sécurisées et authentifiées vers des référentiels chiffrés.
Application de la sécurité par ligne à l'exécution dans la conception de rapports personnalisés
L'exécution standard des Event Rules contourne souvent la sécurité par ligne si les développeurs créent des Business Views personnalisées sans application explicite à l'exécution. L'appel explicite de la fonction système Set User Selection dans l'événement Initialize Section force le moteur UBE à évaluer le contexte de sécurité de l'utilisateur exécutant à partir de la table F00950 avant de générer la clause SQL dynamique WHERE. Cela garantit que les critères de sélection gérés par les ER complètent, plutôt que d'annuler involontairement, la sécurité par ligne active associée au rôle de l'utilisateur.
Lorsque le traitement des rapports pousse les Table I/O vers des Business Functions C personnalisées, les appels standard JDB_OpenTable s'exécutent fréquemment sous un handle système non restreint qui contournent entièrement la sécurité par ligne à l'exécution. Le refactoring de ces fonctions C pour transmettre des handles d'utilisateurs explicites via JDB_InitBhvr garantit que les mappages de sécurité F00950 sont évalués en continu lors de chaque boucle JDB_SelectKeyed et JDB_Fetch. Ignorer ce refactoring laisse les soldes du grand livre ou les enregistrements de paie vulnérables à une exposition totale, quelles que soient les restrictions au niveau de l'objet existant dans l'environnement.
La sécurité des rapports doit simultanément protéger la définition d'exécution dans F9860 et F00950. Si la sécurité des objets accorde un accès à la saisie des paramètres à l'exécution sans restrictions, les utilisateurs finaux peuvent facilement effacer les filtres de sélection de données structurelles dans l'écran « Prompt for Values » avant la soumission. L'application d'une sécurité stricte sur les actions d'objet empêche la falsification des paramètres et garantit que la logique de sélection par défaut reste inchangée lors de la soumission à la file d'attente.
Les architectures modernes isolent le traitement batch en acheminant les exécutions d'UBE via des wrappers d'OrchestratorComposant de JD Edwards permettant de créer des services web REST pour automatiser des tâches et intégrer des systèmes tiers. au lieu de sélections de menus EnterpriseOne brutes. Le lancement d'un rapport via une Orchestration applique une validation des rôles au niveau RESTStyle d'architecture logicielle couramment utilisé pour concevoir des API web légères et interopérables. et un nettoyage de la charge utile d'entrée avant que le travail n'atteigne les files d'attente de travaux de l'Enterprise Server. Cette couche d'API moderne empêche les utilisateurs non autorisés d'appeler directement les spécifications d'UBE tout en maintenant des pistes d'audit complètes sur l'ensemble des opérations de l'entreprise.

Sécurisation des référentiels de sortie UBE et contrôles d'audit
Un répertoire PrintQueue d'un serveur d'entreprise non surveillé accumule fréquemment des dizaines de milliers de fichiers PDF et CSV non chiffrés s'étendant sur plusieurs années d'exécution en production. Supprimer les autorisations de lecture des utilisateurs du domaine au niveau du système d'exploitation — en limitant l'accès au système de fichiers strictement au compte de service JDE exécutant jdenet_k — constitue votre défense de base. Combinez cela avec des scripts shell ou PowerShell nocturnes automatisés pour purger les fichiers plats datant de plus de 7 à 14 jours. Forcer la gestion des sorties via des interfaces de clients web autorisées empêche les utilisateurs de récupérer directement des sorties de rapports obsolètes sur les partages du serveur d'entreprise.
Les autorisations de répertoire seules n'empêcheront pas un utilisateur d'enregistrer des copies locales de rapports confidentiels une fois générés. Dans le fichier jde.ini de l'Enterprise Server, sous la section [UBE], définissez les indicateurs de chiffrement PDF en utilisant EncryptPDF=1 ainsi que des paramètres de restriction 128 bits ou 256 bits (PrintAllow=N et CopyAllow=N). Cela applique une sécurité immédiate des documents sur les exécutions batch hautement sensibles comme R070901 (Payroll Register) et R09801 (GL Post). La sortie générée reste chiffrée au repos et en transit, empêchant l'impression non autorisée, la copie de texte ou la sérialisation locale même si le flux PDF brut est intercepté.
Prévoyez d'empêcher l'exfiltration massive de données sensibles en désactivant les fonctionnalités d'exportation CSV au niveau des propriétés de rapport UBE dans Report Design Aid pour les objets à haut risque. Pour maintenir une surveillance complète, configurez l'audit sur la table Job Control Status Master (F986110) et surveillez les opérations de visualisation des sorties. La corrélation des enregistrements F986110 (JCUSER, JCPDFNAME, JCJOBSTATUS) avec les journaux d'accès du serveur d'applications web fournit aux équipes de sécurité un historique de traçabilité granulaire. Lors de l'investigation de failles internes potentielles, cette agrégation de journaux détaille l'horodatage exact, l'adresse IP et l'ID utilisateur derrière chaque événement d'exécution, de téléchargement ou de visualisation de rapport.