We all know the importance of using an environment file in our batch scripts right? No? Well I am not going to lecture you right now on that... We are going to talk about how you can encrypt your MaxL passwords while still using an external environment file to store credentials and server information.
There is a ton of information out there on all these different Oracle blogs on how to properly encrypt your MaxL Scripts, but there is not too much out there on how to use this encryption while still utilizing an environment file.
For this example, we are going to walk through a series of files I created to demonstrate this functionality. Each file is prefixed with a step number and can be downloaded below if you would like to follow along.
Please note, in order to run these batch scripts included in this exercise, you need to have the Essbase Client installed on your local machine. Some modifications to the batch scripts will need to be made for versions 11.1.2.2+.
http://www.scottdanesi.com/software/misc/ScottDanesi-PasswordEncryption.zip
Step 1: 01-CreateKeys.bat
This is a batch script that will automatically create a unique set encryption keys for your system. Run this script as it is to create the file for the next step.
Example File Contents:
echo on
essmsh -gk >02-Keys.txt
Step 2: 02-Keys.txt
This text file is automatically generated by the batch file in the first step. It will contain a unique set of keys to use for encryption and decryption of your passwords.
Example File Contents:
Essbase MaxL Shell - Release 11.1.1 (ESB11.1.1.3.0B126)
Copyright (c) 2000, 2009, Oracle and/or its affiliates.
All rights reserved.
Public Key for Encryption: 2257,1114744343
Private Key for Decryption: 52844593,1114744343
MaxL Shell completed
Step 3: 03-PasswordInfo.txt
This text file needs to be modified with the Public Key from the "02-Keys.txt" file generated in Step 2 along with the password that you want to encrypt. This is technically a CSV file using the "pipe" as a delimiter.
Once you have modified this file, continue to the next step.
Example File Contents:
Password|18187,293621927
Step 4: 04-EncryptPassword.bat
For this step, you will run this batch script which will encrypt the password using the Public key that you entered into the file in Step 3. This script will create a text file containing your freshly encrypted password.
Example File Contents:
FOR /F "tokens=1-2 delims=|" %%A IN (03-PasswordInfo.txt) DO (
SET NewPassword=%%A
SET PublicKey=%%B
)
essmsh -ep %NewPassword% %PublicKey% >05-EncryptedPassword.txt
Step 5: 05-EncryptedPassword.txt
This is the output file from Step 4 that contains your newly encrypted password. You will need to reference this file when setting up the Environment File in the next step.
Example File Contents:
Essbase MaxL Shell - Release 11.1.1 (ESB11.1.1.3.0B126)
Copyright (c) 2000, 2009, Oracle and/or its affiliates.
All rights reserved.
Encrypted Data: 031017652655928821892075652309090891
MaxL Shell completed
Step 6: 06-EnvFile.txt
So here we are... We now have everything that we need to populate the environment file. This environment file is going to hold 4 peices of critical connection information for our test script. For this example, the setting must be in the following order; username, encrypted password, server name, and private key from the 02-Keys.txt file. Each of these values needs to be separated by the pipe | delimiter. Take a look below for my example.
Example File Contents:
admin|031017652655928821892075652309090891|localhost|205053283,293621927
Step 7: 07-Test.bat
This is our main batch script for testing that our environment file is working properly. It first reads from the environment file that we updated in Step 6 and sets the variables accordingly. It will then run a MaxL script that I included that logs into Essbase and logs back out (08-Test.mxl). This batch also creates the "09-TestMaxLOutput.txt" file so that you can verify that everything worked.
Example File Contents:
FOR /F "tokens=1-4 delims=|" %%A IN (06-EnvFile.txt) DO (
SET username=%%A
SET password=%%B
SET servername=%%C
SET key=%%D
)
echo on
essmsh -D 08-Test.mxl %key% %username% %password% %servername%
That is pretty much it! So don't forget to download the zip file that contains all of this sample code and start experimenting for yourself. Feel free to post any questions int he comments below and I will answer.
Thanks!