Подключение к 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. Выполнение шага вручную
Откройте командную строку Windows PowerShell с повышенными привилегиями.
Настройте имя службы и экземпляр SQL Server, а также переменные входа Windows. Замените эти значения значения значениями, соответствующими вашей среде.
Если у вас есть экземпляр по умолчанию, используйте
MSSQLSERVER
без имени экземпляра.$service_name = "MSSQL`$instancename" $sql_server_instance = "machine_name\instance" $login_to_be_granted_access = "[CONTOSO\PatK]"
Остановите службу SQL Server, чтобы ее можно было перезапустить с помощью однопользовательского режима, выполнив следующую команду:
Если у вас есть экземпляр по умолчанию, используйте
MSSQLSERVER
без имени экземпляра.net stop $service_name
Теперь запустите экземпляр SQL Server в одном пользовательском режиме и разрешайте подключаться только SQLCMD.exe (
/mSQLCMD
):Примечание.
Обязательно используйте для
SQLCMD
верхний регистр.Если у вас есть экземпляр по умолчанию, используйте
MSSQLSERVER
без имени экземпляра.net start $service_name /f /mSQLCMD
С помощью 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.
Смешанный режим (необязательно): если экземпляр SQL Server работает в смешанном режиме проверки подлинности, можно также:
Предоставьте членство в роли 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; "
Кроме того, если экземпляр 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; "
Остановка и перезапуск экземпляра 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 в качестве члена локальной группы администраторов.
В Меню Windows щелкните правой кнопкой мыши значок диспетчер конфигурации SQL Server и выберите "Запуск от имени администратора", чтобы передать учетные данные администратора в Configuration Manager.
В диспетчере конфигурации SQL Server на панели слева выберите Службы SQL Server. На панели справа найдите экземпляр SQL Server. (Экземпляр SQL Server по умолчанию включает в себя (MSSQLSERVER) после имени компьютера. Именованные экземпляры появляются в верхнем регистре с тем же названием, что и в списке «зарегистрированные серверы»). Щелкните правой кнопкой мыши экземпляр SQL Server и выберите Свойства.
На вкладке Параметры запуска в поле Укажите параметр запуска введите
-m
и щелкните Добавить. (Это дефис, затем буква «m» в нижнем регистре.)Для некоторых более ранних версий SQL Server нет вкладки "Параметры запуска". В этом случае на вкладке "Дополнительно" дважды щелкните "Параметры запуска". Параметры откроются в маленьком окне. Не изменяйте существующие параметры. В самом конце добавьте новый параметр
;-m
и щелкните ОК. (Это точка с запятой, затем дефис, затем буква «m» в нижнем регистре.)Щелкните ОК, а после сообщения о перезагрузке щелкните правой кнопкой мыши имя сервера и выберите Перезапустить.
После перезапуска SQL Server сервер будет находиться в однопользовательском режиме. Убедитесь, что агент SQL Server не выполняется. Если он запущен, он принимает единственное подключение.
В Windows меню щелкните правой кнопкой мыши значок для Management Studio и выберите "Запуск от имени администратора". Это передает учетные данные администратора в SSMS.
В более ранних версиях Windows вариант Запуск от имени администратора появляется в виде подменю.
В некоторых конфигурациях SSMS пытается выполнить несколько подключений. Сбой нескольких подключений, так как SQL Server находится в однопользовательском режиме. Выполните одно из следующих действий, соответствующее вашему сценарию.
Подключитесь с помощью обозревателя объектов, используя проверку подлинности Windows (которая включает учетные данные администратора). Разверните Безопасность, затем Имена входаи дважды щелкните имя входа. На странице Роли сервера выберите sysadmin и щелкните ОК.
Вместо соединения с помощью обозревателя объектов подключитесь с помощью окна запросов, используя проверку подлинности Windows (которая включает учетные данные администратора). (Подключиться подобным образом можно, только если подключение не выполнено с помощью обозревателя объектов.) Выполните следующий код, чтобы добавить новое имя входа для проверки подлинности Windows, которое является членом предопределенной роли сервера sysadmin. В следующем примере создается пользователь с именем
CONTOSO\PatK
.CREATE LOGIN [CONTOSO\PatK] FROM WINDOWS; ALTER SERVER ROLE sysadmin ADD MEMBER [CONTOSO\PatK];
Если SQL Server работает в смешанном режиме проверки подлинности, подключитесь к окну запроса с помощью проверки подлинности Windows (включая учетные данные администратора). Выполните следующий код, чтобы создать новое имя входа проверки подлинности SQL Server, являющееся членом предопределенных ролей сервера sysadmin .
CREATE LOGIN TempLogin WITH PASSWORD = '<strong_password>'; ALTER SERVER ROLE sysadmin ADD MEMBER TempLogin;
Предупреждение
Замените <strong_password> строгим паролем.
Если SQL Server работает в смешанном режиме проверки подлинности и хотите сбросить пароль
sa
учетной записи, подключитесь к окну запроса с помощью проверки подлинности Windows (включая учетные данные администратора). Измените пароль учетной записи с помощью следующегоsa
синтаксиса.ALTER LOGIN sa WITH PASSWORD = '<strong_password>';
Предупреждение
Замените <strong_password> строгим паролем.
Закройте Среду Management Studio.
Следующие действия позволят переключить SQL Server в многопользовательский режим. В диспетчере конфигурации SQL Server на панели слева выберите Службы SQL Server.
В области справа щелкните экземпляр SQL Server правой кнопкой мыши и выберите Свойства.
На вкладке Параметры запуска в поле Существующие параметры выберите
-m
и щелкните Удалить.Для некоторых более ранних версий SQL Server нет вкладки "Параметры запуска". В этом случае на вкладке "Дополнительно" дважды щелкните "Параметры запуска". Параметры откроются в маленьком окне. Удалите
;-m
(добавлено выше) и щелкните ОК.Щелкните правой кнопкой мыши имя сервера и выберите Перезапустить. Не забудьте снова запустить агент SQL Server, если вы остановили его перед запуском SQL Server в однопользовательском режиме.
Теперь можно подключиться к одной из учетных записей, которая имеет фиксированную роль сервера sysadmin.