Administration SAS9

Gestionar las credenciales de la base de datos entre varios entornos (DEV/REC/PROD)

Simon 7 vistas
Nivel de dificultad
Débutant
Publicado el :

Cuando se implementan proyectos SAS© de un entorno de desarrollo a un entorno de integración o producción, la gestión de las conexiones a bases de datos (DB2, Oracle, SQL Server) a menudo se convierte en un dolor de cabeza.

El Problema: Ha definido una librería en la SAS© Management Console. En la pestaña de almacenamiento físico, ha introducido el ID de usuario y la contraseña de la base de datos de desarrollo. Cuando implementa sus jobs o archivos .sas© en el entorno de integración, la conexión falla porque las credenciales de la base de datos son diferentes allí. Entonces se ve obligado a modificar los metadatos o regenerar el código en cada implementación.

La Solución: Abstracción mediante Macrovariables

En lugar de "codificar" (hardcode) las credenciales en los metadatos de la tabla o la librería, la buena práctica es utilizar referencias dinámicas que se resolverán en tiempo de ejecución (runtime).

Aquí está el proceso en dos pasos para que sus implementaciones sean fluidas:

1. Configuración de Metadatos (SMC)

En la SAS© Management Console, en la definición de su librería (o en las propiedades de la base de datos):

  • No introduzca el nombre de usuario real.

  • En su lugar, escriba el nombre de una macrovariable, por ejemplo &DBUSER y &DBPASS.

  • Asegúrese de introducir estos valores literalmente (con el &).

Al asignar la librería, SAS© aún no verá la contraseña, sino la referencia a la variable.

Note :
Configuración del Entorno (Autoexec)
El valor real de estas variables debe definirse a nivel del servidor, específicamente para cada entorno. El mejor lugar para ello es el archivo autoexec.sas© del servidor (o el archivo de configuración).

En el servidor de Desarrollo: El autoexec contiene:
1%let DBUSER = user_dev;
2%let DBPASS = pass_dev;
Note :
En el servidor de Integración: El autoexec contiene:
1%let DBUSER = user_int;
2%let DBPASS = pass_int;
Note :
Así, el mismo código desplegado funcionará en todas partes sin modificaciones, ya que buscará el valor "local" definido en la máquina actual.

Seguridad: No olvide la codificación
Almacenar contraseñas en texto claro en un archivo autoexec.sas© presenta un riesgo de seguridad. Se recomienda encarecidamente utilizar el procedimiento PROC PWENCODE para ocultar esta información.

Ejemplo:
1/* Générer un mot de passe encodé */
2PROC PWENCODE in='MonVraiMotDePasse'; RUN;
3 
4/* Résultat dans la log : {SAS002}123456... */
Note :
Luego puede usar esta cadena codificada en su autoexec:

SAS©
1%let DBPASS = {SAS002}123456... ;
SAS© interpretará y decodificará automáticamente este valor al conectarse a la base de datos.