Ri: Come gestire le informazioni sulla password dell'utente in JSL (stringhe di connessione ODBC)Mi piace inserire la password e l'ID utente in un file separato nella cartella dei documenti dell'utente, forse. Qualcosa come questo:
credenziali.jsl
{"fred","1234"}
Puoi crittografarlo se vuoi, ma non ha senso se non per impedire al tuo cane di guardarlo...
Dall'applicazione, utilizzare
{username,password} = include("$documents/credentials.jsl");
... use the credentials ...
username = .; password = .; // clear the variables when done with them
La funzione include restituisce il risultato dell'ultima istruzione eseguita nel file, che ha costruito l'elenco di 2 elementi.
Lo faccio principalmente per assicurarmi di non controllare le mie credenziali in un sistema di controllo del codice sorgente. Poiché il file si trova al di fuori della directory del progetto, non verrà prelevato per caso. Lo crittografo, sperando che chiunque hackeri il mio computer non abbia JMP. Potresti voler aggiungere un po 'di informazioni al nome del file ... l'app che ne ha bisogno, il servizio a cui si applicano le credenziali.
Ri: Come gestire le informazioni sulla password dell'utente in JSL (stringhe di connessione ODBC)Penso che crittografare il file sarà meglio che avere queste informazioni come testo normale.
Quale sarebbe la risposta completa, incluso un passaggio di crittografia/decrittografia molto semplice?
Ri: Come gestire le informazioni sulla password dell'utente in JSL (stringhe di connessione ODBC)Fare riferimento ai miei commenti sopra: questo non è sicuro. Ma ecco come potresti mettere un piccolo dosso di velocità sul percorso di un attaccante.
Crittografare questo file con la funzione encrypt(), quindi eseguire il file crittografato.
// 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
);
Quindi esegui questo per vedere come funziona
// 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);
file salvato contiene
{JSL crittografato("//-e12.1\!r\!n0,\!r\!n208,4193eJwNytmBhSAMAMB+tgWCCRBUkMuLgP0X8na+B3NI2evLjsG330/RUttTTEpOYhEyJ7JlBa2j1uAnpks3G3wTgpF7tJ8jqYrL\!r\! nPvBetVXPxNjKIWh06B9i+P/zfrd+bo6IP7eUOA3kSsGoaGA1x0ovXovyGmy481u4wqIGYKnEhvuG6XAE4Qk19cmunKo32uGJkuTv\!r\!nB +khNtw=\!r\!n,0,"), crittografia JSL("//-e12.1\!r\!n0,\!r\!n208,4193eJwNzIkBxBAQAMB+rgWE9R1hQ/z0X8jdFDAcfUTDilxLV+PeyWbK7YEYHKE3A1bfMa7gUzjO2CxkyPwsVDP xS0TN9WNptpRC\!r\ !nLxnShIpDYKmeKzWIoUTSF6XX/fjReuqKrYKwJ9yptTwR2DfaI2j/AlFVHd/bP3Mqa0cFcuV1KCuTGp9XmOmvrXe9+Dai8GNZN+Hz\!r\!nAxwZN40=\!r\!n,0,")}
decifrato è
nome = "fred";
passare = "1234";
JMP non include una funzione per la crittografia programmatica degli script, solo la GUI interattiva. Questa soluzione alternativa non consente di specificare la password di esecuzione o modifica. Non esiste una password di esecuzione (chiunque può eseguirla) e la password di modifica è sconosciuta. Potresti preferire una soluzione diversa che metterebbe {"fred","1234"} in una finestra di modifica e consentire all'utente di crittografarlo manualmente (o meno) prima di salvarlo. L'utente potrebbe quindi decidere se desidera una richiesta per una password di esecuzione, che sarebbe un po' più sicura.
Ri: Come gestire le informazioni sulla password dell'utente in JSL (stringhe di connessione ODBC)Su Windows mi piace usare il gestore delle credenziali:
Imposta e ottieni le credenziali in Credential Manager tramite PowerShell su Windows
Ri: Come gestire le informazioni sulla password dell'utente in JSL (stringhe di connessione ODBC)Delineo un approccio che utilizza credenziali crittografate in questo discorso al 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
Cerca la sezione "Nascondere la password".
Ri: Come gestire le informazioni sulla password dell'utente in JSL (stringhe di connessione ODBC)Ad accettare questo come uno dei database era Oracle. Grazie per il tutorial dettagliato.
Come gestire le informazioni sulla password dell'utente in JSL (stringhe di connessione ODBC)Mi sto connettendo a un database utilizzando ODBC, che ha un utente e una password specifici creati a tale scopo (non è possibile utilizzare Windows Active Directory o altro).
Quando la query viene creata, lo script della tabella memorizza l'ID utente.
La password viene richiesta ma può anche essere codificata direttamente nella stringa di connessione in JSL.
Quali sono le migliori opzioni per gestire tali situazioni in JSL?
I file JMP possono essere condivisi ma gli aggiornamenti dovrebbero richiedere utente e password specifici quando vengono eseguiti per la prima volta.
Automazione e scriptingAccesso ai datiRi: Come gestire le informazioni sulla password dell'utente in JSL (stringhe di connessione ODBC)Ho trovato un approccio simile in questa discussione del 2018:
Connessione al database con richiesta di accesso
Qual è il vantaggio di crittografare il codice per connettersi al database?
Ri: Come gestire le informazioni sulla password dell'utente in JSL (stringhe di connessione ODBC)Se è disponibile un codice JSL che può essere eseguito per aprire una connessione al database, ogni utente con questo codice (crittografato o meno) può accedere al database.
Quindi, è essenziale impostare a Esegui password impedire agli utenti di utilizzare lo snipet senza autorizzazione?
D'altra parte, con la password di esecuzione, diventa piuttosto scomodo utilizzare il codice in modo automatico.
Ri: Come gestire le informazioni sulla password dell'utente in JSL (stringhe di connessione ODBC)Direi di non condividere un codice del genere che non dovrebbe essere utilizzato da tutti (se non vuoi impostare la password di esecuzione). Anche la creazione di utenti specifici potrebbe essere d'aiuto (almeno puoi quindi modificare più facilmente la password/disabilitare quell'utente) e coinvolgere l'IT in modo che possano verificare chi sta eseguendo quali query e cosa e agire di conseguenza.
Inoltre molto probabilmente potresti utilizzare il gestore delle credenziali (se su Windows) per gestire quelle password come @ih ha suggerito (quindi non è necessario memorizzarli nel file jsl). Non ho (ancora) utilizzato il gestore delle credenziali con JMP, ma l'ho utilizzato durante la creazione di RPA (automazione dei processi robotici) e ha funzionato bene.
Ri: Come gestire le informazioni sulla password dell'utente in JSL (stringhe di connessione ODBC)Questo è uno dei motivi per cui mi piace utilizzare l'archivio credenziali di Windows: la password semplicemente non è disponibile per altri utenti.Archiviare il codice o i file contenenti tali credenziali in un luogo accessibile solo a persone selezionate potrebbe avere un effetto simile.
Ri: Come gestire le informazioni sulla password dell'utente in JSL (stringhe di connessione ODBC)Cosa ne pensi di questo:
utilizzare i diritti Windows AD per controllare l'accesso al database:
- generare uno script per accedere al database, inclusi i diritti di accesso per il database
- crittografare il file in JMP in modo che nessun utente possa vedere la password in testo normale
- all'interno dello script, prova ad accedere a un file su una condivisione di rete con diritti di accesso AD
se a un utente è consentito accedere al file, può utilizzare l'accesso al database.
per un utente senza diritti di accesso, lo script mostrerà semplicemente il messaggio di errore
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" )
)
)