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

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

Вариант Описание Варианты использования
-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; "
    

    Если вы получаете следующую ошибку, необходимо убедиться, что к SQL Server не подключен другой sqlcmd :

    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 Server. Выполните следующий код, чтобы создать новое имя входа проверки подлинности SQL Server, являющееся членом предопределенных ролей сервера sysadmin . Замените <strong_password> надежный пароль по вашему выбору.

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

      $strong_password = "<strong_password>"
      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 с помощью следующей команды. Обязательно замените <strong_password> надежный пароль по вашему выбору:

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

      $strong_password = "<strong_password>"
      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 = '<strong_password>';
      ALTER SERVER ROLE sysadmin ADD MEMBER TempLogin;
      

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

      Замените <strong_password> строгим паролем.

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

      ALTER LOGIN sa WITH PASSWORD = '<strong_password>';
      

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

      Замените <strong_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.