밑줄을 사용하여 로그에서 변수 숨기기... 거의 작동함최근 JMP Summit에서 저는 개발자들에게 데이터베이스에 대한 자격 증명이 포함된 변수를 숨길 수 있는 방법에 대해 질문했습니다. 내 현재 솔루션은 80% 정도 진행되었습니다. 암호화된 스크립트의 변수에 자격 증명을 설정한 다음 해당 스크립트를 포함()하고 데이터베이스에 연결하는 스크립트에서 변수를 사용합니다. 기본 스크립트를 여는 사람은 누구나 로그 파일로 이동하여 변수를 조회하여 자격 증명을 볼 수 있습니다. JSL 개발자들은 Summit에서 수요가 많았고 나와 대화한 다른 사람들은 변수를 숨기는 방법을 잘 몰랐습니다.
그러다가 나는 이것을 보았다: 암호화 및 전역 변수(jmp.com)
변수 앞에 밑줄 두 개를 넣으면 변수가 거의 숨겨집니다. 표시( __myVar), 인쇄( __myVar) 또는 쓰기( __myVar)를 시도하면 결과가 공백이 됩니다. 엄청난! 하지만 로그에 __myVar을 직접 입력하면 로그가 이를 정의한다는 사실을 발견했습니다. 이는 실제로 변수를 표시하는 가장 쉬운 방법 중 하나입니다.
의도하지 않은 허점인 것 같습니다. 이중 밑줄은 모든 스크립트 메소드를 중지하며 스크립트에서 변수 이름 위로 마우스를 가져가면 내용이 표시되지 않습니다. 하지만 변수를 직접 입력하여 내용을 표시하는 정말 확실한 방법이 있습니다.
기본 스크립트를 암호화하지 않고 연결 문자열만 암호화하고 싶은 데에는 그럴 만한 이유가 있습니다. 이것이 위시리스트 항목인지, 아니면 뭔가 빠졌는지 확실하지 않습니다.
자동화 및 스크립팅Re: 밑줄을 사용하여 로그에서 변수 숨기기... 거의 작동함위에서 언급한 "JMP 및 Oracle ..." 강연을 보시면 제가 하는 일은 다음과 같습니다.
- 데이터베이스 연결을 반환하는 암호화된 함수를 만듭니다.
함수의 끝 부분은 다음과 같습니다.
my_dbc = create database connection(dsn_string);
// Return the connection to Oracle
my_dbc;
Re: 밑줄을 사용하여 로그에서 변수 숨기기... 거의 작동함분명히 디버거에서 모든 "숨겨진" 변수를 볼 수도 있습니다.

Re: 밑줄을 사용하여 로그에서 변수 숨기기... 거의 작동함감사합니다! 나는 이것이 나에게 99%의 길을 가져다 준다고 생각한다. 변수 문제를 훌륭하게 해결합니다. 1%는 include() 명령이 실행될 때 자격 증명을 볼 수 있다는 것입니다. 스크립트를 보는 사람은 누구든지 include(db_credentials)와 같은 항목을 볼 수 있고, 해당 라인을 실행하고, 로그 파일을 볼 수 있습니다.
나에게는 다음과 같습니다.
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;
)또한 두 개의 밑줄 기술에 관한 내 질문 부분을 다루지 않습니다. 변수를 부분적으로만 모호하게 만드는 이유는 무엇입니까? 보안을 위한 것인지 아니면 다른 목적을 위한 것인지?
Re: 밑줄을 사용하여 로그에서 변수 숨기기... 거의 작동함사실, 100% 목적지에 도달하게 됩니다. 포함은 로그에서 마지막으로 수행한 작업만 표시한다는 생각이 들었습니다. Print("This is the last thing")를 추가했는데 이제 함수 정의를 볼 수 없습니다.
감사해요!
Re: 밑줄을 사용하여 로그에서 변수 숨기기... 거의 작동함내 생각에는 다음 중 하나를 수행해야 합니다.
- 함수 내부에 연결 문자열이 포함된 쿼리를 수행하는 암호화된 함수를 만듭니다(절대 반환하지 않음).
- 암호화된 함수를 생성합니다. 열립니다 데이터베이스 연결(이를 사용하는 경우 New SQL Query()를 사용할 수 없습니다) 이는 JMP에서 데이터 쿼리를 수행하는 데 선호되는 방법입니다. )
- Windows 자격 증명 관리자와 같은 것을 사용하십시오.
JMP 스크립트에는 DSN 매개변수가 포함되어 있습니다. 왜??
JSL(ODBC 연결 문자열)에서 사용자 비밀번호 정보를 처리하는 방법
JMP와 Oracle: 행복한 결혼을 위한 팁과 요령(2022-US-30MP-1093)
Re: 밑줄을 사용하여 로그에서 변수 숨기기... 거의 작동함민감한 변수를 사용한 후에는 빈()으로 재정의했기 때문에 누군가 변수 이름을 얻더라도 아무런 정보도 포함되지 않습니다.
Re: 밑줄로 로그에서 변수 숨기기... 거의 작동합니다</CODE></PRE>
<P>좋은 생각이네요!<BR /> 나는 이 추천을 다음에서 찾았습니다.<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/ko/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>반면에 <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> 은 전략이라기보다는 경고에 가깝습니다.</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();
암호화도 마찬가지입니다.
//-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()
...아직도 모든 정의에 접근할 수 있습니다.