Узлу JS mssql/mssqlnodev8 Разрешение INSERT отклонено, когда пользователь является DBOwner

Я использую довольно простое приложение js для узлов, которое отслеживает попадания пользователей на данный веб-сайт. Разрабатываемая версия отлично работает при записи на SQL Server Enterprise Server 2012, но в рабочей версии появляется следующая ошибка:

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 прекрасно работает с этими учетными данными.

Что меня раздражает, так это то, что select работает просто отлично, а используемая нами учетная запись пользователя - DBOwner, поэтому никаких проблем не должно быть. Проверка таблицы в SQL не показывает никаких странных разрешений или триггеров, это просто обычная старая таблица.

В настоящее время работает на двух Windows 2012 (64-разрядных) серверах R2, но поведение одинаково на обоих. SQL Native Client 11.0 установлен, и я добавил и удалил клиентов ODBC без последствий. Учетные данные устанавливаются через файл mssql.conf, который является правильным и подтвержденным из журналов консоли. Есть идеи?

1 ответ

Хорошо, использовала доверенное соединение:true с материалом mssql (lib/mssql.js), поэтому он использовал мои учетные данные, а не предоставленные. Переключение на false и добавление имени пользователя и пароля решило проблему.

Другие вопросы по тегам