Представьте типичную ситуацию: еще вчера информационная база 1С в серверном режиме работала без нареканий, регламентные задания выполнялись, пользователи проводили документы. Сегодня утром при попытке зайти в программу система выдает критическую ошибку СУБД:
Microsoft SQL Server Native Client 10.0: Ошибка входа пользователя "sa". HRESULT=80040E4D, SQLSrvr: SQLSTATE=28000, state=1, Severity=E, native=18456, line=1.
Давайте подробно проанализируем причины этой неисправности и разберем по шагам, как восстановить работоспособность системы без радикальных мер вроде полной переустановки MS SQL Server, которую часто советуют на форумах.
В тексте ошибки мы видим параметры SQLSTATE=28000 и state=1. Начинающие администраторы часто пытаются найти решение, ориентируясь именно на значение state=1. Однако здесь кроется важный нюанс безопасности.
Разработчики Microsoft SQL Server намеренно сделали так, чтобы при любых неудачных попытках авторизации внешнему клиенту (в нашем случае — серверу приложений 1С) всегда возвращалось состояние State = 1. Это сделано для защиты от злоумышленников: если бы система возвращала точную причину отказа, подобрать учетные данные методом перебора (брутфорса) было бы гораздо проще.
Чтобы выяснить истинную причину сбоя, нам необходимо заглянуть в Журнал ошибок SQL Server (SQL Server Error Log). Для этого мы можем зайти в СУБД через SQL Server Management Studio (SSMS) или открыть файлы логов в каталоге установки СУБД текстовым редактором. В логах мы встретим ту же ошибку 18456, но с реальным кодом состояния. Давайте рассмотрим основные значения кодов:
sa отклоняются на корню.Теперь, когда мы понимаем физический смысл ошибки, перейдем к методам ее устранения.
На многих форумах при утере пароля от sa рекомендуют остановить службу SQL Server, скопировать файлы баз данных (MDF и LDF), удалить СУБД, установить ее заново и прикрепить базы обратно (как это советуют в сообщениях 8 и 11 на форуме). Мы настоятельно не рекомендуем этот метод по следующим причинам:
master, в которой хранятся настройки серверов, учетные записи других пользователей, роли, разграничения прав и настройки связанных серверов (Linked Servers).Вместо этого мы воспользуемся встроенными механизмами аварийного восстановления доступа.
Если вы потеряли пароль от sa, но у вас есть доступ к операционной системе сервера с правами локального администратора Windows, вы можете сбросить пароль за несколько минут с помощью запуска СУБД в однопользовательском режиме (Single-User Mode). Давайте разберем этот процесс по шагам.
Для начала нам необходимо остановить сервер 1С:Предприятия и службу агента SQL Server. Если этого не сделать, они попытаются автоматически занять единственное доступное подключение при перезапуске СУБД, и мы не сможем подключиться.
Откройте консоль services.msc (Службы Windows) и остановите следующие службы:
1C:Enterprise 8.3 Server Agent)Теперь переведем SQL Server в режим обслуживания. Рассмотрим, как это сделать:
SQL Server (MSSQLSERVER)), нажмите правой кнопкой мыши и выберите Свойства (Properties).-m и нажмите кнопку Добавить (Add).-m"SQLCMD".Когда служба запущена с флагом -m, любой член группы локальных администраторов Windows получает права системного администратора СУБД (роль sysadmin). Выполним сброс:
sqlcmd -S ИМЯ_СЕРВЕРА\ИМЯ_ИНСТАНСА
Примечание: Если вы используете дефолтный экземпляр SQL Server, достаточно ввести просто sqlcmd.
ALTER LOGIN sa WITH PASSWORD = 'Новый_Сложный_Пароль_123';
ALTER LOGIN sa ENABLE;
GO
После ввода команды GO СУБД применит изменения. Учетная запись sa будет активирована, а ее пароль изменится на указанный вами.
Дополнительно мы можем обезопасить себя на будущее и добавить текущую учетную запись Windows администратора в список системных администраторов SQL Server. Для этого выполните команду:
ALTER SERVER ROLE sysadmin ADD MEMBER [ДОМЕН\Имя_Администратора];
GO
После успешного выполнения команд введите exit для выхода из утилиты sqlcmd.
Нам обязательно нужно отключить однопользовательский режим, иначе пользователи 1С не смогут работать одновременно. Проделаем следующие действия:
-m (или -m"SQLCMD") в списке существующих параметров и нажмите кнопку Удалить (Remove).Если после сброса пароля ошибка со статусом 18456 все еще сохраняется, велика вероятность, что на сервере отключена смешанная проверка подлинности (это соответствует State 58 в логах). Проанализируем, как ее включить:
После того как пароль учетной записи sa был изменен, нам необходимо прописать его в настройках существующих информационных баз 1С. Если этого не сделать, сервер приложений 1С продолжит пытаться авторизоваться со старыми учетными данными, вызывая блокировку и ошибки входа.
Рассмотрим, как обновить параметры подключения к базе данных:
sa.Использование встроенной учетной записи администратора СУБД sa (System Administrator) для постоянного подключения баз данных 1С является плохой практикой (Anti-Pattern) администрирования по нескольким причинам:
sa общеизвестно. Любой злоумышленник или вредоносное ПО в локальной сети начнет подбор паролей именно с этого имени.sa будет заблокирована из-за ошибок авторизации или политик безопасности, перестанут работать абсолютно все информационные базы 1С, привязанные к этому серверу СУБД.Давайте разберем, как сделать работу 1С с СУБД безопасной и изолированной. Создадим отдельного технического пользователя:
usr1cv8_db.dbcreator — позволит серверу 1С создавать новые базы данных непосредственно из консоли администрирования или при создании базы в клиенте.processadmin — позволит серверу 1С корректно управлять процессами СУБД (например, принудительно завершать "зависшие" спящие соединения).Теперь при добавлении новых баз данных 1С или при изменении параметров существующих указывайте созданного пользователя usr1cv8_db вместо sa. Саму же учетную запись sa рекомендуется отключить в целях безопасности или установить на нее максимально сложный пароль из 30+ символов и хранить его в сейфе организации для экстренных случаев.