SAS/Access to Oracle et utilisation des Wallets

Les Wallet Oracle permettent de sécuriser les connexions à la base. Il s'agit de 2 fichiers cryptés en Triple-DES manipulables qu’avec des binaires Oracle ( l'outil mkstore). Ces fichiers contiennent l’association d'un nom de service Oracle à  un compte oracle et son  mot de passe. Ainsi, pour se connecter au service il suffit d'indiquer uniquement le nom du service. Oracle détermine alors via les wallets le compte oracle à utiliser et le mot de passe de celui-ci :
sqlplus /@XE
sas-wallet-oracle-1
SQL> show user;
sas-wallet-oracle-2 Dans cet article, je vais vous présenter comment mettre en place ce mécanisme et comme l'utiliser dans SAS.

Création du wallet

Vous vous en doutez la première étape consiste à créer le wallet qui servira au stockage des informations de connexion. La commande pour créer une wallet est la suivante : mkstore –wrl [EMPLACEMENT_FICHIERS] – create
mkstore -wrl . -create
Ce qui donne la création de deux fichiers : sas-wallet-oracle-3 Maintenant que nos fichiers de wallets sont créés, nous allons pouvoir y ajouter une association SERVICE, LOGIN et MOT DE PASSE, via la commande ci-dessous :
mkstore -wrl . -createCredential XE sasuser motdepasse
Avant de continuer, vérifions la bonne prise en compte des credentials dans le wallet :
mkstore -wrl .  -listCredential
sas-wallet-oracle-4

Configuration du client Oracle

Les opérations ci-dessous sont effectuée sur le serveur SAS. La première étape consiste à copier les fichiers de wallets dans un répertoire accessible par SAS. Dans mon cas je copie les wallets dans la home directory de mon utilisateur. La deuxième étape consiste à créer un fichier sqlnet.ora indiquant qu'il est possible d'utiliser les wallets pour la connexion :
WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = /home/sas/ )))
SQLNET.WALLET_OVERRIDE = TRUE
SSL_CLIENT_AUTHENTICATION = FALSE
Ce fichier sqlnet.ora est copié au dans le répertoire définit dans la variable d'environnement TNS_ADMIN (dans mon cas /opt/sas/install/AccessClients/9.4/OracleInstantClient/instantclient_12_2) Les connexions se font maintenant en utilisant la wallet. Notez qu'il est toujours possible de se connecter via un couple login/password :
sqlplus scott/tiger@XE
sas-wallet-oracle-5  

Connexion à la base depuis une session SAS

Maintenant que la connexion via les wallets fonctionnent en dehors de SAS, se connecter à Oracle via SAS/ACCESS interface to Oracle et en utilisant ce mécanisme est simple. Il suffit d'utiliser la syntaxe ci-dessous :
libname myora oracle path="XE"
sas-wallet-oracle-6 La connexion via un couple user/password est toujours possible :
libname orascott oracle path="XE" user="scott" password="tiger";
Depuis le serveur Oracle, l'audit des sessions montre que la connexion via le wallet utilise bien le compte sasuser :
select a.spid  || ' | ' || b.sid || ' | ' ||  b.machine || ' | ' ||  b.username   || ' | ' ||  b.server  || ' | ' ||  osuser  from v$session b, v$process a where b.paddr = a.addr and type='USER' order by spid;
sas-wallet-oracle-7

Quelques erreurs

ERROR: ORACLE connection error: ORA-12578: TNS:wallet open failed. sas-wallet-oracle-8 -> Vérifier la présence et les droits des fichiers wallets   ERROR: ORACLE connection error: ORA-01017: invalid username/password; logon denied. sas-wallet-oracle-9   -> Ce message d'erreur montre que l'utilisation des wallets n'est pas prise en compte. Vérifier la configuration et/ou la présence de votre fichier sqlnet.ora   ERROR: ORACLE connection error: ORA-01005: null password given; logon denied. sas-wallet-oracle-10 Dans cet exemple, j'ai ajouté l'option user. Cela a pour impact de ne pas utiliser les wallets. Un mot de passe est donc demandé.  

Nicolas Housset

Passionné d'informatique, je suis Consultant et expert technique SAS VIYA, également co-fondateur de la société Flexcelite. Spécialisé dans les technologies SAS (Viya, 9.4) et les infrastructures associées (Linux, Hadoop, Azure), ce blog est mon espace pour partager mes mémos techniques et retours d'expérience.