我正在運行一個非常簡單的節點js應用程序,用於跟蹤給定網站上的用戶點擊次數。開發版工作就好寫的SQL 2012企業服務器,但量產版收到以下錯誤:節點JS mssql/mssqlnodev8當用戶是DBOwner時INSERT權限被拒絕
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 }
它試圖執行以下插入代碼:
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;
});
});
所有憑證列在配置中是正確的,我們已經消除了網絡問題作爲症狀。通過SQL管理器嘗試插入語句適用於這些憑據。
是什麼驅使我batty是一個選擇工作得很好,我們使用的用戶帳戶是DBOwner,所以應該沒有任何問題。在SQL中檢查表格顯示沒有怪異的權限或觸發器,它只是一個普通的舊錶。
當前在兩臺Windows 2012(64位)R2服務器上運行,但兩者的行爲相同。安裝SQL Native Client 11.0後,我添加並刪除了ODBC客戶端,沒有任何影響。憑證是通過一個mssql.conf文件設置的,該文件全部正確,並從控制檯日誌中進行確認。有任何想法嗎?