Administration SAS9

Gérer les identifiants de base de données entre plusieurs environnements (DEV/REC/PROD

Simon 24/08/2020 6 Aufrufe

Lorsqu'on déploie des projets SAS© d'un environnement de développement vers un environnement d'intégration ou de production, la gestion des connexions aux bases de données (DB2, Oracle, SQL Server) devient souvent un casse-tête.

Le Problème : Vous avez défini une librairie dans la SAS© Management Console. Dans l'onglet concernant le stockage physique, vous avez saisi l'identifiant et le mot de passe de la base de données de développement. Lorsque vous déployez vos jobs ou vos fichiers .sas© sur l'environnement d'intégration, la connexion échoue car les identifiants de la base de données y sont différents. Vous êtes alors obligé de modifier les métadonnées ou de régénérer le code à chaque déploiement.

La Solution : L'abstraction par Macro-Variables

Plutôt que de "durcir" (hardcode) les identifiants dans les métadonnées de la table ou de la librairie, la bonne pratique consiste à utiliser des références dynamiques qui seront résolues au moment de l'exécution (runtime).

Voici la démarche en deux étapes pour rendre vos déploiements fluides :

1. Configuration des Métadonnées (SMC)

Dans la SAS© Management Console, au niveau de la définition de votre librairie (ou dans les propriétés de la base de données) :

  • Ne saisissez pas le nom d'utilisateur réel.

  • À la place, inscrivez le nom d'une macro-variable, par exemple &DBUSER et &DBPASS.

  • Assurez-vous d'entrer ces valeurs littéralement (avec le &).

Lors de l'assignation de la librairie, SAS© ne verra pas encore le mot de passe, mais la référence à la variable.

Note :
Configuration de l'Environnement (Autoexec)
La valeur réelle de ces variables doit être définie au niveau du serveur, spécifiquement pour chaque environnement. Le meilleur endroit pour cela est le fichier autoexec.sas© du serveur (ou le fichier de configuration).

Sur le serveur de Développement : L'autoexec contient :
1%let DBUSER = user_dev;
2%let DBPASS = pass_dev;
Note :
Sur le serveur d'Intégration : L'autoexec contient :
1%let DBUSER = user_int;
2%let DBPASS = pass_int;
Note :
Ainsi, le même code déployé fonctionnera partout sans modification, car il ira chercher la valeur "locale" définie sur la machine en cours.

Sécurité : N'oubliez pas l'encodage
Stocker des mots de passe en clair dans un fichier autoexec.sas© présente un risque de sécurité. Il est fortement recommandé d'utiliser la procédure PROC PWENCODE pour masquer ces informations.

Exemple :
1/* Générer un mot de passe encodé */
2PROC PWENCODE in='MonVraiMotDePasse'; RUN;
3 
4/* Résultat dans la log : {SAS002}123456... */
Note :
Vous pouvez ensuite utiliser cette chaîne encodée dans votre autoexec :

SAS©
1%let DBPASS = {SAS002}123456... ;
SAS© saura interpréter et décoder automatiquement cette valeur lors de la connexion à la base de données.