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 :
Dans cet article, je vais vous présenter comment mettre en place ce mécanisme et comme l'utiliser dans SAS.
Ce qui donne la création de deux fichiers :
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 :
Avant de continuer, vérifions la bonne prise en compte des credentials dans le wallet :
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 :
La connexion via un couple user/password est toujours possible :
Depuis le serveur Oracle, l'audit des sessions montre que la connexion via le wallet utilise bien le compte sasuser :
-> Vérifier la présence et les droits des fichiers wallets
ERROR: ORACLE connection error: ORA-01017: invalid username/password; logon denied.
-> 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.
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é.
1 |
sqlplus /@XE |

1 |
SQL> show user; |

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
1 |
mkstore -wrl . -create |

1 |
mkstore -wrl . -createCredential XE sasuser motdepasse |
1 |
mkstore -wrl . -listCredential |

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 :
1 2 3 |
WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = /home/sas/ ))) SQLNET.WALLET_OVERRIDE = TRUE SSL_CLIENT_AUTHENTICATION = FALSE |
1 |
sqlplus scott/tiger@XE |

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 :
1 |
libname myora oracle path="XE" |

1 |
libname orascott oracle path="XE" user="scott" password="tiger"; |
1 |
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; |

Quelques erreurs
ERROR: ORACLE connection error: ORA-12578: TNS:wallet open failed.

