Как разблокировать логин SQL Server с помощью T-SQL (без смены пароля)?
Пересказ статьи Kenneth Fisher. How do I unlock a SQL Server Login using T-SQL (without changing the password)?
Недавно логин приложения (авторизация SQL Server) в одной из наших учебных сред начал постоянно блокироваться. Я не буду вдаваться в причины, скажу лишь, что мы решили эту проблему. Это была серьезная проблема, которая довольно быстро перешла в нашу цепочку управления. Нам требовалось решить её как можно быстрее. Поэтому требовалось решение не только на длительную перспективу, но также краткосрочное решение. Последнее решение включает создание скрипта, который разблокирует логин (если он заблокирован), и включение его в задание, которое выполняется каждые 5 минут.
Замечание. Это не то, что вам следует делать на производственном сервере, поскольку создает большую дыру в безопасности!
Не используйте это на рабочем сервере. Тем не менее, части этого скрипта весьма полезны, поэтому после долгих раздумий я решил этим поделиться. В конце концов, тут нет секрета. Скрипт нормальный, он просто помещается в регулярное задание, которое становится проблемой.
Первая часть скрипта - LOGINPROPERTY - проверяет флаг islocked, чтобы узнать заблокирован ли логин. Функции свойств очень полезны в подобных скриптах, поэтому полезно о них напомнить. Зачем проверять? Я не хочу вносить никаких изменений логина, если это не требуется. Кроме того, изменение флажка CHECK_POLICY на off (выключено) сбрасывает (помимо прочего) историю пароля. Это не большая проблема в данном случае, но желательно об этом напомнить.
Затем вы используете ALTER LOGIN, чтобы выключить, а затем опять включить флажок check_policy. Этим вы разблокируете логин. Следует указать, что это же можно сделать с помощью графического интерфейса. Следует снять флажок CHECK POLICY, сохранить, снова вернуться в окно свойств, и повторно установить флажок.
Если вы хотите разблокировать логин и согласны сменить одновременно пароль, просто можете выполнить это:
Но каждый раз вам понадобится новый пароль.
Не используйте это на рабочем сервере. Тем не менее, части этого скрипта весьма полезны, поэтому после долгих раздумий я решил этим поделиться. В конце концов, тут нет секрета. Скрипт нормальный, он просто помещается в регулярное задание, которое становится проблемой.
IF LOGINPROPERTY('SQLID','islocked') = 1
BEGIN
ALTER LOGIN SQLID WITH CHECK_POLICY=OFF;
ALTER LOGIN SQLID WITH CHECK_POLICY=ON;
END
Первая часть скрипта - LOGINPROPERTY - проверяет флаг islocked, чтобы узнать заблокирован ли логин. Функции свойств очень полезны в подобных скриптах, поэтому полезно о них напомнить. Зачем проверять? Я не хочу вносить никаких изменений логина, если это не требуется. Кроме того, изменение флажка CHECK_POLICY на off (выключено) сбрасывает (помимо прочего) историю пароля. Это не большая проблема в данном случае, но желательно об этом напомнить.
Затем вы используете ALTER LOGIN, чтобы выключить, а затем опять включить флажок check_policy. Этим вы разблокируете логин. Следует указать, что это же можно сделать с помощью графического интерфейса. Следует снять флажок CHECK POLICY, сохранить, снова вернуться в окно свойств, и повторно установить флажок.
Если вы хотите разблокировать логин и согласны сменить одновременно пароль, просто можете выполнить это:
ALTER LOGIN [SQLID] WITH PASSWORD = '****' UNLOCK ;
Но каждый раз вам понадобится новый пароль.
Обратные ссылки
Автор не разрешил комментировать эту запись
Комментарии
Показывать комментарии Как список | Древовидной структурой