Подключение к SQL Server в случае, если доступ системных администраторов заблокирован

Применимо к:SQL Server

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

  • по ошибке удалены все члены предопределенной роли сервера sysadmin;

  • по ошибке удалены все группы Windows, которые являлись членами предопределенной роли сервера sysadmin;

  • имена входа, являющиеся членами предопределенной роли сервера sysadmin, принадлежат лицам, которые покинули компанию или недоступны;

  • Учетная sa запись отключена или никто не знает пароль.

Решение

Чтобы устранить проблему с доступом, рекомендуется запустить экземпляр SQL Server в однопользовательском режиме. Этот режим не позволит устанавливать другие подключений при попытке восстановить доступ. Вы можете подключиться к экземпляру SQL Server и добавить имя входа в роль сервера sysadmin. Подробные инструкции по решению этой проблемы приведены в этом разделе.

Экземпляр SQL Server можно запустить в однопользовательском режиме с -m помощью командной строки или -f параметров. Затем любой член локальной группы администраторов компьютера может подключиться к экземпляру SQL Server в качестве члена предопределенных ролей сервера sysadmin .

При запуске экземпляра в однопользовательском режиме остановите службу агента SQL Server. В противном случае агент SQL Server может сначала подключиться, принимая только доступное подключение к серверу и блокируя вход.

Кроме того, неизвестное клиентское приложение может воспользоваться единственным доступным подключением, прежде чем вы сможете выполнить вход. Чтобы исключить возникновение этой ситуации, используйте параметр -m, за которым следует имя приложения, что позволит ограничить подключения одним подключением из определенного приложения. Например, запуск SQL Server с -mSQLCMD ограничениями подключений к одному соединению, которое идентифицирует себя как клиентская программа sqlcmd . Чтобы подключиться через редактор запросов в Management Studio, используйте -m"Microsoft SQL Server Management Studio - Query".

Внимание

Не используйте -m с именем приложения в качестве средства безопасности. Клиентские приложения предоставляют имя приложения в параметрах строки подключения и могут легко указать ложное имя.

В следующей таблице приведены различные способы запуска экземпляра в однопользовательском режиме в командной строке.

Вариант Description Варианты использования
-m Ограничение подключений одним подключением Если другие пользователи не пытаются подключиться к экземпляру или вы не знаете имя приложения, которое используется для подключения к экземпляру.
-mSQLCMD Разрешает только одно соединение, которое должно идентифицироваться как клиентская программа sqlcmd. Если вы планируете подключиться к экземпляру с помощью sqlcmd и хотите запретить другим приложениям использовать единственное доступное подключение.
-m"Microsoft SQL Server Management Studio - Query" Разрешает только одно соединение, которое должно идентифицироваться как приложение Microsoft SQL Server приложении Management Studio — Query. Если вы планируете подключиться к экземпляру через редактор запросов в Management Studio, и вы хотите запретить другим приложениям принимать единственное доступное подключение.
-f Разрешает только одно соединение и запускает экземпляр в минимальной конфигурации. Когда запуску препятствует какая-либо другая конфигурация.

Пошаговые инструкции

Пошаговые инструкции по запуску SQL Server в однопользовательском режиме см. в статье "Запуск SQL Server в режиме однопользовательского пользователя".

С помощью PowerShell

Вариант 1. Выполнение шагов непосредственно в исполняемой записной книжке с помощью Azure Data Studio

Заметка

Прежде чем пытаться открыть эту записную книжку, убедитесь, что на локальном компьютере установлен экземпляр Azure Data Studio. Сведения об установке Azure Data Studio см. в статье о том, как установить Azure Data Studio.

Вариант 2. Выполнение шага вручную

  1. Открытие команды Windows PowerShell от имени администратора

  2. Настройте имя службы и экземпляр SQL Server, а также переменные входа Windows. Замените их значениями в соответствии с используемой средой.

    Если у вас есть экземпляр по умолчанию, используйте MSSQLSERVER без имени экземпляра.

    $service_name = "MSSQL`$instancename"
    $sql_server_instance = "machine_name\instance"
    $login_to_be_granted_access = "[CONTOSO\PatK]"
    
  3. Прервите работу службы SQL Server, чтобы ее можно было перезапустить в однопользовательском режиме, с помощью следующей команды:

    Если у вас есть экземпляр по умолчанию, используйте MSSQLSERVER без имени экземпляра.

    net stop $service_name
    
  4. Теперь запустите экземпляр SQL Server в однопользовательском режиме и разрешите только подключение SQLCMD.exe (/mSQLCMD).

    Заметка

    Обязательно используйте для SQLCMD верхний регистр.

    Если у вас есть экземпляр по умолчанию, используйте MSSQLSERVER без имени экземпляра.

    net start $service_name /f /mSQLCMD
    
  5. С помощью sqlcmd выполните команду CREATE LOGIN и затем команду ALTER SERVER ROLE. В этом шаге предполагается, что вы вошли в Windows с учетной записью, которая является членом локальной группы администраторов. При этом предполагается, что имена доменов и имен входа заменены на учетные данные, которые необходимо предоставить системным администраторам (роль sysadmin).

    Если у вас есть экземпляр по умолчанию, используйте имя сервера.

    sqlcmd.exe -E -S $sql_server_instance -Q "CREATE LOGIN $login_to_be_granted_access FROM WINDOWS; ALTER SERVER ROLE sysadmin ADD MEMBER $login_to_be_granted_access; "
    

    Заметка

    При возникновении следующей ошибки необходимо убедиться, что другие программы SQLCMD не подключены к SQL Server:
    Sqlcmd: Error: Microsoft ODBC Driver X for SQL Server : Login failed for user 'CONTOSO\BobD'. Reason: Server is in single user mode. Only one administrator can connect at this time..

  6. Смешанный режим (необязательно): если SQL Server работает в режиме смешанной аутентификации, можно также сделать следующее:

    1. Предоставьте членам роли sysadmin имя входа SQL. Выполните следующий код, чтобы создать новое имя входа проверки подлинности SQL Server, являющееся членом предопределенных ролей сервера sysadmin . Замените ?j8:z$G=JE9 надежный пароль по вашему выбору.

      Если у вас есть экземпляр по умолчанию, используйте имя сервера.

      $strong_password = "j8:zG=J?E9"
      sqlcmd.exe -E -S $sql_server_instance -Q "CREATE LOGIN TempLogin WITH PASSWORD = '$strong_password'; ALTER SERVER ROLE sysadmin ADD MEMBER TempLogin; "
      
    2. Кроме того, если SQL Server работает в режиме смешанной аутентификации и необходимо сбросить пароль включенной учетной записи sa: Измените пароль учетной записи sa с помощью следующей команды. Обязательно замените j8:zG=J?E9 надежный пароль по вашему выбору:

      Если у вас есть экземпляр по умолчанию, используйте имя сервера.

      $strong_password = "j8:zG=J?E9"
      sqlcmd.exe -E -S $sql_server_instance -Q "ALTER LOGIN sa WITH PASSWORD = $strong_password; "
      
  7. Остановка и перезапуск экземпляра SQL Server в многопользовательском режиме

    Если у вас есть экземпляр по умолчанию, используйте MSSQLSERVER без имени экземпляра.

    net stop $service_name
    net start $service_name
    

Использование диспетчера конфигурации SQL Server и Management Studio (SSMS)

Предварительные требования:

  • Экземпляр SQL Server выполняется в Windows 8 или более поздней версии. Небольшие изменения для предыдущих версий SQL Server или Windows приведены там, где применимо.

  • СРЕДА SQL Server Management Studio установлена на компьютере.

Следуйте этим инструкциям, выполнив вход в систему Windows в качестве члена локальной группы администраторов.

  1. В меню "Пуск Windows" щелкните правой кнопкой мыши значок диспетчера конфигурации SQL Server и выберите "Запуск от имени администратора", чтобы передать учетные данные администратора в Configuration Manager.

  2. В диспетчере конфигурации SQL Server на панели слева выберите Службы SQL Server. На панели справа найдите экземпляр SQL Server. (Экземпляр SQL Server по умолчанию включает в себя (MSSQLSERVER) после имени компьютера. Именованные экземпляры появляются в верхнем регистре с тем же названием, что и в списке «зарегистрированные серверы»). Щелкните правой кнопкой мыши экземпляр SQL Server и выберите Свойства.

  3. На вкладке Параметры запуска в поле Укажите параметр запуска введите -m и щелкните Добавить. (Это дефис, затем буква «m» в нижнем регистре.)

    Для некоторых более ранних версий SQL Server нет вкладки "Параметры запуска". В этом случае на вкладке "Дополнительно" дважды щелкните "Параметры запуска". Параметры откроются в маленьком окне. Не изменяйте существующие параметры. В самом конце добавьте новый параметр ;-m и щелкните ОК. (Это точка с запятой, затем дефис, затем буква «m» в нижнем регистре.)

  4. Щелкните ОК, а после сообщения о перезагрузке щелкните правой кнопкой мыши имя сервера и выберите Перезапустить.

  5. После перезапуска SQL Server сервер будет находиться в однопользовательском режиме. Убедитесь, что агент SQL Server не выполняется. Если он был запущен, то он займет ваше единственное соединение.

  6. В меню "Пуск Windows" щелкните правой кнопкой мыши значок для Management Studio и выберите "Запуск от имени администратора". Это передает учетные данные администратора в SSMS.

    В более ранних версиях Windows вариант Запуск от имени администратора появляется в виде подменю.

    В некоторых конфигурациях SSMS пытается выполнить несколько подключений. Несколько подключений завершаются ошибкой, так как SQL Server находится в однопользовательском режиме. Выполните одно из следующих действий, соответствующее вашему сценарию.

    1. Подключитесь с помощью обозревателя объектов, используя проверку подлинности Windows (которая включает учетные данные администратора). Разверните Безопасность, затем Имена входаи дважды щелкните имя входа. На странице Роли сервера выберите sysadmin и щелкните ОК.

    2. Вместо соединения с помощью обозревателя объектов подключитесь с помощью окна запросов, используя проверку подлинности Windows (которая включает учетные данные администратора). (Подключиться подобным образом можно, только если подключение не выполнено с помощью обозревателя объектов.) Выполните следующий код, чтобы добавить новое имя входа для проверки подлинности Windows, которое является членом предопределенной роли сервера sysadmin. В следующем примере создается пользователь с именем CONTOSO\PatK.

      CREATE LOGIN [CONTOSO\PatK] FROM WINDOWS;
      ALTER SERVER ROLE sysadmin ADD MEMBER [CONTOSO\PatK];
      
    3. Если SQL Server работает в смешанном режиме проверки подлинности, подключитесь к окну запроса с помощью проверки подлинности Windows (включая учетные данные администратора). Выполните следующий код, чтобы создать новое имя входа проверки подлинности SQL Server, являющееся членом предопределенных ролей сервера sysadmin .

      CREATE LOGIN TempLogin WITH PASSWORD = '************';
      ALTER SERVER ROLE sysadmin ADD MEMBER TempLogin;
      

      Предупреждение

      Замените ************ надежным паролем.

    4. Если SQL Server работает в смешанном режиме проверки подлинности и хотите сбросить пароль учетной записи sa , подключитесь к окну запроса с помощью проверки подлинности Windows (включая учетные данные администратора). Измените пароль учетной записи sa с помощью следующей команды.

      ALTER LOGIN sa WITH PASSWORD = '************';
      

      Предупреждение

      Замените ************ надежным паролем.

  7. Закройте Среду Management Studio.

  8. Следующие действия позволят переключить SQL Server в многопользовательский режим. В диспетчере конфигурации SQL Server на панели слева выберите Службы SQL Server.

  9. В области справа щелкните экземпляр SQL Server правой кнопкой мыши и выберите Свойства.

  10. На вкладке Параметры запуска в поле Существующие параметры выберите -m и щелкните Удалить.

    Для некоторых более ранних версий SQL Server нет вкладки "Параметры запуска". В этом случае на вкладке "Дополнительно" дважды щелкните "Параметры запуска". Параметры откроются в маленьком окне. Удалите ;-m (добавлено выше) и щелкните ОК.

  11. Щелкните правой кнопкой мыши имя сервера и выберите Перезапустить. Не забудьте снова запустить агент SQL Server, если вы остановили его перед запуском SQL Server в однопользовательском режиме.

Теперь можно подключиться к одной из учетных записей, которая имеет фиксированную роль сервера sysadmin.

См. также