1

我正在運行一個非常簡單的節點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文件設置的,該文件全部正確,並從控制檯日誌中進行確認。有任何想法嗎?

回答

0

好的,正在使用trustedConnection:true與mssql(lib/mssql.js)的東西,所以它使用我的憑據,而不是提供的。將其切換爲false並添加用戶和密碼已解決此問題。