Accessing EBS APIs from APEX - HR_SECURITY

Accessing EBS APIs from APEX - HR_SECURITY

Johannes Michler PROMATIS Horus Oracle


Executive Vice President – Head of Platforms & Development

As you're probably aware, Oracle APEX is a great tool to extend Oracle E-Business Suite. When doing so recently for a customer where I wanted to provide a way to add lines to existing orders using the OE_ORDER_PUB API I ran into a very strange situation. While my own tests worked great, the business users were not able to use the extension and got quite obscure errors as follows:

The item specified is invalid or does not exist in the warehouse you specified. Please enter a valid item-warehouse combination.

The very same test case worked for my own user.

Let's have a look how we analyzed and finally solved that problem.

Overview on extending EBS with APEX

Oracle provides a comprehensive whitepaper on how to use APEX to extend E-Business Suite: Extending Oracle E-Business Suite Release 12.2 using Oracle APEX

Recommended Database Configuration (as of mentioned Oracle Whitepaper)

The procedure suggests having a xx_apex_global package in the APPS schema that itself has an apps_initialize procedure that calls the E-Business Suite built-in function to initialize a session context for a given user, responsibility, and application.

Finding the cause of the API error

When calling OE_ORDER_PUB after doing such a context initialization for some users produced an error (OE_INVALID_ITEM_WHSE) as follows:

The item specified is invalid or does not exist in the warehouse you specified. Please enter a valid item-warehouse combination.

Analyzing this further gave, that there were no values in mtl_organizations - even though the context was properly initialized.

create or replace PROCEDURE APPS.xxis_mtl_param_test (p_user_id NUMBER)
AUTHID definer
AS
  l_tmp VARCHAR2(2000);
BEGIN
  dbms_output.put_line('starting; DB-User is:' || user);
  fnd_global.apps_initialize(p_user_id , 52203, 660);
  dbms_output.put_line('user is now: ' || fnd_global.user_id);


  SELECT
    LISTAGG(hao.organization_code, ';')
  INTO l_tmp
  FROM
    mtl_organizations hao;

  dbms_output.put_line('mtl_organizations: ' || l_tmp);
END;

To make things worse, the values that we got when calling xxis_mtl_param_test where different for the following situations:

  • when called in a SQL Developer session as the APPS database user initializing for a user IT_GUY, that is allowed to access all inventory organizations according to its security profile, everything is working fine.
  • when called in a APEX session, with both a real application or from the APEX Workbench (so technically as the APEX_PUBLIC_USER) initializing for a user IT_GUY, that is allowed to access all inventory organizations according to its security profile, everything is working fine.
  • when called in a SQL Developer session as the APPS database user initializing for a user BUSINESS_GUY, that is allowed to access only specific inventory organizations according to its security profile, everything is working fine. The list of accessible inventory organizations is filtered as expected:

    Accessing mtl_organizations as the Business User connected through APPS: Working
  • when called in a APEX session, with both a real application or from the APEX Workbench (so technically as the APEX_PUBLIC_USER) initializing for a user BUSINESS_GUY, that is allowed to access only specific inventory organizations according to its security profile, no records are shown up in mtl_organizations.

    Accessing mtl_organizations as the Business User connected through APEX_PUBLIC_USER: No accessible mtl_organizations

Debugging the code executed further brought up the HR_SECURITY package as the problematic part, since the mtl_parameters query contains a predicate as follows:

hr_security.show_record('HR_ALL_ORGANIZATION_UNITS',organization_id)='TRUE'

 Looking into the package I found the following code as the root cause:

 CURSOR csr_get_schema_mode
IS
SELECT DECODE(READ_ONLY_FLAG,'U', 'Y'
,'M', 'Y'
,'K', 'Y'
,'N') schema_mode,
DECODE(SUBSTRB(USERENV('CLIENT_INFO'), 1, 1),' ', NULL,
SUBSTRB(USERENV('CLIENT_INFO'),1, 10))
FROM FND_ORACLE_USERID
WHERE ORACLE_USERNAME = user;

That package obviously goes for the connecting user and classifies that into "real/good" users (such as the APPS user) and read-only-users (such as any custom schema - be it registered with adsplice or not.

Doing a quick hack of that decode (e.g. another decode for APEX_PUBLIC_USER to have schema_mode='Y') solved the above test case and made the OE_ORDER_PUB API call working as well.

Obviously, it is not a good idea to modify an Oracle seeded package. So, I checked (with the great help of Oracle Support) for a better solution.

Workaround for Bug 16914457

A temporary better workaround was to run the following statement:

exec fnd_oracle_user_pkg.load_row('APEX_PUBLIC_USER', 'CUSTOM', 'INVALID', 'Apex Schema Description', 'N', 'K');
commit;

That changed the APEX_PUBLIC_USER (through which ORDS connects for APEX applications in my case) to be classified as 'K' which had no negative side effects in our tests.

Summary

The above workaround allows accessing OE_ORDER_PUB and other APIs form apex without issues. I hope that there will be an official certification of the workaround through My Oracle Support soon.

Oracle Protects Healthcare Customers Against Cyberattacks

Oracle hat die Autonomous Shield-Initiative ins Leben gerufen, um Kunden bei der Migration zu einer umfassenden EHR- und Cloud-Infrastrukturlösung zu unterstützen, die Risiken reduziert und die Systemleistung steigert. Von der fortschrittlichen Automatisierung und Sicherheit der Oracle Cloud Infrastructure profitieren bereits mehr als 1.000 Oracle Health EHR-Kunden.

In the nearly two years since the Cerner acquisition, Oracle has invested tens of thousands of engineering hours and millions of dollars to enhance its core clinical applications and improve cybersecurity for its customers in the healthcare industry. As part of this investment, Oracle has helped more than 1,000 Oracle Health EHR customers dramatically strengthen their defenses against cybercrime by supporting their migration to Oracle Cloud Infrastructure (OCI). Customers that migrated to OCI also reported performance gains of 20 to 60%. Today, Oracle is expanding its commitment to create a safer and more secure healthcare ecosystem by launching the Autonomous Shield initiative to simplify and accelerate Oracle Health EHR migrations to OCI at no additional cost.

Lesen Sie die vollständige Pressemitteilung hier.

Accessing EBS APIs from APEX - HR_SECURITY

Automating Code Signing with multiple E-Business Suite instances - Part 3

Johannes Michler PROMATIS Horus Oracle


Executive Vice President – Head of Platforms & Development

As you are probably aware by now, since June 1st 2023 all well-known / public Certificate Authorities (CA) no longer provide Code Signing Certificates using pure software based private keys (see https://www.linkedin.com/posts/johannes-michler-099892ab_code-signing-key-storage-requirements-will-activity-7090432157688492032-jGvC).

Since I prefer using such a trusted / public CA to sign Java Applets (that are still crucial for Oracle E-Business Suite or Oracle Forms) I've recently had a look into how we can now sign those Java JAR files. Part 1 of this blog series introduced the topic and an available "Cloud Based" Code Signing Certificate provider: Signing EBS/Forms - Part 1

In a second part I covered how the code signing can be done on an E-Business Suite Application Server running on Oracle Linux 7 on Oracle Cloud Infrastructure (OCI).

This third post will look how we can further automate this by installing the Certum tools onto the E-Business Suite Cloud Manager VM. First, we'll cover the latest changes from Certum, then we'll look into some scripts that can be used on multiple E-Business Suite Application servers to send the .jar files for signing to that central signing instance.

Certum Tool updates (April 2024)

Back in the previous post, I've complained about the incomplete translation of the Certum tools still revealing a lot of polish error messages. While it seems this is fixed at least partially, I realized that the 2.9.9 versions available over there https://files.certum.eu/software/SimplySignDesktop/Linux-RedHat/ leads to fatal crashes (segmentation fault). That is why for now I stuck with the 2.9.8 release.

Installing Certum SimplySignDesktop as a non-root user

When installing the SimplySignDesktop tool according to the official documentation it is necessary to do so globally/as the root user. Since I didn't like the tool to modify my cloud manager VM in that massive way, I've investigated what the installer actually does. With that I was able to get the tool running with a way less privileged user (that I call certum). Run the following as root:

yum install https://rpmfind.net/linux/epel/8/Everything/x86_64/Packages/s/stalonetray-0.8.3-15.el8.x86_64.rpm
yum install libxslt.x86_64 pulseaudio-libs-glib2.x86_64 libwebp.x86_64 xkeyboard-config
useradd certum
sudo su – certum
mkdir .ssh
vi .ssh/authorized_keys
# add the SSH public key(s) of your oracle@ebs-appserver
chmod 700 .ssh
chmod 600 .ssh/authorized_keys

Then connect a SSH Session with X-Forwarding as certum:

wget https://files.certum.eu/software/SimplySignDesktop/Linux-RedHat/2.9.8-9.1.6.0/SimplySignDesktop-2.9.8-9.1.6.0-x86_64-prod-centos.bin
sh SimplySignDesktop-2.9.8-9.1.6.0-x86_64-prod-centos.bin --target /home/certum/
cp /home/certum/SSD-2.9.8-dist/SimplySignDesktop.xml /home/certum/

Create a /home/certum/provider_simplysign.cfg file as follows:

name=SimplySignDesktop/SimplySignPKCS
library=/home/certum/SSD-2.9.8-dist/SimplySignPKCS_64-MS-1.0.20.so
slot=-1

Furthermore, create a script startGUI.sh as follows:

export LD_LIBRARY_PATH=/home/certum/SSD-2.9.8-dist/
export QT_QPA_PLATFORM_PLUGIN_PATH=/home/certum/SSD-2.9.8-dist/plugins
export OPENSSL_CONF=/etc/ssl/
stalonetray &
/home/certum/SSD-2.9.8-dist/SimplySignDesktop

Finally start the Script and sign in with a one-time-token.

Do a test as follows (in new SSH Session):

/home/certum/SS-9.1.6.0-dist/jre/bin/keytool -list -keystore NONE -storetype PKCS11 -providerclass sun.security.pkcs11.SunPKCS11 -providerArg /home/certum/provider_simplysign.cfg -v

This will provide an alias, in our case: 4F4F410D1234A9110B16DA9C83BD6F59

Furthermore, create a /home/certum/mychain.pem file as described in the previous episode.

Passing the jars

On the E-Business Apps-Server first create a ~/sign_1.sh script as follows:

folderstamp=$(date +%Y-%m-%d-%H:%M)
mkdir -p /home/oracle/sign_bkp/${folderstamp}
jar=$1
# Remove Signature from jar files created through ADADMIN in EBS
echo " ** Removing EBS signature from: ${jar} "
cp -i ${jar} /home/oracle/sign_bkp/${folderstamp}/
zip -d ${jar} 'META-INF/*.SF' 'META-INF/*.RSA'
scp ${jar} certum@10.1.2.199:/tmp/signing-dummy.jar

ssh certum@10.1.2.199 "/home/certum/SS-9.1.6.0-dist/jre/bin/jarsigner -keystore NONE -tsa \"http://time.certum.pl\" -certchain /home/certum/mychain.pem -storetype PKCS11 -providerClass sun.security.pkcs11.SunPKCS11 -providerArg /home/certum/provider_simplysign.cfg -storepass 12345 /tmp/signing-dummy.jar 4F4F410D1234A9110B16DA9C83BD6F59"

scp certum@10.1.2.199:/tmp/signing-dummy.jar ${jar}

The script first creates a backup of the jar, then un-signs the .jar files and copies it to the cloud-manager VM (in my case with IP 10.1.2.199). There the jar is signed and finally the signed .jar is copied back to the E-Business Suite Apps Tier.

This allows signing a single .jar file; the script may be helpful when applying a patch with "options=nojarsigning". Then in there should be a file such as /u01/install/APPS/fs_ne/EBSapps/log/adop/176/20240327_132920/apply/mastebsapp01/36177213/log/jarlist.txt containing all the .jar files that require re-signing.

For the initial signing the procedure in the previous episode can be combined with the copying of the .jar to the Cloud Manager VM.

Verifying and patching

As an alternative to signing "just" the files in $NE_BASE/EBSapps/log/adadmin/log/jarlist.txt I found it useful to just sign all .jar files under $JAVA_TOP. For this the following script proved helpful:

folderstamp=$(date +%Y-%m-%d-%H:%M)
mkdir -p /home/oracle/sign_bkp/${folderstamp}
# Select the jar files from jarlist.txt
for jar in $(find $JAVA_TOP/oracle/apps -name \*.jar)
do
# Remove Signature from jar files created through ADADMIN in EBS
echo " ** Removing EBS signature from: ${jar} "
cp -i ${jar} /home/oracle/sign_bkp/${folderstamp}/
zip -d ${jar} 'META-INF/*.SF' 'META-INF/*.RSA'
scp ${jar} certum@10.1.2.199:/tmp/signing-dummy.jar
ssh certum@10.1.2.199 "/home/certum/SS-9.1.6.0-dist/jre/bin/jarsigner -keystore NONE -tsa \"http://time.certum.pl\" -certchain /home/certum/mychain.pem -storetype PKCS11 -providerClass sun.security.pkcs11.SunPKCS11 -providerArg /home/certum/provider_simplysign.cfg -storepass 12345 /tmp/signing-dummy.jar 4F4F410D1234A9110B16DA9C83BD6F59"
scp certum@10.1.2.199:/tmp/signing-dummy.jar ${jar}
done

It is helpful to first to a check if the $jar is already signed as follows:

result=`jarsigner -verify -certs ${jar}| tr -d '[:space:]'`
if [[ "jarverified." != "$result" ]]
then
echo ${jar} needs re-sign; $result
# put the signing here
fi

Summary

Using above scripts, it is amazingly easy to sign all .jar files both initially as well as after applying a patch. The version using a "find" on $JAVA_TOP may sign "a bit more than needed", but in my experience that does not do any harm.

I am still hoping that Oracle will provide a way to "Hook" a script such as sign_1.sh into the signing process called during patching or through adadmin. This would probably be announced in "Signing EBS Jar Files With HSM (Hardware Security Module) - (Doc ID 2806640.1)".

PROMATIS weiter auf Expansionskurs

PROMATIS weiter auf Expansionskurs

Globale Partnerschaft – PROMATIS bündelt Kräfte für die Realisierung ihrer Wachstumsstrategien

Ettlingen, 04.04.2024Der Geschäftsprozessinnovator gibt seinen Beitritt zur International Technology Group B.V. (ITG) bekannt, einem partnerschaftlichen Verbund von Oracle-Serviceanbietern, die sich durch ihr ergänzendes Portfolio optimal verzahnen. Unterstützt durch den Investor IceLake Capital, profitiert PROMATIS somit von einer Verstärkung der Marktposition und der Umsetzung der Wachstumsstrategien in puncto internationale Expansion. Diese globale Partnerschaft positioniert PROMATIS – Spezialist für intelligente Geschäftsprozesse und Oracle Digitalisierungslösungen – für ein beschleunigtes Wachstum mit globaler Skalierbarkeit bei gleichzeitiger Diversifizierung der Leistungen. Für die Kunden ergeben sich durch die neue Unternehmensstruktur enorme Vorteile hinsichtlich Zukunftssicherheit, Innovationskraft und vor allem auch im Unternehmensbereich Managed Services & Support.

Neue Chancen nutzen und Bewährtes bewahren, das war die Intention der PROMATIS für den Beitritt in die ITG, eine Holding des niederländischen Finanzinvestors IceLake Capital. Die bisherigen Gesellschafter der PROMATIS-Gruppe übertrugen ihre Unternehmensanteile in diese international agierende Holding mit Sitz in Amsterdam und unterstreichen damit das stetige Wachstum der Unternehmensgruppe. Dr. Frank Schönthaler, CEO der PROMATIS-Gruppe sowie das gesamte Executive Management werden ihre Funktionen auch in den nächsten Jahren weiter ausüben. Daneben wird Schönthaler in der Holding als Mitglied des Executive Committees vertreten sein. Insofern ist die Kontinuität der PROMATIS-Geschäftstätigkeit mitsamt der Unternehmensstruktur und allen Mitarbeitenden für die kommenden Jahre gesichert.

Neben dem innovativen Digitalisierungsexperten PROMATIS sind zwei weitere starke Oracle-Partner unter der ITG vereint: Quistor und Project Partners. Mit der Zusammenführung drei der wichtigsten Oracle-Lösungsanbieter im internationalen Umfeld, ist es dem Investor IceLake Capital gelungen, eine perfekte Verzahnung für dieses Marktsegment herbeizuführen. Zudem werden mit dem strategischen Verbund außerordentliche Synergiepotenziale identifiziert und erschlossen. Dieser Startschuss in eine neue Ära der Leistungsfähigkeit bedeutet eine erweiterte geografische Reichweite, umfassendes Experten-Knowhow in modernen Business-Applikationen sowie gebündelte Oracle Schlagkraft. Dieses Oracle Competence Center der neuen Dimension ist prädestiniert, den steigenden Kundenanforderungen gerecht zu werden und sich zu einer führenden IT-Plattform zu gruppieren. Durch die Bündelung der gemeinsamen Kräfte werden neue Kapazitäten freigesetzt wie beispielsweise ein fortschrittliches und herausragendes 24/7-Managed-Services-Angebot für funktionalen und technischen Support rund um die Uhr.

„Mit der neuen Größe positioniert sich nun PROMATIS weitaus leistungsstärker, ausgestattet mit wesentlich größeren Fähigkeiten als bisher, was sich sowohl auf die Kapazitäten als auch die finanzielle Stärke auswirkt. Davon profitieren unsere Kunden erheblich und es erschließen sich völlig neue Wege, Prozessinnovationen im Unternehmen zu etablieren“, so Dr. Frank Schönthaler, CEO der PROMATIS Gruppe.

Über PROMATIS:
Der globale Lösungsanbieter PROMATIS hat seinen Sitz in Deutschland in der TechnologieRegion Karlsruhe mit Niederlassungen in Hamburg und Münster/Westf. sowie Ländergesellschaften in Österreich (Wien), Schweiz (Zürich), Kroatien (Zagreb) und USA (Denver, CO). Ein lebendiges Partnernetzwerk in Wirtschaft und Forschung ist Garant für die Umsetzungsstärke und hohe Innovationskraft.

Unsere Erfahrungen umfassen Oracle Cloud Applications (inkl. Fusion), NetSuite ERP und Oracle E-Business Suite sowie den Oracle Technology Stack on Prem, Cloud und hybrid. Mit bewährten Vorgehensmodellen, Projekt-Tools sowie länder- und branchenspezifischen Best Practice-Lösungen sorgen wir für Wirtschaftlichkeit und Zukunftssicherheit unserer Kundenlösungen. Weitere Informationen zu PROMATIS erhalten Sie im Internet unter www.promatis.de

 

Über IceLake:
IceLake Capital ist eine private Beteiligungsgesellschaft, die in außergewöhnliche Unternehmen investiert und sich darauf konzentriert, mittelständische Unternehmen zu internationalen Marktführern in ihren jeweiligen Branchen zu verhelfen. Diese Unternehmen haben eine starke Marktposition und profitieren von der Unterstützung bei der effektiven Umsetzung ihrer globalen Wachstumsstrategien, wie beispielsweise Buy & Builds und internationale Expansion. Weitere Informationen finden Sie unter www.icelakecapital.com

 

Über Quistor:
Quistor wurde 2005 in den Niederlanden gegründet und ist bekannt für seine profunde Erfahrung mit JD Edwards, Oracle Infrastructure as a Service, Oracle Platform as a Service, Oracle Autonomous Data Warehouse und Oracle Analytics Cloud-Technologie. Die Mission des Unternehmens ist es, herausragende Beratungs- und Managed Services zu liefern. Quistor betreut derzeit mehr als 250 Kunden weltweit und beschäftigt rund 250 Mitarbeiter in Niederlassungen in den Niederlanden, Spanien, der Tschechischen Republik, Frankreich, Mexiko, Großbritannien und auf den Philippinen. Quistor hat mehrere Auszeichnungen für seine Kompetenz in den Bereichen Oracle Autonomous Datawarehouse, Oracle ERP und Oracle Cloud erhalten. Weitere Informationen über Quistor finden Sie auf der Website www.quistor.com

 

Über Project Partners:
Project Partners widmet sich seit 1997 projektorientierten Organisationen rund um den Globus. Als Full-Service-Beratungsagentur für Projekttechnologie und -management unterstützt Project Partners Unternehmen zahlreicher Branchen dabei, ihre technologischen Projektlebenszyklen von Anfang bis Ende pünktlich und innerhalb des Budgets zu erfüllen. Project Partners ist spezialisiert auf Oracle ERP-Anwendungen (on Prem und Cloud) und eine Vielzahl von Projektmanagement- und Project Execution Solutions. 78+ globale Berater und 20+ erfahrene Partner unterstützen multigeografische Operationen in 19+ Ländern und führen Implementierungen für Organisationen durch, die 10.000+ Projekte mit tausenden von Benutzern in verschiedenen Sprachen und Währungen verwalten. Die Erfahrung von Project Partners umfasst die Projektmodule von Primavera, Kahua, E-Business Suite, Fusion ERP und JD Edwards. Weitere Informationen finden Sie unter www.projectp.com

Oracle Announces Fiscal 2024 Third Quarter Financial Results

Die Oracle Corporation gab vor einigen Tagen ihre Ergebnisse für das dritte Quartal des Geschäftsjahres 2024 bekannt.

Oracle Corporation (NYSE: ORCL) today announced fiscal 2024 Q3 results. Total quarterly revenues were up 7% year-over-year in both USD and constant currency to $13.3 billion. Cloud services and license support revenues were up 12% in USD and up 11% in constant currency to $10.0 billion. Cloud license and on-premise license revenues were down 3% in both USD and constant currency to $1.3 billion.

Lesen Sie hier vollständige Pressemeldung