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={Oracle 在 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;" ;
// 什麼都不返回
;
我的 Jmp 腳本成功連接:
如果(是空的(::獲取 DSN 憑證),
包括( "C:\_JMP 腳本\JMP DSN\獲取 DSN 憑據.jsl" );
);
連接 =創建數據庫連接(::獲取 DSN 憑證);
SQL1 = "從 DB.TABLE 中選擇 * " ;
輸出文件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 = “驅動程序={Oracle in OraClient11g64_home1};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 的代碼加密功能加密腳本,順便說一句。
然後,每次我需要連接字符串時,我都會使用如下所示的代碼:
// 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 參數;為什麼??我們的大多數客戶都認為這是一個有用的功能,實際上它是應客戶要求而添加的。通過選擇 Preferences->Tables->ODBC Hide Connection String 很容易抑制它。這可以通過特定於您的組織的首選項文件傳播給用戶。