Сброс пароля sa и администратора MS SQL Server, на котором работают базы 1С

· 10 мин

Содержание

Пароль администратора SQL сервера для 1С меняют или удаляют в SQL Server Management Studio: Безопасность → Имена входа → sa → Свойства, либо одной командой ALTER LOGIN sa WITH PASSWORD = '...'. Если войти на сервер не может никто, SQL Server запускают в однопользовательском режиме с параметром -m: в нём локальный администратор Windows получает права sysadmin и задаёт новый пароль.

Какой способ выбрать, зависит от того, что у вас осталось. Есть вход под учётной записью Windows с правами sysadmin — хватит SSMS или sqlcmd за две минуты. Нет никакого входа, но есть права администратора на самом сервере — нужен однопользовательский режим с короткой остановкой службы. После любого способа не забудьте поправить пароль в свойствах информационных баз кластера 1С, иначе пользователи получат ошибку СУБД при входе.

СитуацияСпособОстановка службы SQL
Есть вход Windows с правами sysadminSSMS или T-SQLНе нужна
Помните старый пароль saALTER LOGIN ... OLD_PASSWORD или SSMSНе нужна
Нет ни одного администратора SQLОднопользовательский режим -mНужна, дважды
Включён только вход WindowsСмена режима + перезапуск службыНужна, один раз

Сначала проверьте режим аутентификации SQL Server

У SQL Server два режима входа. Режим «Проверка подлинности Windows» пускает только учётные записи Windows, логин sa в нём не работает вовсе. Режим «SQL Server и Windows» (смешанный) пускает и логины SQL, включая sa.

Если сервер стоит в режиме только Windows, менять пароль sa бессмысленно: 1С всё равно не сможет под ним подключиться. Поэтому начните с проверки.

Как узнать режим в Management Studio

  1. Подключитесь к серверу в SSMS.
  2. Щёлкните правой кнопкой по имени сервера в обозревателе объектов и выберите Свойства.
  3. Откройте страницу Безопасность.
  4. В блоке «Проверка подлинности сервера» отмечен один из двух вариантов.

Смена режима вступает в силу только после перезапуска службы SQL Server. В английской версии SSMS страница называется Security, а режимы — Windows Authentication mode и SQL Server and Windows Authentication mode.

Как узнать режим запросом

SELECT SERVERPROPERTY('IsIntegratedSecurityOnly') AS WindowsOnly;
-- 1 = только вход Windows, 0 = смешанный режим

Этот же запрос пригодится, когда SSMS не установлена и вы работаете через sqlcmd.

Как проверить режим без входа в SQL

Режим хранится в реестре, в параметре LoginMode. Значение 1 — только Windows, 2 — смешанный. Путь зависит от версии и имени экземпляра:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQLServer

Здесь MSSQL16 — SQL Server 2022, MSSQL15 — 2019, MSSQL14 — 2017, MSSQL13 — 2016. MSSQLSERVER — имя экземпляра по умолчанию; у именованного экземпляра на его месте будет своё имя.

Правка LoginMode в реестре — крайняя мера, когда войти в SQL нельзя совсем. Значение подхватывается только после перезапуска службы, а перезапуск оборвёт все сеансы 1С на этом сервере.

Как сменить или удалить пароль sa в Management Studio

Нужен вход под учётной записью с ролью sysadmin. Обычно это администратор, который ставил SQL Server: при установке его добавляют в администраторы экземпляра.

  1. В обозревателе объектов раскройте Безопасность → Имена входа.
  2. Дважды щёлкните по sa.
  3. На странице Общие введите новый пароль и подтверждение.
  4. Если нужен пароль попроще, снимите флажок «Требовать использование политики паролей». Вместе с ним снимется и «Задать срок окончания действия пароля».
  5. Перейдите на страницу Состояние. Проверьте, что «Разрешение на подключение к ядру СУБД» — Предоставить, а «Имя входа» — Включено.
  6. Нажмите ОК.

Последний пункт часто упускают. После установки SQL Server в режиме только Windows логин sa отключён. Пароль ему можно задать, но войти под ним не получится, пока не включите сам логин.

Можно ли оставить sa без пароля

Технически да: пустой пароль SQL Server принимает, если для логина выключена проверка политики паролей. Но sa с пустым паролем — открытая дверь ко всем базам 1С на сервере. Любой, кто дотянется до порта 1433, получит полный доступ к данным бухгалтерии и зарплаты.

Если цель «удалить пароль» — избавиться от его ввода в 1С, правильнее перевести кластер на вход Windows. Об этом ниже, в разделе про настройку кластера.

Сброс пароля SQL сервера командами T-SQL и sqlcmd

Командная строка удобна, когда SSMS нет на сервере или нужно сделать всё на нескольких экземплярах одинаково.

Сброс из окна запроса

ALTER LOGIN sa WITH PASSWORD = 'Новый_Сложный_Пароль_2x';
ALTER LOGIN sa ENABLE;

Если пароль не проходит политику Windows, SQL Server выдаст ошибку 15118. Тогда либо придумайте пароль сложнее, либо отключите проверку для этого логина:

ALTER LOGIN sa WITH PASSWORD = 'ПростойПароль', CHECK_POLICY = OFF;

Пустой пароль задаётся так же, через PASSWORD = '' и CHECK_POLICY = OFF. Повторю: для сервера, доступного по сети, это плохая идея.

Если логин заблокирован после серии неверных попыток, к команде добавляют UNLOCK:

ALTER LOGIN sa WITH PASSWORD = 'Новый_Сложный_Пароль_2x' UNLOCK;

То же через sqlcmd

sqlcmd ставится вместе с SQL Server. Запустите командную строку от имени администратора:

sqlcmd -S . -E -Q "ALTER LOGIN sa WITH PASSWORD = 'Новый_Сложный_Пароль_2x'; ALTER LOGIN sa ENABLE;"
  • -S . — локальный экземпляр по умолчанию. Для именованного пишите -S .\ИМЯ, для удалённого — -S имя_сервера.
  • -E — вход под текущей учётной записью Windows.
  • -Q — выполнить запрос и выйти.

Кириллица в пароле, набранном в консоли, может прийти на сервер в другой кодировке. Для пароля sa берите латиницу, цифры и знаки: так он одинаково сработает в sqlcmd, SSMS и консоли кластера 1С.

Если доступа нет ни у кого: однопользовательский режим

Типичная история: SQL Server ставил подрядчик, sa отключён или пароль утерян, а учётной записи Windows с правами sysadmin не осталось. Выход есть, если у вас есть права локального администратора на этом сервере.

В однопользовательском режиме SQL Server пускает члена группы локальных администраторов с правами sysadmin. Этим и пользуются.

Перед началом предупредите пользователей: служба SQL Server будет остановлена дважды, все сеансы 1С на сервере оборвутся. Делайте это вне рабочего времени. Заодно остановите службу «Агент сервера 1С:Предприятия 8.3»: её рабочие процессы сразу займут единственное подключение, и вы не попадёте внутрь.

Пошагово

  1. Откройте командную строку от имени администратора.
  2. Остановите службу SQL Server:
net stop MSSQLSERVER
  1. Запустите её в однопользовательском режиме, разрешив вход только программе sqlcmd:
net start MSSQLSERVER /m"SQLCMD"
  1. Подключитесь с входом Windows:
sqlcmd -S . -E
  1. Выполните нужные команды. Удобнее всего добавить свою учётную запись Windows в sysadmin и заодно сбросить sa:
CREATE LOGIN [DOMAIN\ivanov] FROM WINDOWS;
GO
ALTER SERVER ROLE sysadmin ADD MEMBER [DOMAIN\ivanov];
GO
ALTER LOGIN sa WITH PASSWORD = 'Новый_Сложный_Пароль_2x';
GO
ALTER LOGIN sa ENABLE;
GO
EXIT
  1. Перезапустите службу в обычном режиме:
net stop MSSQLSERVER
net start MSSQLSERVER
  1. Запустите агент сервера 1С и проверьте вход в базу.

Для именованного экземпляра служба называется MSSQL$ИМЯ, например net start MSSQL$SQL2019 /m"SQLCMD", а подключение — sqlcmd -S .\SQL2019 -E.

Вариант через диспетчер конфигурации

Если удобнее мышкой, параметр -m добавляют в «Диспетчере конфигурации SQL Server». Откройте свойства службы SQL Server, вкладка «Параметры запуска», добавьте -m и перезапустите службу. Минус способа: легко забыть убрать параметр, и сервер останется однопользовательским после следующей перезагрузки.

Что ещё может помешать

  • 🔒 Ошибка «вход в однопользовательском режиме уже выполнен» — подключение занял кто-то другой: агент 1С, служба резервного копирования, SSMS на соседнем ПК. Остановите лишние службы и запустите SQL Server заново.
  • 🧩 Нет прав на запуск служб — вы не администратор сервера. Здесь нужен тот, у кого эти права есть.
  • 🖥️ Сервер в смешанном режиме не был, а задача — вход по sa. Переключите LoginMode на 2 до обычного перезапуска из шага 6 или командой ниже, пока вы внутри:
EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE',
  N'Software\Microsoft\MSSQLServer\MSSQLServer', N'LoginMode', REG_DWORD, 2;

Что поменять в кластере серверов 1С после сброса пароля

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

Обновить пароль в консоли администрирования

  1. Откройте «Администрирование серверов 1С Предприятия».
  2. Раскройте Кластеры → ваш кластер → Информационные базы.
  3. Правой кнопкой по базе → Свойства. Консоль спросит логин и пароль администратора этой информационной базы 1С.
  4. Замените «Пароль пользователя сервера БД» и, если нужно, самого пользователя.
  5. Нажмите ОК и повторите для каждой базы, которая работала под этим логином.

Из командной строки то же самое делает rac infobase update с параметрами --db-user и --db-pwd. Полный список параметров для вашей версии платформы покажет rac infobase help.

Как избавиться от пароля SQL в 1С совсем

Если оставить поле пользователя сервера БД пустым, 1С подключится к MS SQL с проверкой подлинности Windows. Входить будет учётная запись, под которой работает служба агента сервера 1С, обычно USR1CV8 или доменная служебная запись.

Порядок такой:

  1. В SQL Server создайте имя входа для учётной записи службы 1С: CREATE LOGIN [DOMAIN\usr1cv8] FROM WINDOWS;.
  2. Дайте ей права: роль dbcreator, если 1С должна создавать новые базы, и db_owner в каждой существующей базе.
  3. В свойствах информационных баз кластера очистите поля пользователя и пароля сервера БД.
  4. Проверьте вход в каждую базу.

Это и есть безопасное «удаление пароля»: пароля нигде нет, а SQL Server пускает только конкретную служебную учётную запись.

Не путайте с паролем администратора кластера

В консоли 1С есть свои администраторы: администратор центрального сервера и администратор кластера. Это учётные записи 1С, к SQL Server они не относятся, и запросы выше их не сбросят.

Если утерян пароль администратора кластера, не пересоздавайте кластер: вместе с ним пропадут регистрации всех баз. Остановите службу агента 1С в нерабочее время и восстановите файлы настроек кластера из резервной копии каталога srvinfo или обратитесь к тому, кто настраивал сервер.

Как держать доступ под контролем

  • 👤 Заведите для 1С отдельный логин вместо sa. Тогда смена пароля sa не затронет базы.
  • 🔑 Пароль sa храните в менеджере паролей отдела, а не в заметке на рабочем столе.
  • 🛡️ Добавьте в sysadmin минимум две учётные записи Windows. Тогда однопользовательский режим не понадобится, если одна из них станет недоступна.
  • 🌐 Закройте порт 1433 на внешнем файрволе: к SQL должны ходить только сервер 1С и администраторы.

Ошибки входа после смены пароля

Большинство проблем выдаёт ошибка 18456 «Login failed for user». Сама по себе она мало что говорит, причину раскрывает код состояния State в журнале ошибок SQL Server. Журнал открывается в SSMS: Управление → Журналы SQL Server.

Диагностика: выберите симптом

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

Частые вопросы

Можно ли посмотреть текущий пароль sa?
Нет. SQL Server хранит только хеш пароля, восстановить исходный текст из него нельзя. Пароль можно только задать заново.
Сломается ли 1С, если переименовать или отключить sa?
Сломается, если базы в кластере подключаются под sa. Сначала переведите их на отдельный логин или вход Windows, потом отключайте sa.
Нужно ли перезапускать SQL Server после смены пароля sa?
Нет. Новый пароль действует сразу. Перезапуск нужен только при смене режима аутентификации и при работе в однопользовательском режиме.
Где 1С хранит пароль от SQL Server?
В параметрах информационной базы в кластере серверов 1С. В файлах на компьютерах пользователей его нет.
Подойдёт ли этот порядок для PostgreSQL?
Нет. У PostgreSQL свой механизм: пароль пользователя postgres меняют командой ALTER USER, а вход без пароля настраивают в файле pg_hba.conf.