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 eine solche unsachgemäße Programmierpraxis?Stellen Sie sich vor, Sie haben Hunderte von JSLs und der SQL-Administrator hat beschlossen, die Anmeldeinformationen für den Server oder die Datenbank zu ändern.Warum nicht DSNs als Vermittler verwenden?
Betreff: JMP-Skripte betten DSN-Parameter ein; warum??Ich habe diese Lösung ausprobiert und 90% des Ergebnisses erzielt ...
Ich bekomme eine erfolgreiche Verbindung zu meiner Datenbank, aber obwohl die mit der Include-Funktion importierten DSN-Informationen die UID- und PWD-Werte haben, fordert mich die Verbindung immer noch auf, den DSN-Namen und das Passwort in einem 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 erhalten),
enthalten ( "C:\_JMP Scripts\JMP DSN\ Holen Sie sich DSN-Anmeldeinformationen .jsl" );
);
VERBINDEN = Datenbankverbindung herstellen (::DSN-Anmeldeinformationen erhalten);
SQL1 = "SELECT * AUS DB.TABELLE " ;
OUTFILE1 = "MeinDateiname" ;
dt1 = Datenbank öffnen (VERBINDEN, 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-Technikfreaks 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 die Anmeldeinformationen alle an einem Ort als globale Variablen gespeichert werden, ich könnte dies einfach 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, sogar Datenbanken, die nicht im ursprünglichen Skript I verwendet wurden erhalten .Dieser zweite Teil kann leicht behoben werden, indem alle "::" in "__" (doppelter Unterstrich) geändert werden, wodurch ::my_dsn_credentials zu __my_dsn_credentials wird.Dadurch werden die globalen Variablen vor der Anzeige in show globals(); Funktion. Dies löst jedoch immer noch nicht das Problem, dass die angegebene Datenbank kompromittiert ist. Dies kann auch nach folgendem 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 herstellen (__ my_dsn_credentials ) ;
// Nichts zurückgeben
__my_dsn_credentials = . ;
Dies behebt zwei Probleme.Einmal können Sie __dbc an ein anderes Skript übergeben.Läuft man __dbc; Es wird 'Database( "Oracle in OraClient11g64_home1(MY_DATABASE)" )' an das Protokoll für das obige Skript übergeben.Das Anzeigen des Treibers und der Datenbank ist weit weniger eine Sicherheitsbedrohung als die Weitergabe eines Benutzernamens und eines Passworts.Zweitens, und das ist wichtig, wird __my_dsn_credentials überschrieben.Das heißt, selbst wenn sie die Variable RATEN würden, sind die Informationen immer noch sicher.
Betreff: JMP-Skripte betten DSN-Parameter ein; warum??Es scheint nicht in den Einstellungen für JMP 10 zu sein. Es steht im JSL-Skriptleitfaden auf Seite 480. Sie müssen es in JSL festlegen.Hier 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:
Vorzug ( ODBC-Verbindungszeichenfolge ausblenden ( 1 )) ;
Betreff: JMP-Skripte betten DSN-Parameter ein; warum??Vor dem Posten dieses Kommentars konnte ich keine Informationen zum Verwalten von ODBC finden.Meine Version von JMP 10 hat diese Option nicht.

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-Skripts, die über ODBC Aufrufe an eine Oracle-Datenbank senden.Ich bette jedoch keine separaten Datenverbindungsparameter in jede JSL-Datei 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 Code-Verschlü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 kann einfach unterdrückt werden, indem Sie Einstellungen->Tabellen->ODBC-Verbindungszeichenfolge ausblenden auswählen.Dies könnte über eine für Ihre Organisation spezifische Einstellungsdatei an die Benutzer weitergegeben werden.