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.¿Existe alguna razón para una práctica de programación tan inadecuada?Imagine que tiene cientos de JSL y el administrador de SQL decide cambiar las credenciales del servidor o de la base de datos.¿Por qué no utilizar los DSN como intermediarios?
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 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 DSN
::Obtener credenciales DSN = "DRIVER={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 exitosamente:
Si ( esta vacio (::Obtener credenciales DSN),
incluir ( "C:\_JMP Scripts\JMP DSN\ Obtenga credenciales DSN .jsl" );
);
CONECTAR = crear conexión de base de datos (::Obtener credenciales DSN);
SQL1 = "SELECCIONAR * DE DB.TABLE " ;
ARCHIVO1 = "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 de lo que he estado haciendo.Gracias por compartir.Tengo el "lujo" de trabajar con usuarios que no son expertos en tecnología.
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 se almacena 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 usaron en el script original. recibió .Esta segunda parte se puede solucionar fácilmente cambiando todos los "::" 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 todavía no resuelve el problema por el cual la base de datos especificada está comprometida. Esto también se puede solucionar 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_credenciales_dsn ) ;
// 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 para la 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 adivinaran 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 desde una base de datos ODBC, se agrega una variable de tabla que puede contener el ID de usuario.
e información de contraseña. Para evitar que esto suceda, establezca la siguiente preferencia de solo JSL:
preferir ( ODBC Ocultar cadena de conexión ( 1 )) ;
Re: Los scripts JMP incorporan parámetros DSN; ¿¿por qué??Antes de publicar este comentario no pude encontrar ninguna información sobre la administración de 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 lugar de eso, uso una declaración INCLUDE para ejecutar un único 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
.;
Cifro el script usando la capacidad de cifrado de código de JSL, por cierto.
Luego, cada vez que necesito la cadena de conexión utilizo un código parecido a este:
// 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 consideran que esta característica es útil y, de hecho, se agregó debido a 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 de su organización.