JMP 스크립트에는 DSN 매개변수가 포함되어 있습니다. 왜??<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />JMP 스크립트는 JSL 파일 내에 데이터 연결 매개변수를 포함합니다.그러한 부적절한 프로그래밍 관행에 대한 이유가 있습니까?수백 개의 JSL이 있고 SQL 관리자가 서버 또는 데이터베이스 자격 증명을 변경하기로 결정했다고 가정해 보세요.DSN을 중개자로 사용하지 않는 이유는 무엇입니까?
답변: JMP 스크립트에는 DSN 매개변수가 포함되어 있습니다. 왜??이 솔루션을 시도했고 결과의 90%를 얻었습니다.
데이터베이스에 성공적으로 연결되었지만 포함 기능을 사용하여 가져온 DSN 정보에 UID 및 PWD 값이 있어도 연결 시 ODBC 팝업 창에 DSN 이름과 비밀번호를 입력하라는 메시지가 계속 표시됩니다.
왜 이런 일이 발생하는지에 대한 아이디어가 있습니까?
//DSN 자격 증명 가져오기
::DSN 자격 증명 받기 = "DRIVER={OraClient11g_home1의 Oracle};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;" ;
// 아무것도 반환하지 않음
;
내 Jmp 스크립트가 성공적으로 연결되었습니다.
만약에 ( 비었다 (::DSN 자격 증명 가져오기),
포함하다 ( "C:\_JMP 스크립트\JMP DSN\ DSN 자격 증명 받기 .jsl" );
);
연결 = 데이터베이스 연결 생성 (::DSN 자격 증명 받기);
SQL1 = "SELECT * FROM DB.TABLE " ;
아웃파일1 = "내 파일 이름" ;
dt1 = 데이터베이스 열기 (CONNECT, SQL1, OUTFILE1);
그런데 아직도 DB 이름과 비밀번호를 물어보네요...
답변: JMP 스크립트에는 DSN 매개변수가 포함되어 있습니다. 왜??내가 해왔던 것보다 그게 더 나아요.공유해 주셔서 감사합니다.저는 기술 지식이 없는 사용자와 함께 작업할 수 있는 "럭셔리"를 누리고 있습니다.
답변: JMP 스크립트에는 DSN 매개변수가 포함되어 있습니다. 왜??이것은 열악한 보안 솔루션입니다.데이터베이스에 대한 사용자 이름과 비밀번호를 얻으려면 다음을 실행해야 합니다.
포함하다 ( "$ADDIN_HOME(com.mydept.myapp)\DSN_CREDENTIALS.jsl 가져오기" ) ;
:: my_dsn_credentials;
::my_dsn_credentials에 저장된 내용은 로그 파일에 일반 텍스트로 표시됩니다.자격 증명을 모두 한 곳에 전역 변수로 저장하는 것은 말할 것도 없고 다음과 같이 쉽게 실행할 수 있습니다.
포함하다 ( "$ADDIN_HOME(com.mydept.myapp)\DSN_CREDENTIALS.jsl 가져오기" ) ;
전역 표시() ;
이제 Get DSN_CREDENTIALS.jsl에 모든 데이터베이스 정보가 저장되어 있습니다. 원본 스크립트에서 사용되지 않은 데이터베이스도 포함되어 있습니다. 받았다 .이 두 번째 부분은 모든 "::"를 "__"(이중 밑줄)로 변경하여 쉽게 수정할 수 있습니다. 따라서 ::my_dsn_credentials는 __my_dsn_credentials가 됩니다.이렇게 하면 전역 변수가 show globals()에 표시되지 않도록 숨겨집니다. 기능. 그러나 이 방법으로도 지정된 데이터베이스가 손상되는 문제는 해결되지 않습니다. 이 문제는 다음 형식으로 수정할 수도 있습니다.
DSN_CREDENTIALS.jsl 가져오기 :
// DSN_CREDENTIALS.jsl 가져오기
__my_dsn_credentials = "드라이버={OraClient11g64_home1의 Oracle};Dbq=MY_DATABASE;UID=MYUSERID;PWD=MYPASSWORD;" ;
__dbc = 데이터베이스 연결 생성 (__ my_dsn_credentials ) ;
// 아무것도 반환하지 않음
__my_dsn_credentials = . ;
이로써 두 가지 문제가 해결되었습니다.하나는 __dbc를 다른 스크립트에 전달할 수 있습니다.__dbc를 실행하면; 위 스크립트의 로그에 'Database("Oracle in OraClient11g64_home1(MY_DATABASE)" )'를 전달합니다.드라이버와 데이터베이스를 표시하는 것은 사용자 이름과 비밀번호를 전달하는 것보다 보안 위협이 훨씬 적습니다.둘째, 이것이 중요합니다. __my_dsn_credentials가 덮어쓰기됩니다.이는 변수를 추측하더라도 정보는 여전히 안전하다는 것을 의미합니다.
답변: JMP 스크립트에는 DSN 매개변수가 포함되어 있습니다. 왜??JMP 10의 기본 설정에는 없는 것 같습니다. 480페이지의 JSL 스크립팅 가이드에 나와 있습니다. JSL에서 설정해야 합니다.관련 부분은 다음과 같습니다.
참고: ODBC 데이터베이스에서 데이터를 가져오면 사용자 ID를 포함할 수 있는 테이블 변수가 추가됩니다.
및 비밀번호 정보. 이러한 일이 발생하지 않도록 하려면 다음 JSL 전용 환경 설정을 설정하십시오.
준비 ( ODBC 연결 문자열 숨기기 ( 1 )) ;
답변: JMP 스크립트에는 DSN 매개변수가 포함되어 있습니다. 왜??이 댓글을 게시하기 전에는 ODBC 관리에 대한 정보를 찾을 수 없었습니다.내 JMP 10 버전에는 이 옵션이 없습니다.

답변: JMP 스크립트에는 DSN 매개변수가 포함되어 있습니다. 왜??스마트 솔루션; 공유해 주셔서 감사합니다!
답변: JMP 스크립트에는 DSN 매개변수가 포함되어 있습니다. 왜??ODBC를 통해 Oracle 데이터베이스를 호출하는 수백 개의 JSL 스크립트가 있습니다.그러나 각 JSL 파일 내에 별도의 데이터 연결 매개변수를 포함하지 않습니다.대신 INCLUDE 문을 사용하여 DSN 문자열을 정의하는 단일 JSL 파일을 실행합니다.
내 코드는 다음과 같습니다.
나는 하나의 JSL 스크립트를 가지고 있습니다. DSN_CREDENTIALS.jsl 가져오기 :
// Get DSN_CREDENTIALS.jsl
::my_dsn_credentials = "Driver={Oracle in OraClient11g64_home1};Dbq=MY_DATABASE;UID=MYUSERID;PWD=MYPASSWORD;";
// Return nothing
.;
JSL의 코드 암호화 기능인 btw를 사용하여 스크립트를 암호화합니다.
그런 다음 연결 문자열이 필요할 때마다 다음과 같은 코드를 사용합니다.
// 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);
답변: JMP 스크립트에는 DSN 매개변수가 포함되어 있습니다. 왜??대부분의 고객은 이 기능이 유용하다고 생각하며 실제로 고객 요청으로 인해 추가되었습니다.이는 기본 설정->테이블->ODBC 연결 문자열 숨기기를 선택하여 쉽게 억제할 수 있습니다.이는 조직에 특정한 기본 설정 파일을 통해 사용자에게 배포될 수 있습니다.