我想要访问一个大Oracle数据库通过SQL服务器使用OPENROWSET在客户端Javascript,并没有多走运。这里的具体情况:

  • SQL服务器上查看访问Oracle数据库使用OPENROWSET完美的作品,所以我知道我拥有有效连串的参数。然而,新的要求是极其动态Oracle查询,取决于客户端的选择,我还没有能够获得动态(或甚至参数化的)Oracle查询工作,从SQL Server意见或储存程序。
  • 客户端的访问到SQL服务器数据库的工作完全动态和参数化的询问。
  • 我无法计数对客户有任何Oracle客户软件。因此,获得了Oracle数据库已通过SQL服务器数据库,使用的风景、存储程序,或者动态查询使用OPENROWSET.
  • 因为SQL服务器数据库是一个共享服务器,我不允许使用全球链接的数据库。

我的想法是确定一个功能,将需要我自己版本的参数化Oracle查询,使参数的置换,包询OPENROWSET,并执行它在SQL服务器,返回得到的记录集。这是样品代号:

// db is a global variable containing an ADODB.Connection opened to the SQL Server DB
// rs is a global variable containing an ADODB.Recordset
. . .
ss = "SELECT myfield FROM mytable WHERE {param0} ORDER BY myfield;";
OracleQuery(ss,["somefield='" + somevalue + "'"]);
. . .
function OracleQuery(sql,params) {
  var s = sql;
  var i;
  for (i = 0; i < params.length; i++) s = s.replace("{param" + i + "}",params[i]);
  var e = "SELECT * FROM OPENROWSET('MSDAORA','(connect-string-values)';"
    + "'user';'pass','" + s.split("'").join("''") + "') q";
  try {
    rs.Open("EXEC ('" + e.split("'").join("''") + "')",db);
  } catch (eobj) {
    alert("SQL ERROR: " + eobj.description + "\nSQL: " + e);
  }
}

SQL错误,我是 Ad hoc access to OLE DB provider 'MSDAORA' has been denied. You must access this provider through a linked server. 这使得没有感觉到我。Microsoft的解释为这个错误涉及一个注册表设置(DisallowAdhocAccess).这是设置正确,在我的电脑,但当然,这涉及数据库服务器和不客户端个人电脑,并且我希望,在设有正确的,因为查看上述工作。

一个替代的,我已经试图就是要消除封闭EXEC在公开声明:

rs.Open(e,db);

但是,这产生了同样的错误。

我也试过把OPENROWSET在一个存储的过程。这工程完全执行时从内SQL服务器的管理工作室,但没有同样的错误消息的时候所存储的过程是从Javascript。

是我想做的可能吗?如果是这样,你可以建议如何解决我的代码?或是一个完全不同的方法有必要吗?

任何的暗示或相关的信息将是受欢迎的。在此先感谢。

有帮助吗?

解决方案

我回答这个我自己。我找到了答案,我不满意的结果。该职能的有效运行,在我的个人用户标识,以及我db拥有特权。的 特设 访问的工作,我需要设置 DisallowAdhocAccess 注册处设定为"0",或得到数据库的所有者权限的用户标识使用的网络访问。因为这是一个共享服务器与严密的保安,我不会被允许改变登记册的设定,这将影响到这些多于我的数据库。我考虑的第二个选择是同样危险的。

因此,我显然坚持迫使用户有的Oracle即时客户安装,所以我可以打开ADO连接到Oracle数据库直接客户的侧Javascript。

我仍然欢迎任何可供选择的想法。

其他提示

开客户的侧ADO连接的数据库是一个巨大的安全没有-没有。你基本上使用户的连接的凭证数据库和大胆他们找到了一个洞在你的数据库的安全。即使你的观众是内部给你的公司你可能会遇到与他们的问题不具有的oracle驱动程序(或旧版本)。为什么不只是隐藏的Oracle查询后JSON电话吗?这种方式可以消毒你的数据库输入服务器上面,你的用户从来没有收到该数据库连接的全权证书的纯文本。

尝试推荐一个链接的服务器你sql server箱 http://msdn.microsoft.com/en-us/library/ms188279.aspx 用得到oracle数据

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top