Ocultar una variable del registro con guiones bajos... Casi funcionaEn la reciente Cumbre JMP, pregunté a los desarrolladores cómo podía ocultar una variable que contenía credenciales para una base de datos. Mi solución actual es el 80% del camino recorrido. Configuro las credenciales en una variable en un script cifrado, luego incluyo() ese script y uso la variable en un script que se conecta a la base de datos. Cualquiera que abra el script principal puede ver las credenciales yendo al archivo de registro y buscando la variable. Los desarrolladores de JSL tuvieron mucha demanda en la Cumbre y otras personas con las que hablé no estaban seguras de cómo ocultar una variable.
Entonces vi esto: Cifrado y variables globales (jmp.com)
Si simplemente pones dos guiones bajos antes de una variable, los ocultará... casi. Si intenta Mostrar ( __myVar), Imprimir ( __myVar) o Escribir ( __myVar), el resultado estará en blanco. ¡Excelente! Pero luego descubrí que si simplemente escribes __myVar directamente en el registro, el registro lo define por ti. En realidad, esa es una de las formas más fáciles de mostrar la variable...
Parece una laguna jurídica no intencionada. El doble guión bajo detiene todos esos métodos de secuencia de comandos y si pasa el cursor sobre el nombre de la variable en la secuencia de comandos, no mostrará el contenido. Pero existe una forma realmente obvia de mostrar el contenido simplemente ingresando la variable directamente.
Tengo buenas razones para no querer cifrar el script principal, solo la cadena de conexión. No estoy seguro si este es un artículo de la lista de deseos o si me falta algo.
Automatización y secuencias de comandosRe: Ocultar una variable del registro con guiones bajos... Casi funcionaSi miras mi charla "JMP y Oracle..." mencionada anteriormente, esto es lo que hago:
- Cree una función cifrada que devuelva la conexión a la base de datos.
Aquí está el final de la función:
my_dbc = create database connection(dsn_string);
// Return the connection to Oracle
my_dbc;
Re: Ocultar una variable del registro con guiones bajos... Casi funcionaAparentemente, también puedes ver todas las variables "ocultas" en el depurador.

Re: Ocultar una variable del registro con guiones bajos... Casi funciona¡Gracias! Creo que esto me lleva al 99% del camino. Resuelve muy bien el problema de las variables. El 1% es que puedo ver las credenciales cuando se ejecuta el comando Include(). Cualquiera que mire el script puede ver algo como Include(db_credentials), ejecutar esa línea y buscar en el archivo de registro.
Para mí se ve así:
Include("DSN encrypted function.jsl");
//Log file shows:
//:*/
Include("DSN encrypted function.jsl");
/*:
Function( {},
{Default Local},
dsn_string = "DSN=myDSN;UID=" || "uname" || ";PWD=" || "pwd" || ";";
my_dbc = Create Database Connection( dsn_string );
my_dbc;
)Tampoco aborda la parte de mi pregunta sobre la técnica de dos guiones bajos. ¿Por qué tenerlo si sólo oscurece parcialmente las variables? ¿Es por seguridad o algún otro propósito?
Re: Ocultar una variable del registro con guiones bajos... Casi funcionaEn realidad, me lleva al 100% del camino. Se me ocurrió que Incluir solo mostraría lo último que hizo en el registro. Agregué Print ("Esto es lo último") y ahora no puedo ver la definición de la función.
¡Gracias!
Re: Ocultar una variable del registro con guiones bajos... Casi funcionaCreo que tienes que hacerlo:
- cree una función cifrada para realizar la consulta que contiene la cadena de conexión dentro de la función (nunca las devuelva)
- crear una función cifrada que abre la conexión de la base de datos (no se puede usar Nueva consulta SQL() si usa esto cuál es el método preferido en JMP para realizar consultas de datos )
- Utilice algo como el administrador de credenciales de Windows
Los scripts JMP incorporan parámetros DSN; ¿¿por qué??
Cómo manejar la información de la contraseña del usuario en JSL (cadenas de conexión ODBC)
JMP y Oracle: consejos y trucos para un matrimonio feliz (2022-US-30MP-1093)
Re: Ocultar una variable del registro con guiones bajos... Casi funcionaHe estado redefiniendo las variables sensibles como Vacías() después de usarlas, de modo que, incluso si alguien obtiene los nombres de las variables, no contendrán ninguna información.
Re: Ocultar una variable del registro con guiones bajos... Casi funciona</CODE></PRE>
<P>¡Gran idea!<BR /> Encontré esta recomendación en<BR /> <A href="https://www.jmp.com/support/help/en/19.0/?os=win&source=application#page/jmp/work-with-expressions-in-an-encrypted-script.shtml#" target="_blank" rel="noopener noreferrer">https://www.jmp.com/support/help/es/19.0/?os=win&source=application#page/jmp/trabajar-con-expresiones-en-un-script-encriptado.shtml#</A></P>
<PRE><CODE class=" language-jsl">

</CODE></PRE>
<P>Por otro lado, <A href="https://www.jmp.com/support/help/en/19.0/?os=win&source=application#page/jmp/encryption-and-global-variables.shtml" target="_blank" rel="noopener noreferrer">https://www.jmp.com/support/help/en/19.0/?os=win&source=application#page/jmp/encryption-and-global-variables.shtml</A> es más una advertencia y menos una estrategia:</P>
<P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="hogi_1-1763829135582.png" style="width: 400px;"><span class="lia-inline-image-display-wrapper" image-alt="hogi_1-1763829135582.png" style="width: 400px;"><img src="https://us.v-cdn.net/6038925/uploads/images/87531iDDA2ACB34BC016E4/hogi_1-1763829135582.png" role="button" title="hogi_1-1763829135582.png" alt="hogi_1-1763829135582.png" /></span></SPAN></P>
<PRE><CODE class=" language-jsl">
</CODE></PRE>
<BR />
<PRE><CODE class=" language-jsl"><BR /><BR />Names default to here(1);
__Hello=1;
Show(__Hello);
Show(Char(__Hello));
new namespace("__Test");
__Test:Hello=1;
Show(__Test);
Show namespaces();
Lo mismo con el cifrado:
//-e12.1
0,
344,4353eJwNzdmRhSAQAMB8NoWRc0AERu5DzT+Qff9d1QFHqsV6JkdVotYlkkDhRd03clZQQT4lY/V9by5qQPZ9+cMUryFddMeUzS/o
xBrLU9Be+4jFDalbz/jcKoH6mKax/aHIcsukQunhCmoHGbPI3PlbvwfT9ime6fmsTLNx7dCG3WexZhOfUzvj9U3itCUnjnbdv3yj
AaaaOb9Y+hhpa97cISVRJJVBVNCklH+vNc37BuxS3iv9QMQa4/lOEyo3hZ56pN5qBk8XfRSHcw3c5vwEgG20xmhAQ+w2zYhIk6+k
SDhYpzxVziJBoDwOpTSXHKXq2e3o1hnd+PsHyKdkiw==
,0,
Show(__Hello);
Show(Char(__Hello));
Show Namespaces()
...aún con acceso a todas las definiciones.