JMP腳本嵌入DSN參數;為什麼??<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />JMP 腳本將資料連線參數嵌入 JSL 檔案內。這種不正確的程式設計實踐有什麼原因嗎?想像一下,您有數百個 JSL,而 SQL 管理員決定更改伺服器或資料庫憑證。為什麼不使用 DSN 作為中介?
回覆:JMP 腳本嵌入 DSN 參數;為什麼??我嘗試了這個解決方案,得到了 90% 的結果...
我成功連接到資料庫,但即使使用 include 函數匯入的 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= “從資料庫表中選擇* 」 ;
輸出文件1 = “我的檔案名稱” ;
dt1 =開放資料庫(連接、SQL1、OUTFILE1);
但仍然要求我提供我的資料庫名稱和密碼...
回覆: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 參數;為什麼??我有數百個 JSL 腳本,它們透過 ODBC 呼叫 Oracle 資料庫。不過,我沒有在每個 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 的程式碼加密功能對腳本進行加密。
然後,每次我需要連接字串時,我都會使用如下所示的程式碼:
// 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 隱藏連接字串”可以輕鬆抑制它。這可以透過特定於您的組織的首選項檔案傳播給使用者。