У меня был автономный компьютер с SQL Server 2008 R2, который я присоединил к домену. Я установил MSA и настроил все службы SQL для входа под ним. Я могу получить удаленный доступ к БД и выполнять запросы, но почта базы данных не работает. Я создал пользователя в MSDB для учетной записи MSA и добавил его в роль DatabaseMailUserRole. При отправке тестового электронного письма появляется следующая ошибка:
Тип исключения: Microsoft.SqlServer.Management.SqlIMail.Server.Common.BaseException Сообщение: информация о конфигурации почты не может быть прочитана из базы данных. Данные: System.Collections.ListDictionaryInternal TargetSite: Microsoft.SqlServer.Management.SqlIMail.Server.Objects.Account GetAccount (Int32) HelpLink: NULL Источник: DatabaseMailEngine
в Microsoft.SqlServer.Management.SqlIMail.Server.DataAccess.DataAccessAdapter.GetAccount (Int32 accountID) в Microsoft.SqlServer.Management.SqlIMail.Server.Controller.CommandFactory.CreateSendMailCommand (DBSession dbSession) в Microsoft.SqlServer.Management.SqlIMail.Server.Controller.CommandFactory.CreateCommand (DBSession dbSession) в Microsoft.SqlServer.Management.SqlIMail.Server.Controller.CommandRunner.Run (DBSession db) в Microsoft.SqlServer.Management.SqlIMail.IMailProcess.ThreadCallBack.MailOperation (Object o)
Тип исключения: System.Data.SqlClient.SqlException Ошибки: System.Data.SqlClient.SqlErrorCollection Класс: 16 LineNumber: 1 Номер: 15247 Процедура: sp_PostAgentInfo Сервер: CCPC \ GRDB Состояние: 1 Источник: поставщик данных .Net SqlClient Код ошибки: -2146232060 Сообщение: у пользователя нет разрешения на выполнение этого действия. Данные: System.Collections.ListDictionaryInternal TargetSite: Void OnError (System.Data.SqlClient.SqlException, логическое значение) HelpLink: NULL
в System.Data.SqlClient.SqlConnection.OnError (исключение SqlException, логическое breakConnection) в System.Data.SqlClient.SqlInternalConnection.OnError (исключение SqlException, логическое breakConnection) в System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning (TdsParserStateObject stateObj) в System.Data.SqlClient.TdsParser.Run (RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) в System.Data.SqlClient.SqlDataReader.ConsumeMetaData () в System.Data.SqlClient.SqlDataReader.get_MetaData () в System.Data.SqlClient.SqlCommand.FinishExecuteReader (SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) в System.Data.SqlClient.SqlCommand.RunExecuteReaderTds (CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) в System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, метод String, результат DbAsyncResult) в System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior, cmdBehavior, RunBehavior, runBehavior, логический returnStream, метод String) в System.Data.SqlClient.SqlCommand.ExecuteReader (поведение CommandBehavior, метод String) в System.Data.SqlClient.SqlCommand.ExecuteReader () в Microsoft.SqlServer.Management.SqlIMail.Server.DataAccess.DataAccessAdapter.GetAccount (Int32 accountID)
Исправлено после долгого поиска и проб и ошибок.
1) Найдите каталог Binn для экземпляра и дайте пользователю MSA разрешение на выполнение.
2) exec sp_addsrvrolemember 'MSA', 'SysAdmin'
Не знаю, зачем нужен этот последний шаг и безопасен ли он, но теперь он работает.