回复:如何處理 JSL 中的用戶密碼信息(ODBC 連接字符串)我可能喜歡將密碼和用戶 ID 放在用戶文檔文件夾中的單獨文件中。 像這樣:
憑據.jsl
{"fred","1234"}
如果你願意,你可以加密它,但這毫無意義,除了讓你的狗看不到它......
從應用程序中,使用
{username,password} = include("$documents/credentials.jsl");
... use the credentials ...
username = .; password = .; // clear the variables when done with them
include 函數返回在文件中執行的最後一條語句的結果,該語句構建了 2 元素列表。
我這樣做主要是為了確保我沒有將自己的憑據簽入源代碼控制系統。 由於該文件位於項目目錄之外,因此不會被意外拾取。 我確實對其進行了加密,希望破解我計算機的任何人都沒有 JMP。 您可能想在文件名中添加一些信息……需要它的應用程序、憑據適用的服務。
回复:如何處理 JSL 中的用戶密碼信息(ODBC 連接字符串)我認為加密文件比將此信息作為純文本更好。
完整的答案是什麼,包括一個非常簡單的加密/解密步驟?
回复:如何處理 JSL 中的用戶密碼信息(ODBC 連接字符串)參考我上面的評論:這是不安全的。 但是這裡是你如何在攻擊者的路徑上設置一個小的減速帶。
使用 encrypt() 函數加密此文件,然後運行加密文件。
// Pre-encrypt this using edit->encrypt script. There
// is no need to use a run password, and no reason to
// make a complicated edit password. "a" is good enough.
//
// Caution: this is not secure. No password is needed to
// view this data, though JMP is required to decrypt it.
// If you need a decrypt password+prompt, you'll need to
// manually go through the GUI for encrypting scripts.
// https://community.jmp.com/t5/Discussions/How-to-handle-user-password-information-in-JSL-ODBC-connection/m-p/627942#M82631
encrypt = Function( {name, pass}, {x},
x = Expr( 1 + 1 ); // throw an error if not working
// https://community.jmp.com/t5/Discussions/How-to-check-if-the-running-script-is-encrypted/m-p/624766#M82350
If( Char( Name Expr( x ) ) == "1 + 1",
Throw( "the encrypt function needs to be encrypted to work correctly." )
);
// strings generally stay unencrypted. expressions
// that are not simple strings or numbers try to stay
// encrypted. The concatenation operator is enough to
// keep the expression's strings encrypted.
Char( Eval Expr( {Expr( name ) || "", Expr( pass ) || ""} ) ); // return value
);
然後運行它看看它是如何工作的
// use the encrypted encrypt function to make an encrypted list
name = "fred";
pass = "1234";
crypt = encrypt( name, pass );
If( length(crypt) < 500 + Length( pass ) + Length( name ),
Throw( "not encrypted. Did you execute the *encrypted* file containing the encrypt function?" )
);
file = Save Text File( "$temp/credentials.jsl", crypt );
name = .;
pass = .;
///////////////////////////////////////////////////
{name, pass} = Eval List( Parse( Load Text File( file ) ) );
write("\!nsaved file contains\!n",Load Text File( file ),"\!n\!ndecrypted is");
show(name,pass);
保存的文件包含
{JSL 加密(“//-e12.1\!r\!n0,\!r\!n208,4193eJwNytmBhSAMAMB+tgWCCRBUkMuLgP0X8na+B3NI2evLjsG330/RUttTTEpOYhEyJ7JlBa2j1uAnpks3G3wTgpF7tJ8jqYrL\ !r\!nPvBetVXPxNjKIWh06B9i+P/zfrd+bo6IP7eUOA3kSsGoaGA1x0ovXovyGmy481u4wqIGYKnEhvuG6XAE4Qk19cmunKo32uGJkuTv\!r\!nB +khNtw=\!r\!n,0,"), JSL 加密("//-e12.1\!r\!n0,\!r\!n208,4193eJwNzIkBxBAQAMB+rgWE9R1hQ/z0X8jdFDAcfUTDilxLV+PeyWbK7YEYHKE3A1bfMa7gUzjO2CxkyPw sVDPxS0TN9WNptpRC\!r\ !nLxnShIpDYKmeKzWIoUTSF6XX/fjReuqKrYKwJ9yptTwR2DfaI2j/AlFVHd/bP3Mqa0cFcuV1KCuTGp9XmOmvrXe9+Dai8GNZN+Hz\!r\!nAxwZN40=\!r\!n,0,")}
解密是
名字=“弗雷德”;
通過=“1234”;
JMP 不包含以編程方式加密腳本的功能,僅包含交互式 GUI。 此解決方法不允許指定運行或編輯密碼。 沒有運行密碼(任何人都可以運行),編輯密碼未知。 您可能更喜歡不同的解決方案{“弗雷德”,“1234”}在編輯窗口中,讓用戶在保存之前手動加密(或不加密)。 然後用戶可以決定是否需要提示輸入運行密碼,這樣會更安全一些。
回复:如何處理 JSL 中的用戶密碼信息(ODBC 連接字符串)在 Windows 上,我喜歡使用憑證管理器:
在 Windows 上通過 PowerShell 在憑據管理器中設置和獲取憑據
回复:如何處理 JSL 中的用戶密碼信息(ODBC 連接字符串)我在此 Discovery Summit 演講中概述了一種使用加密憑證的方法:
https://community.jmp.com/t5/Discovery-Summit-Americas-2022/JMP-and-Oracle-Tips-and-Tricks-for-a-Happy-Marriage-2022-US-30MP/ta-p/ 505583
查找“隱藏密碼”部分。
回复:如何處理 JSL 中的用戶密碼信息(ODBC 連接字符串)接受它作為數據庫之一的是 Oracle。 感謝詳細教程。
如何在 JSL 中處理用戶密碼信息(ODBC 連接字符串)我正在使用 ODBC 連接到數據庫,該數據庫具有為此目的創建的特定用戶和密碼(無法使用 Windows Active Directory 或其他)。
構建查詢時,表腳本會存儲用戶 ID。
會詢問密碼,但也可以將其直接編碼到 JSL 中的連接字符串中。
在 JSL 中處理此類情況的最佳選擇是什麼?
JMP 文件可以共享,但首次執行更新時應要求輸入特定的用戶和密碼。
自動化和腳本編寫數據存取回复:如何在 JSL 中處理用戶密碼信息(ODBC 連接字符串)我在 2018 年的討論中發現了類似的方法:
帶有登錄提示的數據庫連接
加密連接數據庫的代碼有什麼好處?
回覆:如何在 JSL 中處理使用者密碼資訊(ODBC 連線字串)如果有可用的 JSL 代碼,可以執行該代碼來開啟資料庫連線 - 每個使用此代碼(加密或未加密)的使用者都可以存取資料庫。
所以,有必要設定一個運作密碼防止用戶未經許可使用snipet?
另一方面,使用運行密碼,自動使用程式碼會變得非常不舒服。
回覆:如何在 JSL 中處理使用者密碼資訊(ODBC 連線字串)我想說不要共享這樣的程式碼,它不應該被每個人使用(如果您不想設定運行密碼)。 建立特定使用者也可能有所幫助(至少您可以更輕鬆地更改密碼/停用該使用者)並讓 IT 人員加入,以便他們可以檢查誰正在執行哪些查詢,並採取相應的操作。
此外,您很可能會使用憑證管理員(如果在 Windows 上)來管理這些密碼,例如@ih確實建議(因此您不必將它們儲存到 jsl 檔案中)。 我(尚未)尚未將憑證管理器與 JMP 一起使用,但我在構建 RPA(機器人流程自動化)時使用過它,而且它運作得很好。
回覆:如何在 JSL 中處理使用者密碼資訊(ODBC 連線字串)這就是我喜歡使用 Windows 憑證儲存的部分原因:密碼對其他使用者不可用。將包含這些憑證的程式碼或檔案儲存在只有特定人員可以存取的位置可能會產生類似的效果。
回覆:如何在 JSL 中處理使用者密碼資訊(ODBC 連線字串)這個怎麼樣:
使用Windows AD權限控制資料庫存取:
- 產生存取資料庫的腳本 - 包括資料庫的存取權限
- 在 JMP 中加密文件,以便任何使用者都看不到純文字形式的密碼
- 在腳本內,嘗試使用 AD 存取權限存取網路共用上的文件
如果允許使用者存取該文件,他就可以使用資料庫存取。
對於沒有存取權限的用戶,腳本只會顯示錯誤訊息
queryDB = Function( {SQLString},
pwd = Load Text File( "network path with AD rights" );
If( pwd = "my secret password",
result = New SQL Query(
Connection( "ODBC:DSN=database;PWD=xxx" ),
QueryName( "new" ),
CustomSQL( SQLString )
),
Caption( "no access rights" )
)
)