Re: Cómo manejar la información de la contraseña del usuario en JSL (cadenas de conexión ODBC)Quizá me gusta poner la contraseña y el ID de usuario en un archivo separado en la carpeta de documentos del usuario. Algo como esto:
credenciales.jsl
{"fred","1234"}
Puede encriptarlo si lo desea, pero eso no tiene sentido excepto para evitar que su perro lo mire...
Desde la aplicación, utilice
{username,password} = include("$documents/credentials.jsl");
... use the credentials ...
username = .; password = .; // clear the variables when done with them
La función de inclusión devuelve el resultado de la última declaración ejecutada en el archivo, que construyó la lista de 2 elementos.
Hago esto principalmente para asegurarme de que no estoy registrando mis propias credenciales en un sistema de control de código fuente. Dado que el archivo se encuentra fuera del directorio del proyecto, no se recogerá por accidente. Lo encripto, con la esperanza de que cualquiera que piratee mi computadora no tenga JMP. Es posible que desee agregar un poco de información al nombre del archivo... la aplicación que lo necesita, el servicio al que se aplican las credenciales.
Re: Cómo manejar la información de la contraseña del usuario en JSL (cadenas de conexión ODBC)Creo que cifrar el archivo será mejor que tener esta información como texto sin formato.
¿Cuál sería la respuesta completa, incluido un paso de cifrado/descifrado muy simple?
Re: Cómo manejar la información de la contraseña del usuario en JSL (cadenas de conexión ODBC)Consulte mis comentarios anteriores: esto no es seguro. Pero así es como podría poner un pequeño bache de velocidad en el camino de un atacante.
Encripte este archivo con la función encrypt(), luego ejecute el archivo encriptado.
// Pre-encrypt this using edit->encrypt script. There
// is no need to use a run password, and no reason to
// make a complicated edit password. "a" is good enough.
//
// Caution: this is not secure. No password is needed to
// view this data, though JMP is required to decrypt it.
// If you need a decrypt password+prompt, you'll need to
// manually go through the GUI for encrypting scripts.
// https://community.jmp.com/t5/Discussions/How-to-handle-user-password-information-in-JSL-ODBC-connection/m-p/627942#M82631
encrypt = Function( {name, pass}, {x},
x = Expr( 1 + 1 ); // throw an error if not working
// https://community.jmp.com/t5/Discussions/How-to-check-if-the-running-script-is-encrypted/m-p/624766#M82350
If( Char( Name Expr( x ) ) == "1 + 1",
Throw( "the encrypt function needs to be encrypted to work correctly." )
);
// strings generally stay unencrypted. expressions
// that are not simple strings or numbers try to stay
// encrypted. The concatenation operator is enough to
// keep the expression's strings encrypted.
Char( Eval Expr( {Expr( name ) || "", Expr( pass ) || ""} ) ); // return value
);
Luego ejecuta esto para ver cómo funciona.
// use the encrypted encrypt function to make an encrypted list
name = "fred";
pass = "1234";
crypt = encrypt( name, pass );
If( length(crypt) < 500 + Length( pass ) + Length( name ),
Throw( "not encrypted. Did you execute the *encrypted* file containing the encrypt function?" )
);
file = Save Text File( "$temp/credentials.jsl", crypt );
name = .;
pass = .;
///////////////////////////////////////////////////
{name, pass} = Eval List( Parse( Load Text File( file ) ) );
write("\!nsaved file contains\!n",Load Text File( file ),"\!n\!ndecrypted is");
show(name,pass);
el archivo guardado contiene
{JSL cifrado("//-e12.1\!r\!n0,\!r\!n208,4193eJwNytmBhSAMAMB+tgWCCRBUkMuLgP0X8na+B3NI2evLjsG330/RUttTTEpOYhEyJ7JlBa2j1uAnpks3G3wTgpF7tJ8jqYrL\!r\ !nPvBetVXPxNjKIWh06B9i+P/zfrd+bo6IP7eUOA3kSsGoaGA1x0ovXovyGmy481u4wqIGYKnEhvuG6XAE4Qk19cmunKo32uGJkuTv\!r\!nB +khNtw=\!r\!n,0,"), JSL cifrado("//-e12.1\!r\!n0,\!r\!n208,4193eJwNzIkBxBAQAMB+rgWE9R1hQ/z0X8jdFDAcfUTDilxLV+PeyWbK7YEYHKE3A1bfMa7gUzjO2CxkyPwsVDP xS0TN9WNptpRC\!r\ !nLxnShipDYKmeKzWIoUTSF6XX/fjReuqKrYKwJ9yptTwR2DfaI2j/AlFVHd/bP3Mqa0cFcuV1KCuTGp9XmOmvrXe9+Dai8GNZN+Hz\!r\!nAxwZN40=\!r\!n,0,")}
descifrado es
nombre = "fredo";
paso = "1234";
JMP no incluye una función para cifrar secuencias de comandos mediante programación, solo la GUI interactiva. Esta solución alternativa no permite especificar la ejecución o la contraseña de edición. No hay contraseña de ejecución (cualquiera puede ejecutarla) y la contraseña de edición es desconocida. Es posible que prefiera una solución diferente que pusiera {"fredo","1234"} en una ventana de edición y deje que el usuario lo cifre manualmente (o no) antes de guardarlo. El usuario podría entonces decidir si desea que se le solicite una contraseña de ejecución, lo que sería un poco más seguro.
Re: Cómo manejar la información de la contraseña del usuario en JSL (cadenas de conexión ODBC)En Windows me gusta usar el administrador de credenciales:
Configure y obtenga credenciales en Credential Manager a través de PowerShell en Windows
Re: Cómo manejar la información de la contraseña del usuario en JSL (cadenas de conexión ODBC)Describo un enfoque que usa credenciales encriptadas en esta charla de Discovery Summit:
https://community.jmp.com/t5/Discovery-Summit-Americas-2022/JMP-and-Oracle-Tips-and-Tricks-for-a-Happy-Marriage-2022-US-30MP/ta-p/ 505583
Busque la sección "Ocultar la contraseña".
Re: Cómo manejar la información de la contraseña del usuario en JSL (cadenas de conexión ODBC)Oracle aceptó esto como una de las bases de datos. Gracias por el tutorial detallado.
Cómo manejar la información de la contraseña del usuario en JSL (cadenas de conexión ODBC)Me estoy conectando a una base de datos usando ODBC, que tiene un usuario y una contraseña específicos creados para ese propósito (no es posible usar Windows Active Directory u otro).
Cuando se genera la consulta, el script de la tabla almacena el ID de usuario.
Se solicita la contraseña, pero también se puede codificar directamente en la cadena de conexión en JSL.
¿Cuáles son las mejores opciones para manejar tales situaciones en JSL?
Los archivos JMP se pueden compartir, pero las actualizaciones deben solicitar un usuario y una contraseña específicos cuando se ejecutan por primera vez.
Automatización y secuencias de comandosAcceso a los datosRe: Cómo manejar la información de la contraseña del usuario en JSL (cadenas de conexión ODBC)Encontré un enfoque similar en esta discusión de 2018:
Conexión de base de datos con indicador de inicio de sesión
¿Cuál es el beneficio de cifrar el código para conectarse a la base de datos?
Re: Cómo manejar la información de la contraseña del usuario en JSL (cadenas de conexión ODBC)Si hay un código JSL disponible que se puede ejecutar para abrir una conexión a la base de datos, todos los usuarios con este código (cifrado o no) pueden acceder a la base de datos.
Por lo tanto, es esencial establecer un Ejecutar contraseña ¿Para evitar que los usuarios utilicen el fragmento sin permiso?
Por otro lado, con la contraseña de ejecución, resulta bastante incómodo utilizar el código automáticamente.
Re: Cómo manejar la información de la contraseña del usuario en JSL (cadenas de conexión ODBC)Yo diría que no comparta un código de este tipo que no debería ser utilizado por todos (si no desea establecer una contraseña de ejecución). Crear usuarios específicos también podría ayudar (al menos así podrá cambiar más fácilmente la contraseña/deshabilitar ese usuario) e incorporar a TI para que puedan verificar quién realiza qué consultas y qué y tomar las medidas correspondientes.
También es muy probable que puedas usar el administrador de credenciales (si estás en Windows) para administrar esas contraseñas como @ih sugirió (para que no tenga que almacenarlos en el archivo jsl). No he usado (todavía) el administrador de credenciales con JMP, pero lo usé al crear RPA (automatización robótica de procesos) y funcionó muy bien.
Re: Cómo manejar la información de la contraseña del usuario en JSL (cadenas de conexión ODBC)Esto es parte de por qué me gusta usar el almacén de credenciales de Windows: la contraseña simplemente no está disponible para otros usuarios.Almacenar el código o los archivos que contienen esas credenciales en un lugar al que solo pueden acceder personas seleccionadas podría tener un efecto similar.
Re: Cómo manejar la información de la contraseña del usuario en JSL (cadenas de conexión ODBC)Qué tal esto:
Utilice los derechos de Windows AD para controlar el acceso a la base de datos:
- generar un script para acceder a la base de datos, incluidos los derechos de acceso a la base de datos
- cifrar el archivo en JMP de modo que ningún usuario pueda ver la contraseña en texto sin formato
- dentro del script, intente acceder a un archivo en un recurso compartido de red con derechos de acceso AD
Si a un usuario se le permite acceder al archivo, puede utilizar el acceso a la base de datos.
para un usuario sin derechos de acceso, el script solo mostrará el mensaje de error
queryDB = Function( {SQLString},
pwd = Load Text File( "network path with AD rights" );
If( pwd = "my secret password",
result = New SQL Query(
Connection( "ODBC:DSN=database;PWD=xxx" ),
QueryName( "new" ),
CustomSQL( SQLString )
),
Caption( "no access rights" )
)
)