Ausblenden einer Variablen aus dem Protokoll mit Unterstrichen ... Funktioniert fastAuf dem jüngsten JMP Summit habe ich Entwickler gefragt, wie ich eine Variable verbergen könnte, die Anmeldeinformationen für eine Datenbank enthielt. Meine aktuelle Lösung ist zu 80 % geschafft. Ich lege die Anmeldeinformationen in einer Variablen in einem verschlüsselten Skript fest, füge dann dieses Skript Include() hinzu und verwende die Variable in einem Skript, das eine Verbindung zur Datenbank herstellt. Jeder, der das Hauptskript öffnet, kann die Anmeldeinformationen sehen, indem er in die Protokolldatei geht und die Variable nachschlägt. Die JSL-Entwickler waren auf dem Summit gefragt und andere Leute, mit denen ich gesprochen habe, waren sich nicht sicher, wie man eine Variable versteckt.
Dann habe ich das gesehen: Verschlüsselung und globale Variablen (jmp.com)
Wenn Sie einfach zwei Unterstriche vor eine Variable setzen, werden diese ausgeblendet ... fast. Wenn Sie Show ( __myVar), Print ( __myVar) oder Write ( __myVar) versuchen, ist das Ergebnis leer. Großartig! Aber dann habe ich festgestellt, dass das Protokoll es für Sie definiert, wenn Sie einfach __myVar direkt in das Protokoll eingeben. Das ist tatsächlich eine der einfachsten Möglichkeiten, die Variable anzuzeigen ...
Scheint eine unbeabsichtigte Lücke zu sein. Der doppelte Unterstrich stoppt alle diese Skriptmethoden und wenn Sie mit der Maus über den Variablennamen im Skript fahren, wird der Inhalt nicht angezeigt. Aber es gibt diese wirklich offensichtliche Möglichkeit, den Inhalt anzuzeigen, indem man einfach die Variable direkt eingibt.
Ich habe gute Gründe dafür, nicht das Hauptskript, sondern nur die Verbindungszeichenfolge verschlüsseln zu wollen. Ich bin mir nicht sicher, ob es sich um einen Artikel auf der Wunschliste handelt oder ob mir etwas fehlt.
Automatisierung und SkripterstellungBetreff: Ausblenden einer Variablen aus dem Protokoll mit Unterstrichen ... Funktioniert fastWenn Sie sich meinen oben erwähnten Vortrag „JMP und Oracle ...“ ansehen, ist dies meine Vorgehensweise:
- Erstellen Sie eine verschlüsselte Funktion, die die Datenbankverbindung zurückgibt.
Hier ist das Ende der Funktion:
my_dbc = create database connection(dsn_string);
// Return the connection to Oracle
my_dbc;
Betreff: Ausblenden einer Variablen aus dem Protokoll mit Unterstrichen ... Funktioniert fastAnscheinend kann man im Debugger auch alle „versteckten“ Variablen sehen.

Betreff: Ausblenden einer Variablen aus dem Protokoll mit Unterstrichen ... Funktioniert fastDanke schön! Ich denke, das bringt mich zu 99 % ans Ziel. Es löst das Variablenproblem gut. Das 1 % besteht darin, dass ich die Anmeldeinformationen sehen kann, wenn der Befehl Include() ausgeführt wird. Jeder, der sich das Skript ansieht, kann so etwas wie „Include(db_credentials)“ sehen, diese Zeile ausführen und in der Protokolldatei nachsehen.
Bei mir sieht es so aus:
Include("DSN encrypted function.jsl");
//Log file shows:
//:*/
Include("DSN encrypted function.jsl");
/*:
Function( {},
{Default Local},
dsn_string = "DSN=myDSN;UID=" || "uname" || ";PWD=" || "pwd" || ";";
my_dbc = Create Database Connection( dsn_string );
my_dbc;
)Es geht auch nicht auf den Teil meiner Frage zur Zwei-Unterstrich-Technik ein. Warum haben Sie es, wenn es Variablen nur teilweise verdeckt? Aus Sicherheitsgründen oder aus einem anderen Grund?
Betreff: Ausblenden einer Variablen aus dem Protokoll mit Unterstrichen ... Funktioniert fastTatsächlich bringt es mich zu 100 % dorthin. Mir ist aufgefallen, dass das Include nur das Letzte anzeigt, was es im Protokoll getan hat. Ich habe ein Print("This is the last thing") hinzugefügt und jetzt kann ich die Funktionsdefinition nicht sehen.
Danke!
Betreff: Ausblenden einer Variablen aus dem Protokoll mit Unterstrichen ... Funktioniert fastIch denke, Sie müssen entweder:
- Erstellen Sie eine verschlüsselte Funktion, um die Abfrage auszuführen, die die Verbindungszeichenfolge innerhalb der Funktion enthält (geben Sie diese niemals zurück).
- Erstellen Sie eine verschlüsselte Funktion, die öffnet die Datenbankverbindung (kann New SQL Query() nicht verwenden, wenn Sie dies verwenden). Dies ist die bevorzugte Methode in JMP zum Durchführen von Datenabfragen )
- Verwenden Sie so etwas wie den Windows-Anmeldeinformationsmanager
JMP-Skripte betten DSN-Parameter ein; Warum??
Umgang mit Benutzerkennwortinformationen in JSL (ODBC-Verbindungszeichenfolgen)
JMP und Oracle: Tipps und Tricks für eine glückliche Ehe (2022-US-30MP-1093)
Betreff: Ausblenden einer Variablen aus dem Protokoll mit Unterstrichen ... Funktioniert fastIch habe sensible Variablen nach ihrer Verwendung als Empty() neu definiert, sodass selbst wenn jemand die Variablennamen erhält, diese keine Informationen enthalten.
Betreff: Ausblenden einer Variable im Log mit Unterstrichen ... Funktioniert fast</CODE></PRE>
<P>Tolle Idee!<BR /> Ich habe diese Empfehlung gefunden in<BR /> <A href="https://www.jmp.com/support/help/en/19.0/?os=win&source=application#page/jmp/work-with-expressions-in-an-encrypted-script.shtml#" target="_blank" rel="noopener noreferrer">https://www.jmp.com/support/help/en/19.0/?os=win&source=application#page/jmp/work-with-expressions-in-an-encrypted-script.shtml#</A></P>
<PRE><CODE class=" language-jsl">

</CODE></PRE>
<P>Andererseits ist <A href="https://www.jmp.com/support/help/en/19.0/?os=win&source=application#page/jmp/encryption-and-global-variables.shtml" target="_blank" rel="noopener noreferrer">https://www.jmp.com/support/help/en/19.0/?os=win&source=application#page/jmp/encryption-and-global-variables.shtml</A> eher eine Warnung als eine Strategie:</P>
<P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="hogi_1-1763829135582.png" style="width: 400px;"><span class="lia-inline-image-display-wrapper" image-alt="hogi_1-1763829135582.png" style="width: 400px;"><img src="https://us.v-cdn.net/6038925/uploads/images/87531iDDA2ACB34BC016E4/hogi_1-1763829135582.png" role="button" title="hogi_1-1763829135582.png" alt="hogi_1-1763829135582.png" /></span></SPAN></P>
<PRE><CODE class=" language-jsl">
</CODE></PRE>
<BR />
<PRE><CODE class=" language-jsl"><BR /><BR />Names default to here(1);
__Hello=1;
Show(__Hello);
Show(Char(__Hello));
new namespace("__Test");
__Test:Hello=1;
Show(__Test);
Show namespaces();
Gleiches gilt für die Verschlüsselung:
//-e12.1
0,
344,4353eJwNzdmRhSAQAMB8NoWRc0AERu5DzT+Qff9d1QFHqsV6JkdVotYlkkDhRd03clZQQT4lY/V9by5qQPZ9+cMUryFddMeUzS/o
xBrLU9Be+4jFDalbz/jcKoH6mKax/aHIcsukQunhCmoHGbPI3PlbvwfT9ime6fmsTLNx7dCG3WexZhOfUzvj9U3itCUnjnbdv3yj
AaaaOb9Y+hhpa97cISVRJJVBVNCklH+vNc37BuxS3iv9QMQa4/lOEyo3hZ56pN5qBk8XfRSHcw3c5vwEgG20xmhAQ+w2zYhIk6+k
SDhYpzxVziJBoDwOpTSXHKXq2e3o1hnd+PsHyKdkiw==
,0,
Show(__Hello);
Show(Char(__Hello));
Show Namespaces()
... weiterhin mit Zugriff auf alle Definitionen.