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
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: *******
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 :
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
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"
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