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 隐藏连接字符串”可以轻松抑制它。这可以通过特定于您的组织的首选项文件传播给用户。