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


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