Gli script JMP incorporano parametri DSN; Perché??<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Gli script JMP incorporano i parametri di connessione dati all'interno del file JSL.C'è qualche motivo per tale pratica di programmazione impropria?Immagina di avere centinaia di JSL e che l'amministratore SQL abbia deciso di modificare le credenziali del server o del database.Perché non utilizzare i DSN come intermediario?
Ri: Gli script JMP incorporano parametri DSN; Perché??Ho provato questa soluzione e ho ottenuto il 90% del risultato...
Riesco a stabilire una connessione al mio database, ma anche se le informazioni DSN importate con la funzione di inclusione hanno i valori UID e PWD, la connessione mi chiede comunque di inserire il nome DSN e la password in una finestra popup ODBC.
Qualche idea sul perché questo accada?
//Ottieni le credenziali DSN
::Ottieni credenziali DSN = "DRIVER={Oracle in 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;" ;
// Non restituisce nulla
;
Il mio script Jmp si connette correttamente:
Se ( è vuoto (::Ottieni credenziali DSN),
includere ( "C:\_Script JMP\DSN JMP\ Ottieni credenziali DSN .jsl" );
);
CONNETTI = creare una connessione al database (::Ottieni credenziali DSN);
SQL1 = "SELEZIONA * DA DB.TABELLA " ;
OUTFILE1 = "Il mio nome file" ;
dt1= Apri banca dati (CONNETTI, SQL1, FILE DI USCITA1);
Ma mi chiede ancora il nome del mio DB e la mia password...
Ri: Gli script JMP incorporano parametri DSN; Perché??È meglio di quello che ho fatto finora.Grazie per la condivisione.Ho il "lusso" di lavorare con utenti non tecnici.
Ri: Gli script JMP incorporano parametri DSN; Perché??Questa è una soluzione di sicurezza scadente.Tutto quello che dovrei fare per ottenere il nome utente e la password per il tuo database sarebbe eseguire:
includere ( "$ADDIN_HOME(com.mydept.myapp)\Get DSN_CREDENTIALS.jsl" ) ;
:: my_dsn_credentials;
Ciò che è memorizzato in ::my_dsn_credentials verrà visualizzato nel file di registro in testo semplice.Per non parlare della memorizzazione delle credenziali tutte in un unico posto come variabili globali, potrei facilmente eseguire questo:
includere ( "$ADDIN_HOME(com.mydept.myapp)\Get DSN_CREDENTIALS.jsl" ) ;
mostra globali() ;
Ora ho tutte le informazioni del database archiviate in Get DSN_CREDENTIALS.jsl, anche i database non utilizzati nello script originale I ricevuto .Questa seconda parte può essere risolta facilmente cambiando tutti i "::" in "__" (doppio carattere di sottolineatura), quindi ::my_dsn_credentials diventa __my_dsn_credentials.Ciò nasconderà la visualizzazione delle variabili globali nello show globals(); funzione. Tuttavia, ciò non risolve ancora il problema della compromissione del database specificato. Questo può anche essere risolto seguendo il formato:
Ottieni DSN_CREDENTIALS.jsl :
// Ottieni DSN_CREDENTIALS.jsl
__my_dsn_credentials = "Driver={Oracle in OraClient11g64_home1};Dbq=MY_DATABASE;UID=MYUSERID;PWD=MYPASSWORD;" ;
__dbc = creare una connessione al database (__ my_dsn_credentials ) ;
// Non restituisce nulla
__my_dsn_credentials = . ;
Questo risolve due problemi.Uno puoi passare __dbc a un altro script.Se si esegue __dbc; passerà 'Database( "Oracle in OraClient11g64_home1(MY_DATABASE)" )' al registro per lo script precedente.La visualizzazione del driver e del database rappresenta una minaccia per la sicurezza molto minore rispetto al passaggio di nome utente e password.In secondo luogo, e questo è importante, __my_dsn_credentials viene sovrascritto.Ciò significa che anche se dovessero INDOVINARE la variabile, l'informazione è comunque al sicuro.
Ri: Gli script JMP incorporano parametri DSN; Perché??Non sembra essere nelle preferenze di JMP 10. È nella guida allo scripting JSL a pagina 480. È necessario impostarlo in JSL.Ecco la parte rilevante:
Nota: quando si importano dati da un database ODBC, viene aggiunta una variabile di tabella che può contenere l'ID utente
e informazioni sulla password. Per evitare che ciò accada, imposta la seguente preferenza solo JSL:
pref ( ODBC Nascondi stringa di connessione ( 1 )) ;
Ri: Gli script JMP incorporano parametri DSN; Perché??prima di pubblicare questo commento non sono riuscito a trovare alcuna informazione sulla gestione di ODBC.La mia versione di JMP 10 non ha questa opzione.

Ri: Gli script JMP incorporano parametri DSN; Perché??Soluzione intelligente; Grazie per aver condiviso!
Ri: Gli script JMP incorporano parametri DSN; Perché??Ho centinaia di script JSL che effettuano chiamate a un database Oracle tramite ODBC.Tuttavia non incorporo parametri di connessione dati separati all'interno di ciascun file JSL.Utilizzo invece un'istruzione INCLUDE per eseguire un singolo file JSL che definisce la stringa DSN.
Ecco come appare il mio codice:
Ho uno script JSL, chiamato Ottieni DSN_CREDENTIALS.jsl :
// Get DSN_CREDENTIALS.jsl
::my_dsn_credentials = "Driver={Oracle in OraClient11g64_home1};Dbq=MY_DATABASE;UID=MYUSERID;PWD=MYPASSWORD;";
// Return nothing
.;
Crittografia lo script utilizzando la funzionalità di crittografia del codice JSL, tra l'altro.
Quindi, ogni volta che ho bisogno della stringa di connessione utilizzo un codice simile al seguente:
// 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);
Ri: Gli script JMP incorporano parametri DSN; Perché??La maggior parte dei nostri clienti trova questa funzionalità utile e infatti è stata aggiunta su richiesta dei clienti.Può essere facilmente eliminato selezionando Preferenze->Tabelle->ODBC Nascondi stringa di connessione.Questo potrebbe essere diffuso agli utenti tramite un file di preferenze specifico per la tua organizzazione.