Как исправить ошибку входа пользователя "sa" в MS SQL Server при работе с 1С:Предприятие

Системный администратор IT и автоматизация бизнеса
← На главную

Представьте типичную ситуацию: еще вчера информационная база 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, которую часто советуют на форумах.

Анатомия ошибки: почему СУБД возвращает "State = 1"

В тексте ошибки мы видим параметры SQLSTATE=28000 и state=1. Начинающие администраторы часто пытаются найти решение, ориентируясь именно на значение state=1. Однако здесь кроется важный нюанс безопасности.

Разработчики Microsoft SQL Server намеренно сделали так, чтобы при любых неудачных попытках авторизации внешнему клиенту (в нашем случае — серверу приложений 1С) всегда возвращалось состояние State = 1. Это сделано для защиты от злоумышленников: если бы система возвращала точную причину отказа, подобрать учетные данные методом перебора (брутфорса) было бы гораздо проще.

Чтобы выяснить истинную причину сбоя, нам необходимо заглянуть в Журнал ошибок SQL Server (SQL Server Error Log). Для этого мы можем зайти в СУБД через SQL Server Management Studio (SSMS) или открыть файлы логов в каталоге установки СУБД текстовым редактором. В логах мы встретим ту же ошибку 18456, но с реальным кодом состояния. Давайте рассмотрим основные значения кодов:

Теперь, когда мы понимаем физический смысл ошибки, перейдем к методам ее устранения.

Почему не стоит переустанавливать SQL Server

На многих форумах при утере пароля от sa рекомендуют остановить службу SQL Server, скопировать файлы баз данных (MDF и LDF), удалить СУБД, установить ее заново и прикрепить базы обратно (как это советуют в сообщениях 8 и 11 на форуме). Мы настоятельно не рекомендуем этот метод по следующим причинам:

  1. Это приводит к колоссальным временным затратам и простою бизнеса.
  2. Вы полностью теряете системную базу данных master, в которой хранятся настройки серверов, учетные записи других пользователей, роли, разграничения прав и настройки связанных серверов (Linked Servers).
  3. Сбрасываются все регламентные задания SQL Server Agent, которые вы могли настраивать месяцами (бэкапы, обслуживание индексов, обновление статистики).

Вместо этого мы воспользуемся встроенными механизмами аварийного восстановления доступа.

Пошаговое руководство по сбросу пароля "sa" через однопользовательский режим

Если вы потеряли пароль от sa, но у вас есть доступ к операционной системе сервера с правами локального администратора Windows, вы можете сбросить пароль за несколько минут с помощью запуска СУБД в однопользовательском режиме (Single-User Mode). Давайте разберем этот процесс по шагам.

Шаг 1. Остановка зависимых служб

Для начала нам необходимо остановить сервер 1С:Предприятия и службу агента SQL Server. Если этого не сделать, они попытаются автоматически занять единственное доступное подключение при перезапуске СУБД, и мы не сможем подключиться.

Откройте консоль services.msc (Службы Windows) и остановите следующие службы:

Шаг 2. Запуск СУБД в однопользовательском режиме

Теперь переведем SQL Server в режим обслуживания. Рассмотрим, как это сделать:

  1. Откройте Диспетчер конфигурации SQL Server (SQL Server Configuration Manager).
  2. Перейдите в раздел Службы SQL Server (SQL Server Services).
  3. Найдите службу вашего экземпляра (например, SQL Server (MSSQLSERVER)), нажмите правой кнопкой мыши и выберите Свойства (Properties).
  4. Перейдите на вкладку Параметры запуска (Startup Parameters).
  5. В поле ввода добавьте параметр -m и нажмите кнопку Добавить (Add).
  6. Для дополнительной безопасности, чтобы никакая сторонняя программа не перехватила подключение, лучше ограничить авторизацию только одной утилитой. Пропишите параметр в формате: -m"SQLCMD".
  7. Нажмите Применить (Apply) и ОК.
  8. Перезапустите службу SQL Server.

Шаг 3. Подключение и сброс пароля через утилиту sqlcmd

Когда служба запущена с флагом -m, любой член группы локальных администраторов Windows получает права системного администратора СУБД (роль sysadmin). Выполним сброс:

  1. Запустите командную строку Windows от имени администратора.
  2. Введите команду для подключения к СУБД:

    sqlcmd -S ИМЯ_СЕРВЕРА\ИМЯ_ИНСТАНСА

    Примечание: Если вы используете дефолтный экземпляр SQL Server, достаточно ввести просто sqlcmd.

  3. В открывшейся консоли ввода выполните следующий пакет SQL-команд (после каждой строки нажимайте Enter):

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.

Шаг 4. Возврат к штатному режиму работы

Нам обязательно нужно отключить однопользовательский режим, иначе пользователи 1С не смогут работать одновременно. Проделаем следующие действия:

  1. Снова откройте свойства службы SQL Server в Configuration Manager.
  2. Перейдите на вкладку Параметры запуска (Startup Parameters).
  3. Выберите параметр -m (или -m"SQLCMD") в списке существующих параметров и нажмите кнопку Удалить (Remove).
  4. Сохраните изменения, нажав Применить (Apply).
  5. Перезапустите службу SQL Server.
  6. Запустите службу Агента сервера 1С:Предприятия и службу SQL Server Agent.

Проверка режима смешанной аутентификации (Mixed Mode)

Если после сброса пароля ошибка со статусом 18456 все еще сохраняется, велика вероятность, что на сервере отключена смешанная проверка подлинности (это соответствует State 58 в логах). Проанализируем, как ее включить:

  1. Запустите SQL Server Management Studio (SSMS) и выполните вход под учетной записью Windows (поскольку мы добавили ее в администраторы на предыдущем шаге).
  2. В обозревателе объектов нажмите правой кнопкой мыши на имя вашего SQL-сервера и выберите пункт Свойства (Properties).
  3. В открывшемся окне перейдите в раздел Безопасность (Security).
  4. Найдите блок Проверка подлинности сервера (Server authentication).
  5. Убедитесь, что переключатель установлен в положение Проверка подлинности SQL Server и Windows (SQL Server and Windows Authentication mode).
  6. Если был выбран только режим Windows, переключите его на смешанный режим, нажмите ОК.
  7. Для вступления изменений в силу обязательно перезапустите службу SQL Server через консоль служб или SSMS.

Обновление настроек подключения в кластере 1С

После того как пароль учетной записи sa был изменен, нам необходимо прописать его в настройках существующих информационных баз 1С. Если этого не сделать, сервер приложений 1С продолжит пытаться авторизоваться со старыми учетными данными, вызывая блокировку и ошибки входа.

Рассмотрим, как обновить параметры подключения к базе данных:

  1. Откройте утилиту Администрирование серверов 1С:Предприятия.
  2. Подключитесь к вашему кластеру, перейдите в ветку Информационные базы.
  3. Найдите базу, которая выдавала ошибку, нажмите на нее правой кнопкой мыши и откройте Свойства (Properties).
  4. В окне параметров найдите раздел настроек СУБД.
  5. В поле Пароль пользователя СУБД введите новый установленный пароль для учетной записи sa.
  6. Нажмите ОК для сохранения настроек.

Рекомендация по безопасности: уход от использования учетной записи "sa"

Использование встроенной учетной записи администратора СУБД sa (System Administrator) для постоянного подключения баз данных 1С является плохой практикой (Anti-Pattern) администрирования по нескольким причинам:

Давайте разберем, как сделать работу 1С с СУБД безопасной и изолированной. Создадим отдельного технического пользователя:

  1. Зайдите в SSMS под учетной записью администратора.
  2. Разверните ветку Безопасность (Security) -> Имена входа (Logins).
  3. Нажмите правой кнопкой мыши на Имена входа и выберите Создать имя входа (New Login...).
  4. Укажите понятное имя, например, usr1cv8_db.
  5. Выберите тип аутентификации Проверка подлинности SQL Server (SQL Server authentication) и задайте надежный пароль.
  6. Снимите флажок Требовать смену пароля при следующем входе (чтобы учетные данные не "протухли" в самый неподходящий момент).
  7. Перейдите на вкладку Роли сервера (Server Roles) и отметьте галочками следующие роли:
    • dbcreator — позволит серверу 1С создавать новые базы данных непосредственно из консоли администрирования или при создании базы в клиенте.
    • processadmin — позволит серверу 1С корректно управлять процессами СУБД (например, принудительно завершать "зависшие" спящие соединения).
  8. Нажмите ОК для создания пользователя.

Теперь при добавлении новых баз данных 1С или при изменении параметров существующих указывайте созданного пользователя usr1cv8_db вместо sa. Саму же учетную запись sa рекомендуется отключить в целях безопасности или установить на нее максимально сложный пароль из 30+ символов и хранить его в сейфе организации для экстренных случаев.

← На главную