Gestion d’une bibliothèque Oracle dans SAS

Lorsque que l’on administre une plateforme SAS,  on en vient très vite à configurer des bibliothèques pointant vers des bases de données (via les modules SAS/ACCESS interface to). L’une des problématiques est de définir les utilisateurs de cette base de données (un compte Oracle par exemple) et de lier cette identité à son ou ses utilisateurs SAS. Pour bien comprendre, prenons un exemple simple. Mon environnement SAS contient 2 utilisateurs :
  • Un administrateur (sasadm@saspw)
  • Un utilisateur SAS Enterprise Guide (nicolas)
L’utilisateur SAS Enterprise Guide souhaite se connecter à une base de données  Oracle, via le compte oracle Scott. Nous avons donc : utilisateurs-oracle-dan-sas   Aussi, une fois connecté à SAS Enterprise Guide, avec son compte nicolas, l’utilisateur peut se connecter à sa base de données oracle en soumettant l’instruction LIBNAME suivant :
libname xe oracle user=scott  pw=tiger  path=ora12 shema=customer;
L’utilisateur ayant implicitement saisit le compte utilisateur et le mot de passe du compte oracle (scott/tiger), la connexion se fait sans problème. Maintenant, imaginons que notre utilisateur souhaite ne plus avoir à créer cette bibliothèque manuellement et aimerait qu’elle soit automatiquement présente à l’ouverture de SAS Enterprise Guide. Il se tourne donc vers son administrateur SAS et lui demande de créer une nouvelle bibliothèque Oracle dans les métadonnées.

Créer une bibliothèque Oracle dans les métadonnées.

L’administrateur SAS accepte volontiers et crée la bibliothèque Oracle en suivant les étapes ci-dessous :   utilisateurs-oracle-dan-sas-2utilisateurs-oracle-dan-sas-1 utilisateurs-oracle-dan-sas-3 utilisateurs-oracle-dan-sas-4 Maintenant que la bibliothèque Oracle est créée dans les métadonnées, l’administrateur vérifie si l’instruction libname associé est correcte : afficher-l-instruction-libname L’administrateur est alors « prompté » et doit saisir les informations de connexion à LA BASE ORACLE : afficher-l-instruction-libname-prompt L’instruction libname est ensuite affichée :   afficher-l-instruction-libname-affichage   Pour valider, l’administrateur copie puis colle cette instruction dans une session SAS ( Base SAS ou SAS Enterprise Guide ) :
LIBNAME ORA12 ORACLE  PATH=ORA12  SCHEMA=customer  USER=scott  PASSWORD="{sas002}F77E0C345A42C6A753443DCE" ;
Ce qui donne : NOTE: Libref ORA12 was successfully assigned as follows: Engine:        ORACLE Physical Name: ora12

 Validation par l'utilisateur

L’administrateur a créé sa bibliothèque, il informe l’utilisateur et lui demande de tester. Comme au début de l'article, l'utilisateur se connecte à guide avec son compte nicolas. La bibliothèque ORA12 est bien visible dans SASApp mais inaccessible. Il obtient un message d'erreur lorsqu'il essaye de l'activer : erreur-oracle-ORA-01005-dans-sas-guide   L’erreur est la suivante : [Error] ORACLE connection error: ORA-01005: null password given; logon denied. Pour aller plus loin dans l’investigation et déterminer la cause de problème, l’administrateur demande à nicolas de soumettre le code suivant (en mode debug), toujours dans une session Guide :
libname test meta library='ORA12' libdebug;
Ce qui donne : LIBDEBUG: Libname ORA12 ORACLE  PATH="ORA12"  USER="nicolas" SCHEMA='customer'; ERROR: ORACLE connection error: ORA-01005: null password given; logon denied. ERROR: Error in the LIBNAME statement. L’origine de l’erreur apparaît clairement :  SAS essaye de se connecter à Oracle en utilisant les informations d’identification du compte SAS ! Il faut donc modifier son paramétrage SAS pour associer son compte « nicolas » au compte oracle « scott »

Associer un compte utilisateur SAS à un compte utilisateur Oracle

Voilà « l’histoire » que nous voulons raconter.
  • L’utilisateur « nicolas » se connecter au serveur de métadonnées en utilisant son compte SAS
  • Lorsqu’il essaye de se connecter à la base Oracle, ce n’est pas le compte SAS qu’il faut utiliser mais le compte « scott »
Pour que l’histoire puisse voir le jour,  il faut associer le compte SAS au compte ORACLE. Cela se passe donc toujours dans SAS Management Console. Direction, les propriétés du compte « nicolas » et plus précisément l'onglet « comptes »  : creation-domaine-compte-oracle creation-domaine-compte-oracle-2   creation-domaine-compte-oracle-3   Il faut maintenant modifier la bibliothèque ORA 12 : Cliquez sur l’onglet « Data Server »   oracle-libref-propriete-sas-smc Puis dans la zone « Informations d’authentification », cliquez sur « Nouvelle » puis dans « Assistant Nouvelle connexion » choisissez le domaine « oracle » :   assistant-nouvelle-connexion-domaine-oracle-sas-smc   L’utilisateur peut maintenant soumettre  l’instruction libname de test, toujours avec l’option LIBDEBUG :
 libname test meta library='ORA12' libdebug;
Ce qui donne :   LIBDEBUG: Libname ORA12 ORACLE  PATH="ORA12"  USER="scott" PASSWORD='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' SCHEMA='customer'; NOTE: Libref TEST was successfully assigned as follows:       Engine:        META       Physical Name: ORA12A Nous constatons que SAS utilise bien les identifiants de connexion définit sur le domaine« oracle» non plus ceux définit sur le domaine « DefaultAuth»          

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.