Поделиться через


Подключение к 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.