目标:在VB应用程序中调用SQL Server上的DTS Package, 这个DTS Package是用服务端的ODBC连接从Informix数据库向SQL Server中导入大量数据。我试用了三种办法来执行:
1、VB调用存储过程用,xp_cmdshell 'dtsrun ...'执行DTS包,但是这需要管理员权限,但是管理员权限是不会让我们获得的。用数据库Owner身份执行,出错,报告说没有权限去执行cmdshell。2、VB客户端装SQL Server客户端组件,用其中的DTS.Package对象来Load SQL Server服务器中的Local Packages中存储的DTS Package, 但是这还需要在客户端配置ODBC去连接Informix数据库。但是,Informix数据库只对限定的极少数IP地址开放访问权限,很多客户端根本无法访问到;并且,Informix数据库的账号密码是保密的,由管理员在SQL Server上配置完毕,从安全性方面考虑,不可能每个客户端都配置ODBC。所以,这种客户端ODBC方式也是不可行的。3、SQL Server上配置Linked Server连接到Informix数据库,DTS中调用存储过程去导入数据,这种状况下,在局域网络连接有问题的时候(时常发生),存储过程发生严重错误(也就是相当于找不到来源表),此语句后续的代码无法执行。而我们需要在失败时也将此状况记录到某个表中。所以Linked Server也有问题。因为我们开发人员的SQL Server账号(数据库Owner权限,不是管理员权限)登录SQL Server企业管理器后是完全可以执行成功的,没有必要通过xp_cmdshell 'dtsrun ...'这种需要更高权限的方式去执行。所以,现在我想通过一种简单的方法,用普通用户的权限(而不是管理员权限)去执行DTS包,最好能使用存储过程去调用。请问各路高手有何解决办法?

解决方案 »

  1.   

    --把你的开发人员先定义一个角色,然后赋予该角色sysadmin的权限。--最后把你的开发人员组成员添加到该角色中去。可以解决此问题。
      

  2.   

    问题就是公司的资讯安全制度不允许我们开发人员获得或者使用sysadmin权限。
    SQL Server服务器是很多软件项目共用的,公司怕我们得到其它database里面的敏感数据。如果用sysadmin,对公司就没有安全保障了。