回复:如何处理 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" )
)
)