Los scripts JMP incorporan parámetros DSN; ¿¿por qué??<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Los scripts JMP incorporan parámetros de conexión de datos dentro del archivo JSL.¿Hay alguna razón para tal práctica de programación incorrecta?Imagine que tiene cientos de JSL y el administrador de SQL decidió cambiar las credenciales del servidor o la base de datos.¿Por qué no utilizar DSN como intermediario?
Re: Los scripts JMP incorporan parámetros DSN; ¿¿por qué??Probé esta solución y obtuve el 90% del resultado...
Obtengo una conexión exitosa a mi base de datos, pero aunque la información de DSN importada con la función de inclusión tiene los valores de UID y PWD, la conexión aún me solicita que ingrese el nombre de DSN y la contraseña en una ventana emergente de ODBC.
¿Alguna idea de por qué sucede esto?
//Obtener credenciales de DSN
::Obtener credenciales de DSN = "CONTROLADOR={Oracle en OraClient11g_home1};DSN=myDB;UID=myUID;PWD=myPWD;DBQ=MyDB;DBA=W;APA=T;EXC=F;FEN=T;QTO=T;FRC=10;FDL =10;LOB=T;RST=T;GDE=F;FRL=F;BAM=IfAllSuccessful;MTS=F;MDI=F;CSR=F;FWC=F;PFC=10;TLO=0;" ;
// No devuelve nada
;
Mi Jmp Script se conecta con éxito:
Si ( esta vacio (::Obtener credenciales de DSN),
incluir ( "C:\_Scripts JMP\JMP DSN\ Obtener credenciales de DSN .jsl" );
);
CONECTAR = crear conexión de base de datos (::Obtener credenciales de DSN);
SQL1 = "SELECCIONAR * DE DB.TABLA " ;
ARCHIVO SALIDA1 = "Mi nombre de archivo" ;
dt1 = Abrir base de datos (CONECTAR, SQL1, OUTFILE1);
Pero todavía me pide mi nombre de base de datos y mi contraseña...
Re: Los scripts JMP incorporan parámetros DSN; ¿¿por qué??Eso es mejor que lo que he estado haciendo.Gracias por compartir.Tengo el "lujo" de trabajar con usuarios no tecnólogos.
Re: Los scripts JMP incorporan parámetros DSN; ¿¿por qué??Esta es una mala solución de seguridad.Todo lo que tendría que hacer para obtener el nombre de usuario y la contraseña de su base de datos sería ejecutar:
incluir ( "$ADDIN_HOME(com.mydept.myapp)\Obtener DSN_CREDENTIALS.jsl" ) ;
:: mis_dsn_credenciales;
Lo que está almacenado en ::my_dsn_credentials se mostrará en el archivo de registro en texto sin formato.Sin mencionar el almacenamiento de todas las credenciales en un solo lugar como variables globales, podría ejecutar esto fácilmente:
incluir ( "$ADDIN_HOME(com.mydept.myapp)\Obtener DSN_CREDENTIALS.jsl" ) ;
mostrar globales() ;
Ahora tengo toda la información de la base de datos almacenada en Get DSN_CREDENTIALS.jsl, incluso las bases de datos que no se usan en el script original. recibió .Esta segunda parte se puede arreglar fácilmente cambiando todo "::" a "__" (doble guión bajo), por lo tanto, ::my_dsn_credentials se convierte en __my_dsn_credentials.Esto ocultará las variables globales para que no se muestren en show globals(); función. Sin embargo, esto aún no resuelve el problema donde la base de datos especificada se ve comprometida. Esto también se puede arreglar siguiendo el formato:
Obtener DSN_CREDENTIALS.jsl :
// Obtener DSN_CREDENTIALS.jsl
__mis_dsn_credenciales = "Driver={Oracle en OraClient11g64_home1};Dbq=MY_DATABASE;UID=MYUSERID;PWD=MYPASSWORD;" ;
__dbc = crear conexión de base de datos (__ mis_dsn_credenciales ) ;
// No devuelve nada
__mis_dsn_credenciales = . ;
Esto soluciona dos problemas.Uno puede pasar __dbc a otro script.Si uno ejecuta __dbc; pasará 'Database( "Oracle in OraClient11g64_home1(MY_DATABASE)" )' al registro del script anterior.Mostrar el controlador y la base de datos es una amenaza de seguridad mucho menor que pasar un nombre de usuario y una contraseña.En segundo lugar, y esto es importante, se sobrescribe __my_dsn_credentials.Esto significa que incluso si tuvieran que ADIVINAR la variable, la información aún está segura.
Re: Los scripts JMP incorporan parámetros DSN; ¿¿por qué??No parece estar en las preferencias de JMP 10. Está en la guía de secuencias de comandos JSL en la página 480. Debe configurarlo en JSL.Aquí está la parte relevante:
Nota: cuando importa datos de una base de datos ODBC, se agrega una variable de tabla que puede contener ID de usuario
e información de la contraseña. Para evitar que esto suceda, establezca la siguiente preferencia de solo JSL:
preferencia ( Ocultar cadena de conexión ODBC ( 1 )) ;
Re: Los scripts JMP incorporan parámetros DSN; ¿¿por qué??antes de publicar este comentario, no pude encontrar ninguna información sobre cómo administrar ODBC.Mi versión de JMP 10 no tiene esta opción.

Re: Los scripts JMP incorporan parámetros DSN; ¿¿por qué??Solución inteligente; ¡gracias por compartir!
Re: Los scripts JMP incorporan parámetros DSN; ¿¿por qué??Tengo cientos de scripts JSL que realizan llamadas a una base de datos Oracle a través de ODBC.Sin embargo, no incorporo parámetros de conexión de datos separados dentro de cada archivo JSL.En su lugar, uso una instrucción INCLUDE para ejecutar un solo archivo JSL que define la cadena DSN.
Así es como se ve mi código:
Tengo un script JSL, llamado Obtener DSN_CREDENTIALS.jsl :
// Get DSN_CREDENTIALS.jsl
::my_dsn_credentials = "Driver={Oracle in OraClient11g64_home1};Dbq=MY_DATABASE;UID=MYUSERID;PWD=MYPASSWORD;";
// Return nothing
.;
Cifré el script usando la capacidad de cifrado de código de JSL, por cierto.
Luego, cada vez que necesito la cadena de conexión, uso un código que se ve así:
// Get database access string
if (is empty(::my_dsn_credentials),
include("$ADDIN_HOME(com.mydept.myapp)\Get DSN_CREDENTIALS.jsl");
);
dbc = create database connection(::my_dsn_credentials);
sql_statement = "SELECT SYSDATE FROM DUAL";
dt = execute sql(dbc, sql_statement);
close database connection(dbc);
Re: Los scripts JMP incorporan parámetros DSN; ¿¿por qué??La mayoría de nuestros clientes encuentran esta función útil y, de hecho, se agregó debido a las solicitudes de los clientes.Se suprime fácilmente seleccionando Preferencias->Tablas->ODBC Ocultar cadena de conexión.Esto podría difundirse a los usuarios a través de un archivo de preferencias específico para su organización.