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 可以很容易地抑制它。这可以通过特定于您的组织的首选项文件传播给用户。