JMP-Skripte betten DSN-Parameter ein; Warum??<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />JMP-Skripte betten Datenverbindungsparameter in die JSL-Datei ein.Gibt es einen Grund für solch eine unsachgemäße Programmierpraxis?Stellen Sie sich vor, Sie haben Hunderte von JSLs und der SQL-Administrator hat beschlossen, die Server- oder Datenbankanmeldeinformationen zu ändern.Warum nicht DSNs als Vermittler nutzen?
Betreff: JMP-Skripte betten DSN-Parameter ein; Warum??Ich habe diese Lösung ausprobiert und 90 % des Ergebnisses erzielt ...
Ich erhalte eine erfolgreiche Verbindung zu meiner Datenbank, aber obwohl die mit der Include-Funktion importierten DSN-Informationen die UID- und PWD-Werte enthalten, werde ich durch die Verbindung dennoch aufgefordert, den DSN-Namen und das Kennwort in ein ODBC-Popup-Fenster einzugeben.
Irgendwelche Ideen, warum das passiert?
//DSN-Anmeldeinformationen abrufen
::DSN-Anmeldeinformationen abrufen = "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;" ;
// Nichts zurückgeben
;
Mein Jmp-Skript stellt erfolgreich eine Verbindung her:
Wenn ( ist leer (::DSN-Anmeldeinformationen abrufen),
enthalten ( „C:\_JMP Scripts\JMP DSN\ Holen Sie sich DSN-Anmeldeinformationen .jsl" );
);
VERBINDEN = Datenbankverbindung erstellen (::DSN-Anmeldeinformationen abrufen);
SQL1 = "SELECT * FROM DB.TABLE " ;
OUTFILE1 = „MeinDateiname“ ;
dt1 = Datenbank öffnen (CONNECT, SQL1, OUTFILE1);
Fragt mich aber immer noch nach meinem DB-Namen und meinem Passwort ...
Betreff: JMP-Skripte betten DSN-Parameter ein; Warum??Das ist besser als das, was ich getan habe.Danke für das Teilen.Ich habe den „Luxus“, mit Nicht-Technikern zu arbeiten.
Betreff: JMP-Skripte betten DSN-Parameter ein; Warum??Dies ist eine schlechte Sicherheitslösung.Alles, was ich tun müsste, um den Benutzernamen und das Passwort für Ihre Datenbank zu erhalten, wäre Folgendes auszuführen:
enthalten ( „$ADDIN_HOME(com.mydept.myapp)\Get DSN_CREDENTIALS.jsl“ ) ;
:: my_dsn_credentials;
Was in ::my_dsn_credentials gespeichert ist, wird in der Protokolldatei im Klartext angezeigt.Ganz zu schweigen davon, dass ich die Anmeldeinformationen alle an einem Ort als globale Variablen speichere, könnte ich ganz einfach Folgendes ausführen:
enthalten ( „$ADDIN_HOME(com.mydept.myapp)\Get DSN_CREDENTIALS.jsl“ ) ;
Globals anzeigen() ;
Jetzt habe ich alle Datenbankinformationen in Get DSN_CREDENTIALS.jsl gespeichert, auch Datenbanken, die im ursprünglichen Skript I nicht verwendet wurden erhalten .Dieser zweite Teil kann leicht behoben werden, indem alle „::“ in „__“ (doppelter Unterstrich) geändert werden, sodass ::my_dsn_credentials zu __my_dsn_credentials wird.Dadurch werden die globalen Variablen nicht in show globals(); angezeigt. Funktion. Dies löst jedoch immer noch nicht das Problem, dass die angegebene Datenbank gefährdet ist. Dies kann auch durch folgendes Format behoben werden:
Rufen Sie DSN_CREDENTIALS.jsl ab :
// DSN_CREDENTIALS.jsl abrufen
__my_dsn_credentials = „Driver={Oracle in OraClient11g64_home1};Dbq=MY_DATABASE;UID=MYUSERID;PWD=MYPASSWORD;“ ;
__dbc = Datenbankverbindung erstellen (__ my_dsn_credentials ) ;
// Nichts zurückgeben
__my_dsn_credentials = . ;
Dadurch werden zwei Probleme behoben.Zum einen können Sie __dbc an ein anderes Skript übergeben.Wenn man __dbc; Es wird „Database( „Oracle in OraClient11g64_home1(MY_DATABASE)“ )“ an das Protokoll für das obige Skript übergeben.Die Anzeige des Treibers und der Datenbank stellt ein weitaus geringeres Sicherheitsrisiko dar als die Angabe eines Benutzernamens und eines Passworts.Zweitens, und das ist wichtig, wird __my_dsn_credentials überschrieben.Dies bedeutet, dass die Informationen auch dann sicher sind, wenn sie die Variable ERraten würden.
Betreff: JMP-Skripte betten DSN-Parameter ein; Warum??Es scheint nicht in den Einstellungen für JMP 10 enthalten zu sein. Es befindet sich im JSL-Skripthandbuch auf Seite 480. Sie müssen es in JSL festlegen.Hier ist der relevante Teil:
Hinweis: Wenn Sie Daten aus einer ODBC-Datenbank importieren, wird eine Tabellenvariable hinzugefügt, die eine Benutzer-ID enthalten kann
und Passwortinformationen. Um dies zu verhindern, legen Sie die folgende Nur-JSL-Einstellung fest:
bevorzugt ( ODBC-Verbindungszeichenfolge ausblenden ( 1 )) ;
Betreff: JMP-Skripte betten DSN-Parameter ein; Warum??Bevor ich diesen Kommentar gepostet habe, konnte ich keine Informationen zur Verwaltung von ODBC finden.Meine Version von JMP 10 verfügt nicht über diese Option.

Betreff: JMP-Skripte betten DSN-Parameter ein; Warum??Schlaue Lösung; ich danke Ihnen für das Teilen!
Betreff: JMP-Skripte betten DSN-Parameter ein; Warum??Ich habe Hunderte von JSL-Skripten, die über ODBC Aufrufe an eine Oracle-Datenbank durchführen.Allerdings bette ich nicht in jeder JSL-Datei separate Datenverbindungsparameter ein.Stattdessen verwende ich eine INCLUDE-Anweisung, um eine einzelne JSL-Datei auszuführen, die die DSN-Zeichenfolge definiert.
So sieht mein Code aus:
Ich habe ein JSL-Skript namens Rufen Sie DSN_CREDENTIALS.jsl ab :
// Get DSN_CREDENTIALS.jsl
::my_dsn_credentials = "Driver={Oracle in OraClient11g64_home1};Dbq=MY_DATABASE;UID=MYUSERID;PWD=MYPASSWORD;";
// Return nothing
.;
Ich verschlüssele das Skript übrigens mit der Codeverschlüsselungsfunktion von JSL.
Dann verwende ich jedes Mal, wenn ich die Verbindungszeichenfolge benötige, Code, der so aussieht:
// 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);
Betreff: JMP-Skripte betten DSN-Parameter ein; Warum??Die Mehrheit unserer Kunden findet dies eine nützliche Funktion, und tatsächlich wurde sie aufgrund von Kundenwünschen hinzugefügt.Es lässt sich leicht unterdrücken, indem Sie „Einstellungen“ -> „Tabellen“ -> „ODBC-Verbindungszeichenfolge ausblenden“ auswählen.Dies könnte über eine für Ihre Organisation spezifische Einstellungsdatei an Benutzer weitergegeben werden.