Les scripts JMP intègrent des paramètres DSN ; pourquoi??<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Les scripts JMP intègrent les paramètres de connexion de données dans le fichier JSL.Y a-t-il une raison à une telle pratique de programmation inappropriée ?Imaginez que des centaines d'administrateurs JSL et SQL décident de modifier les informations d'identification du serveur ou de la base de données.Pourquoi ne pas utiliser les DSN comme intermédiaire ?
Re : Les scripts JMP intègrent des paramètres DSN ; pourquoi??J'ai essayé cette solution et j'ai obtenu 90% du résultat...
J'obtiens une connexion réussie à ma base de données, mais même si les informations DSN importées avec la fonction d'inclusion contiennent les valeurs UID et PWD, la connexion m'invite toujours à saisir le nom DSN et le mot de passe dans une fenêtre contextuelle ODBC.
Avez-vous une idée de pourquoi cela se produit ?
//Obtenir les informations d'identification DSN
::Obtenir les informations d'identification DSN = "DRIVER={Oracle dans 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;" ;
// Ne renvoie rien
;
Mon script Jmp se connecte avec succès :
Si ( est vide (::Obtenir les informations d'identification DSN),
inclure ( "C:\_JMP Scripts\JMP DSN\ Obtenir les informations d'identification DSN .jsl" );
);
CONNECTER = créer une connexion à la base de données (::Obtenir les informations d'identification DSN) ;
SQL1 = "SELECT * FROM DB.TABLE " ;
FICHIER1 = "Mon nom de fichier" ;
dt1 = Ouvrir la base de données (CONNECT, SQL1, OUTFILE1);
Mais me demande toujours mon nom de base de données et mon mot de passe...
Re : Les scripts JMP intègrent des paramètres DSN ; pourquoi??C'est mieux que ce que j'ai fait.Merci d'avoir partagé.J'ai le « luxe » de travailler avec des utilisateurs non-technophiles.
Re : Les scripts JMP intègrent des paramètres DSN ; pourquoi??Il s'agit d'une mauvaise solution de sécurité.Tout ce que j'aurais à faire pour obtenir le nom d'utilisateur et le mot de passe de votre base de données serait d'exécuter :
inclure ( "$ADDIN_HOME(com.mydept.myapp)\Obtenez DSN_CREDENTIALS.jsl" ) ;
:: mes_dsn_credentials ;
Ce qui est stocké dans ::my_dsn_credentials sera affiché dans le fichier journal en texte brut.Sans parler du stockage des informations d'identification au même endroit en tant que variables globales, je pourrais facilement exécuter ceci :
inclure ( "$ADDIN_HOME(com.mydept.myapp)\Obtenez DSN_CREDENTIALS.jsl" ) ;
afficher les globales() ;
Maintenant, j'ai toutes les informations de la base de données stockées dans Get DSN_CREDENTIALS.jsl, même les bases de données non utilisées dans le script d'origine. reçu .Cette deuxième partie peut être facilement corrigée en remplaçant tous les "::" par "__" (double trait de soulignement), ainsi ::my_dsn_credentials devient __my_dsn_credentials.Cela masquera l'affichage des variables globales dans le show globals(); fonction. Cependant, cela ne résout toujours pas le problème de compromission de la base de données spécifiée. Cela peut également être corrigé en suivant le format :
Obtenez DSN_CREDENTIALS.jsl :
// Récupère DSN_CREDENTIALS.jsl
__my_dsn_credentials = "Pilote={Oracle dans OraClient11g64_home1};Dbq=MY_DATABASE;UID=MYUSERID;PWD=MYPASSWORD;" ;
__dbc = créer une connexion à la base de données (__ mes_dsn_credentials ) ;
// Ne renvoie rien
__my_dsn_credentials = . ;
Cela résout deux problèmes.Vous pouvez transmettre __dbc à un autre script.Si l'on exécute __dbc; il transmettra 'Database( "Oracle in OraClient11g64_home1(MY_DATABASE)" )' au journal du script ci-dessus.L'affichage du pilote et de la base de données constitue bien moins une menace pour la sécurité que la transmission d'un nom d'utilisateur et d'un mot de passe.Deuxièmement, et c'est important, __my_dsn_credentials est écrasé.Cela signifie que même s’ils DEVINENT la variable, les informations sont toujours en sécurité.
Re : Les scripts JMP intègrent des paramètres DSN ; pourquoi??Cela ne semble pas figurer dans les préférences de JMP 10. C'est dans le guide de script JSL à la page 480. Vous devez le définir dans JSL.Voici la partie pertinente :
Remarque : Lorsque vous importez des données à partir d'une base de données ODBC, une variable de table est ajoutée et peut contenir l'ID utilisateur.
et les informations de mot de passe. Pour éviter que cela ne se produise, définissez la préférence JSL suivante :
préférence ( ODBC Masquer la chaîne de connexion ( 1 )) ;
Re : Les scripts JMP intègrent des paramètres DSN ; pourquoi??avant de poster ce commentaire, je n'ai trouvé aucune information sur la gestion d'ODBC.Ma version de JMP 10 n'a pas cette option.

Re : Les scripts JMP intègrent des paramètres DSN ; pourquoi??Solution intelligente ; Merci pour le partage!
Re : Les scripts JMP intègrent des paramètres DSN ; pourquoi??J'ai des centaines de scripts JSL qui appellent une base de données Oracle via ODBC.Cependant, je n'intègre pas de paramètres de connexion de données distincts dans chaque fichier JSL.Au lieu de cela, j'utilise une instruction INCLUDE pour exécuter un seul fichier JSL qui définit la chaîne DSN.
Voici à quoi ressemble mon code :
J'ai un script JSL, appelé Obtenez DSN_CREDENTIALS.jsl :
// Get DSN_CREDENTIALS.jsl
::my_dsn_credentials = "Driver={Oracle in OraClient11g64_home1};Dbq=MY_DATABASE;UID=MYUSERID;PWD=MYPASSWORD;";
// Return nothing
.;
Je chiffre le script en utilisant la capacité de chiffrement de code de JSL, d'ailleurs.
Ensuite, chaque fois que j'ai besoin de la chaîne de connexion, j'utilise un code qui ressemble à ceci :
// 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 : Les scripts JMP intègrent des paramètres DSN ; pourquoi??La majorité de nos clients trouvent cette fonctionnalité utile et, en fait, elle a été ajoutée à la demande des clients.Il est facilement supprimé en sélectionnant Préférences->Tables->ODBC Masquer la chaîne de connexion.Celui-ci pourrait être diffusé aux utilisateurs via un fichier de préférences spécifique à votre organisation.