Sql server 当用户为DBOwner时,节点JS mssql/MSSQLSNODEV8插入权限被拒绝

Sql server 当用户为DBOwner时,节点JS mssql/MSSQLSNODEV8插入权限被拒绝,sql-server,node.js,sql-server-2012,windows-server-2012-r2,node-mssql,Sql Server,Node.js,Sql Server 2012,Windows Server 2012 R2,Node Mssql,我正在运行一个非常简单的NodeJS应用程序,它可以跟踪用户在给定网站上的点击率。开发版本在写入SQL 2012 Enterprise Server时工作正常,但生产版本出现以下错误: error running query { RequestError: The INSERT permission was denied on the object 'StudentMonitor', database 'LearnOnlineStatus', schema 'dbo'. at Strea

我正在运行一个非常简单的NodeJS应用程序,它可以跟踪用户在给定网站上的点击率。开发版本在写入SQL 2012 Enterprise Server时工作正常,但生产版本出现以下错误:

error running query { RequestError: The INSERT permission was denied on the object 'StudentMonitor', database 'LearnOnlineStatus', schema 'dbo'.
    at StreamEvents.<anonymous> (C:\Node\MoodleMonitor\node_modules\mssql\lib\msnodesqlv8.js:624:21)
    at StreamEvents.g (events.js:286:16)
    at emitOne (events.js:96:13)
    at StreamEvents.emit (events.js:188:7)
    at routeStatementError (C:\Node\MoodleMonitor\node_modules\msnodesqlv8\lib\driverMgr.js:119:20)
    at onInvoke (C:\Node\MoodleMonitor\node_modules\msnodesqlv8\lib\driverMgr.js:476:17)
    at onQuery (C:\Node\MoodleMonitor\node_modules\msnodesqlv8\lib\driverMgr.js:157:17) name: 'RequestError',   message: 'The INSERT permission was denied on the object \'StudentMonitor\', database \'LearnOnlineStatus\', schema \' dbo\'.',   code: 'EREQUEST',   number: 229,   lineNumber: undefined,   state: '42000',   class: undefined,   serverName: undefined,   procName: undefined }
运行查询时出错{RequestError:对对象“StudentMonitor”、数据库“LearnOnlineStatus”、架构“dbo”的插入权限被拒绝。
在StreamEvents。(C:\Node\MoodleMonitor\Node\u modules\mssql\lib\msnodesqlv8.js:624:21)
在streamvents.g(events.js:286:16)
在emitOne(events.js:96:13)
在streamvents.emit(events.js:188:7)
在routeStatementError(C:\Node\MoodleMonitor\Node\u modules\msnodesqlv8\lib\driverMgr.js:119:20)
在onInvoke上(C:\Node\MoodleMonitor\Node\U modules\msnodesqlv8\lib\driverMgr.js:476:17)
在onQuery(C:\Node\MoodleMonitor\Node\u modules\msnodesqlv8\lib\driverMgr.js:157:17)名称:“RequestError”,消息:“在对象“StudentMonitor\”、数据库“LearnOnlineStatus\”、架构“dbo\”、代码:“EREQUEST”、编号:229、行号:未定义、状态:“42000”、类:未定义、服务器名:未定义、程序名:未定义}
它正在尝试执行以下插入代码:

mssql.getConnection(function(err, client, done) {
    for (var i = 0; i < 7; i++) {
      client.input('' + (i+1), data[i]);
    }

    client.query('INSERT INTO [dbo].[StudentMonitor] (time_created, user_id, ip, url, duration, page_title, course_id) VALUES (@1, @2, @3, @4, @5, @6, @7)', function(err, result) {
      if(err) {
        console.error('error running query', err);
      }
      // return the client to the connection pool for other requests to reuse
      done();

      return typeof callback === 'function' ? callback(err, result) : result;
    });
  });
mssql.getConnection(函数(err、client、done){
对于(变量i=0;i<7;i++){
客户输入(“”+(i+1),数据[i]);
}
client.query(@1、@2、@3、@4、@5、@6、@7)值(@1、@6、@7)和函数(err、result){
如果(错误){
console.error('运行查询时出错',err);
}
//将客户端返回到连接池以供其他请求重用
完成();
return typeof callback==“function”?回调(err,result):结果;
});
});
配置中列出的所有凭据都是正确的,我们已经消除了网络问题这一症状。通过SQL Manager尝试insert语句可以很好地处理这些凭据

让我抓狂的是select可以正常工作,我们使用的用户帐户是DBOwner,所以应该没有任何问题。在SQL中检查表不会显示任何奇怪的权限或触发器,它只是一个普通的旧表


目前在两台Windows 2012(64位)R2服务器上运行,但在这两台服务器上的行为相同。安装了SQL原生客户端11.0,我添加和删除了ODBC客户端,没有任何影响。凭证是通过mssql.conf文件设置的,该文件是正确的,并且已从控制台日志中确认。有什么想法吗?

好的,我们使用了trustedConnection:true和mssql(lib/mssql.js)的东西,所以它使用的是我的凭证,而不是提供的凭证。将此值切换为false并添加用户和密码已解决问题。

好的,在mssql(lib/mssql.js)内容中使用trustedConnection:true,因此它使用的是我的凭据,而不是提供的凭据。将此选项切换为false并添加用户和密码已解决问题