Когда я смотрю внутрь sys.sql_logins
, я вижу столбец с именем is_policy_checked
. Могу ли я доверять тому, что моя политика паролей была проверена для всех входов в систему, где указано значение этого столбца 1
?
Когда я смотрю внутрь sys.sql_logins
, я вижу столбец с именем is_policy_checked
. Могу ли я доверять тому, что моя политика паролей была проверена для всех входов в систему, где указано значение этого столбца 1
?
Ответы:
В то время как документация в настоящее время имеет следующее неоднозначное утверждение о том, что означает этот флаг:
Политика паролей проверена.
Что это действительно означает и должно сказать, так это то, что флаг служит двум целям:
- Политика паролей могла быть проверена, но только если (а) политика паролей была включена во время последней установки пароля, и (б) пароль был задан в виде обычного текста (без хеша).
- Политика паролей будет проверена при следующей настройке политики, но только в том случае, если (а) политика паролей включена в это время и (б) пароль указан в виде обычного текста (без хеша).
(И обратите внимание, что «политика» также относится к принудительному истечению срока действия и к тому факту, что пользователь должен изменить пароль при следующем входе в систему, но, поскольку сложность обычно является целью аудита операций, я собираюсь сосредоточиться только на этом аспекте. )
is_policy_checked
Бит устанавливается , 1
если CHECK_POLICY = ON
во время CREATE LOGIN
или ALTER LOGIN
события, даже если политика не проверяются в то время. Как вы, вероятно, можете увидеть сверху, эта проверка не происходит в следующих сценариях:
HASHED
ключевого слова (очень распространенная тактика при переносе логинов между серверами или копировании логинов в журналы отправленных / зеркальных / AG вторичных серверов). Очевидно, что невозможно проверить сложность пароля, если у вас нет предварительно хешированного значения.ALTER LOGIN
без установки нового пароля и все равно изменить флаг ( спасибо @AMtwo за иллюстрацию ). Я подозреваю, что это могли сделать умные люди, пытающиеся одурачить одитора.Все эти проблемы легко продемонстрировать.
Поскольку большинство людей, с которыми я говорил об этом, всегда предполагали, что на is_policy_checked
самом деле это означает, что текущий пароль соответствует текущей политике паролей, я думаю, что важно что-то изменить здесь, чтобы пользователи имели правильные ожидания и понимали, что этот флаг не обязательно означает все хорошо. По крайней мере, документацию следует обновить, чтобы она отражала реальность, как я уже говорил выше. Но есть и другие вещи, которые можно сделать тоже.
CHECK_POLICY = ON
оно указано, но политика не может быть проверена (либо потому, что пароль указан с помощью хэша, либо потому, что политика паролей отключена, либо потому, что команда является простой попыткой обойти или установите флаг, например ALTER LOGIN blat WITH CHECK_POLICY = ON;
).CHECK_POLICY
могут быть устаревшими, в пользу ACTIVELY_CHECK_POLICY
и , возможно CHECK_POLICY_ON_NEXT_CHANGE
. Столбцы в sys.sql_logins
должны быть policy_has_been_checked
и policy_will_be_checked
. Я не женат на этих именах, но они намного точнее, чем нынешняя формулировка.ACTIVELY_CHECK_POLICY = ON
и политика не может быть проверена во время выполнения команды, я должен получить сообщение об ошибке, и флаг не должен быть установлен 1
(или даже создание логина или смена пароля не должны быть успешными).0
, такие обходы могли бы быть идентифицированы).Сегодня нет надежного способа - без изменения вручную их паролей на те, которые, как вы знаете, безопасны, - проверять свои имена входа SQL и быть уверенными в том, что все они соответствуют вашей политике сложности. В наши дни, в эпоху постоянно растущих данных, все большего числа утечек данных и очевидной необходимости все более надежной защиты систем, эта проблема требует решения. Я написал об этом в блоге и создал элемент Connect:
Я рекомендую вам проголосовать за элемент Connect и, что более важно, убедиться, что вы не проводите аудит своих систем с ложными представлениями о том, как работают этот параметр DDL и метаданные.
Пожалуйста, не отбрасывайте это как «не проблема», потому что вы совершенно уверены, как он работает, и уже знаете, что флагу нельзя доверять - вы не тот пользователь, о котором я беспокоюсь; это все остальные.