6 mars 2025

Wallet Oracle et SQLPlus

Créer un wallet Oracle permet d'y stocker les mots de passe de coinnexion, et ainsi d'éviter de retrouver des sqlplus HR/PASSWORD dans les scripts d'exploitation

Exemple (sur une machine disposant du client Oracle)

La base est HR9DEV hébergée par le serveur HOST_HR9DEV, les comptes HR et JETSPEED. Nous allons créer des alias HR9DEV_HR et HR9DEV_JETSPEED.

Les commandes permettent d'indiquer le mot de passe en ligne. Pour éviter qu'il ne soit accessible dans l'historique de commande, préférer répondre à la question  qui sera posée.

mkdir $HOME/.wallet

chmod 700 $HOME/.wallet

cd $HOME/.wallet

mkstore -wrl . -create

Oracle Secret Store Tool Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
Copyright (c) 2004, 2019, Oracle and/or its affiliates. All rights reserved.
Enter password: *******
Enter password again: *******

mkstore -wrl . -createCredential HR9DEV_JETSPEED JETSPEED

Oracle Secret Store Tool Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
Copyright (c) 2004, 2019, Oracle and/or its affiliates. All rights reserved.
Your secret/Password is missing in the command line
Enter your secret/Password: ***
Re-enter your secret/Password: ***
Enter wallet password: *******

mkstore -wrl . -createCredential HR9DEV_HR HR

Oracle Secret Store Tool Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
Copyright (c) 2004, 2019, Oracle and/or its affiliates. All rights reserved.
Your secret/Password is missing in the command line
Enter your secret/Password: ***
Re-enter your secret/Password: ***
Enter wallet password: *******

ls -l
-rw------- 1 hr9ce1 hr 949 Mar 7 17:15 cwallet.sso
-rw------- 1 hr9ce1 hr 0 Mar 7 17:12 cwallet.sso.lck
-rw------- 1 hr9ce1 hr 904 Mar 7 17:15 ewallet.p12
-rw------- 1 hr9ce1 hr 0 Mar 7 17:12 ewallet.p12.lck

Pour lister le contenu du wallet :

mkstore -wrl . -listCredential
Enter wallet password: *******
List credential (index: connect_string username)
2: HR9DEV_JETSPEED JETSPEED
1: HR9DEV_HR HR

Pour modifier ou supprimer :
mkstore -wrl . -modifyEntry <alias>
mkstore -wrl . -deleteEntry <alias>

Paramétrage SQLNet :

echo "WALLET_LOCATION =
(SOURCE =
(METHOD = FILE)
(METHOD_DATA = (DIRECTORY = $PWD))
)
SQLNET.WALLET_OVERRIDE = TRUE" > sqlnet.ora


echo "HR9DEV_JETSPEED=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=HOST_HR9DEV)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=HR9DEV)))" >> tnsnames.ora

echo "HR9DEV_HR=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=HOST_HR9DEV)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=HR9DEV)))" >> tnsnames.ora


Test de SQLPLUS 
(si vous n'êtes pas dans le répertoire du wallet, remplacer $PWD par son chemin)

TNS_ADMIN=$PWD sqlplus /@HR9DEV_HR
SQL> show user
USER is "HR"

TNS_ADMIN=$PWD sqlplus /@HR9DEV_JETSPEED
SQL> show user
USER is "JETSPEED"

Test du SQLoader :

TNS_ADMIN=$PWD sqlldr userid=/@HR9DEV_HR control=$TMP/ctl.sqlldr data=$TMP/data.sqlldr

SQL*Loader: Release 19.0.0.0.0 - Production on Mon Mar 10 12:09:39 2025
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.

Path used:      Conventional
Commit point reached - logical record count 2

Table EMPLOYEE:
  2 Rows successfully loaded.


Test de expdp :
Au premier abord la commande pose problème. Pour ne pas voir apparaître la question "Password:" il faut fermer l'entrée standard avec en fin de commande un "</dev/null"

TNS_ADMIN=$PWD expdp /@HR9DEV_HR DIRECTORY=HRDUMP DUMPFILE=PL10.dmp TABLES=PL10 </dev/null

Connected to: Oracle Database 19c EE Extreme Perf Release 19.0.0.0.0 - Production

Starting "HR"."SYS_EXPORT_TABLE_01": /********@HR9DEV_HR DIRECTORY=HRDUMP DUMPFILE=PL10.dmp TABLES=PL10
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Processing object type TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
...
Job "HR"."SYS_EXPORT_TABLE_01" successfully completed at Wed Mar 26 19:57:52 2025 elapsed 0 00:00:21

Pour ne pas avoir à spécifier TNS_ADMIN à chaque fois, vous pouvez créer un alias, une fonction ou un script Unix. Si vous choisissez d'exporter la variable dans le .profile attention aux effets de bord car les fichiers sqlnet.ora et tnsnames.ora sont habituellement initialisés par l'équipe technique lors de la création et du paramétrage de l'environnement.

Bien évidemment, il faut s'assurer de la sécurité d'accès à ces fichiers wallet

On peut aussi sécuriser les wallet en faisant de sorte qu’ils ne soient pas portables : si on utilise le binaire orapki à la place de mkstore, le wallet ne pourra pas être déplacé d’un compte Linux à un autre, ou d’un serveur à un autre.

Merci à Thierry pour ses explications.

Aucun commentaire:

Enregistrer un commentaire