Падение сайта после добавления данных по администрируемым операциям
Добрый день! Производил привязку данных по правам на администрируемые операции. Написал скрипт по предварительному удалению записей по фильтру и привязал данные. При обновлении из свн на другом сайте, после обновления сайт перестал работать. В логах приложения ошибка. Будьте добры, подскажите как решить данную проблему.
2018-10-26 17:22:07,220 [5] ERROR IIS APPPOOL\ArdshinBank7102-3 Terrasoft.WebApp.FileWebEventProvider ProcessEvent - Date: 26.10.2018 17:22:07
Date (UTC): 26.10.2018 13:22:07
Exception Message: Вложенный запрос вернул больше одного значения. Это запрещено, когда вложенный запрос следует после =, !=, , =, >, >= или используется в качестве выражения.
Exception Type: System.Data.SqlClient.SqlException
Exception Source: .Net SqlClient Data Provider
Exception Stack Trace:
в System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
в System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
в System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
в System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
в System.Data.SqlClient.SqlDataReader.TryHasMoreRows(Boolean& moreRows)
в System.Data.SqlClient.SqlDataReader.TryReadInternal(Boolean setTimeout, Boolean& more)
в System.Data.SqlClient.SqlDataReader.Read()
в Terrasoft.Core.DB.DBSecurityEngine.GetCurrentUserAdminOperationsFromDB()
в Terrasoft.Core.DB.DBSecurityEngine.InitializeCurrentUserAdministratedOperations(String code)
в Terrasoft.Core.DB.DBSecurityEngine.GetCanExecuteOperation(String code)
в Terrasoft.Core.DB.DBSecurityEngine.GetEntitySchemaOperationsRightLevels(String schemaName)
в Terrasoft.Core.DB.DBSecurityEngine.GetEntitySchemaOperationsRightLevel(String schemaName)
в Terrasoft.Core.DB.DBSecurityEngine.GetIsEntitySchemaReadingAllowed(String schemaName)
в Terrasoft.Core.Entities.EntitySchemaQuery.CreateSelect()
в Terrasoft.Core.Entities.EntitySchemaQuery.GetSelectQuery(UserConnection userConnection)
в Terrasoft.Core.Entities.EntitySchemaQuery.GetEntityCollection(UserConnection userConnection)
в Terrasoft.Configuration.FeatureUtilities.GetFeatureState(UserConnection source, String code)
в Terrasoft.Configuration.FeatureUtilities.GetIsFeatureEnabled(UserConnection source, String code)
в Terrasoft.Configuration.ConfigurationSectionHelper.GetModuleStructure(UserConnection userConnection)
в Terrasoft.Configuration.ConfigurationSectionHelper.GetConfigurationScript(UserConnection userConnection)
в Terrasoft.Configuration.SectionHelper.GetConfigurationScript(UserConnection userConnection)
в Terrasoft.WebApp.Nui.ViewModuleHelper.CreateModulesConfigScript(UserConnection userConnection, HttpResponse response)
в Terrasoft.WebApp.Nui.ViewModule.SetupModulesConfig()
в Terrasoft.WebApp.Nui.ViewModule.Page_Load(Object sender, EventArgs e)
в System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
в System.Web.UI.Control.OnLoad(EventArgs e)
в System.Web.UI.Control.LoadRecursive()
в System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
Нравится
SELECT SysAdminOperationId, SysAdminUnitId, COUNT(*) FROM dbo.SysAdminOperationGrantee GROUP BY SysAdminOperationId, SysAdminUnitId HAVING COUNT(*) > 1 SELECT SysAdminOperationId, Position, COUNT(*) FROM dbo.SysAdminOperationGrantee GROUP BY SysAdminOperationId, Position HAVING COUNT(*) > 1
Если любой из этих запросов вернул что-то, то в этом проблема. Необходимо почистить данную таблицу дублирующих данных.
Без ошибок из лога и сообщений в консоли броузера трудно чтото сказать. Разве что посоветовать обратится в тех поддержку.
Запросите у поддержке sql скрипты для перераздачи прав на существующие обекты и выполните их для тех объектов что вы меняли! Свежий бэкап есть или вы делали на среде разработки?
Есть приложение на маркет плэйсе которое раздает права на созданные записи (актуальнот если изминили права и хотите распространить это на существующие объекты) но если входа не происходит это вам не поможет!
Где-то есть подзапрос, который выдаёт более одной строки, хотя логика внешнего SQL-запроса ожидает одну. Вызывается он в стандартной функции ядра GetCurrentUserAdminOperationsFromDB. Видимо, при работе скрипта или переносе залилось некорректное наполнение в таблицы прав.
Где именно, можно увидеть, записав в профайлере запрос, происходящий перед падением.
Я так понимаю что это из-за неправильно разданных прав происходит ошибка, в явном виде никто sql не корректировал. Так что про TOP 1 єто не в тему
SELECT SysAdminOperationId, SysAdminUnitId, COUNT(*) FROM dbo.SysAdminOperationGrantee GROUP BY SysAdminOperationId, SysAdminUnitId HAVING COUNT(*) > 1 SELECT SysAdminOperationId, Position, COUNT(*) FROM dbo.SysAdminOperationGrantee GROUP BY SysAdminOperationId, Position HAVING COUNT(*) > 1
Если любой из этих запросов вернул что-то, то в этом проблема. Необходимо почистить данную таблицу дублирующих данных.