特定のWebサイトでユーザーのヒットを追跡する非常に単純なノードjsアプリを実行しています。開発バージョンは 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 }
次の INSERT コードを実行しようとしています:
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 Manager 経由で挿入ステートメントを試すと、これらの資格情報で問題なく動作します。
私を悩ませているのは、選択が問題なく機能し、使用しているユーザー アカウントが DBOwner であるため、まったく問題がないことです。SQL でテーブルをチェックすると、奇妙なパーミッションやトリガーがないことがわかります。これは、通常の古いテーブルです。
現在、2 つの Windows 2012 (64 ビット) R2 サーバーで実行されていますが、動作は両方で同じです。SQL Native Client 11.0 がインストールされ、ODBC クライアントを追加および削除しましたが、影響はありませんでした。資格情報は、すべて正しく、コンソール ログから確認された mssql.conf ファイルを介して設定されます。何か案は?