Hello All,
I am using SAS on Windows connected to remote SAS Server installed on Azure(Windows). I use SAS 9.4M3.
I have a situation, I will try my best to explain the situation. Please let me know your thoughts and suggestions.
We have encrypted data in the database. The encryption is being done by the third party tool. Now the end user wants to decrypt the data which is accessed via SAS Enterprise Guide and Tableau.
We have successfully implemented the Tableau Part using the below script.
def var_decryption(inputList) import azure.common.credentials import azure.keyvault.secrets import azure.identity keyvalultCredentials = ******* headers = **** body = **** url = **** response = requests.post(url, data=body, headers) jsonData=response.json() accessToken = jsonData["access_token"] variable = '~!'.join([str(item) for item in inputlist]) task = {'plaintext': variable} header = { 'accesstoken' : accesstoken } resp = request.post('http://URL', json=task , headers = header,verify=False) resTempList = resp.text.split('!') return resTempList #for deploying on Tableau server we use the below line client.deploy('var_decryption', var_decryption, 'decrypt text via api', override=True) #from Tableau we call it with the below command #SCRIPT_STR("return tabpy.query('var_decryption', variable1)['response']",ATTR(varaible2])) `
So., the above python function is deployed on the Tableau server using TabPy component using client.deploy(https://tableau.github.io/TabPy/docs/tabpy-tools.html). The last line in the above code is how we call & pass the encrypted value and the response is passed on after decryption. Calling the API, authentication etc happens with this script. It is running for each value on reading of the data.
Now., I have to do the same process using SAS EG. Like Tableau we cannot deploy Python function on the SAS server., I tried to use Proc FCMP but failed because the our version of SAS does not support PROC FCMP.
Hence, I am left with running the above python script using X Command but even that is not working because I am unable to figure out how to pass the variable, dataset name and the path of the dataset (With the script above it only passes variable name).
The important points to mention here is, the end user wants the data to be decrypted after executing a query in SAS EG.., the API is treated pretty much like black box because that is working and the business does not want to change anything related to it. Hence we have to call the API as is..!
Example: Data New(var1,var2); Set db.table; Run; The above query is ran from SAS EG Where var1 is encrypted and hence we need to decrypt the value of that using the python script.
Can you please help me with the best solution for this process.
Thank you so much in advance. And please let me know if I am not clear in any aspect.
The problem is your SAS data resides on the remote SAS server only so the only way to decrypt it would be to also run the decryption process there. What version of SAS do you have? It is possible to run Python in some older SAS versions if you have SAS/IML.
Have a look at this Communities post about running R and Python with or without SAS/IML: Solved: How to RUN R or Python in SAS - SAS Support Communities
It does mean Python will need to be installed on your SAS server. Have you discussed this with your SAS administrator?
I suggest you check out the code examples in the link I sent you. @rogerjdeangelis may be able to help so I'm linking him in.
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.