Коли я заглядаю sys.sql_logins
, я бачу стовпчик, що називається is_policy_checked
. Чи можу я довіряти, що мою політику паролів перевірено на всі входи, де знаходиться це значення стовпця 1
?
Коли я заглядаю sys.sql_logins
, я бачу стовпчик, що називається is_policy_checked
. Чи можу я довіряти, що мою політику паролів перевірено на всі входи, де знаходиться це значення стовпця 1
?
Відповіді:
Хоча в документації на даний момент є таке, певно неоднозначне твердження про те, що означає цей прапор:
Політика щодо паролів перевірена.
Що насправді означає, і слід сказати, це те, що прапор виконує дві цілі:
- Політика щодо паролів, можливо , була перевірена, але тільки якщо (a) політика паролів була ввімкнена під час останнього встановлення пароля, і (b) пароль був вказаний у простому тексті (не з хеш-пам'яттю).
- Політика паролів буде перевірятися в наступний раз , коли політика встановлюється, але тільки якщо (а) пароль політики включений в той час, і (б) зазначений пароль у вигляді простого тексту ( а ні з хеш).
(І зауважте, що "політика" також стосується примусового закінчення терміну дії та того, що користувач повинен змінити пароль при наступному вході, але оскільки складність, як правило, є фокусом аудиторських операцій, я збираюся зосередитись лише на цьому аспекті. )
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:
Я закликаю вас проголосувати за пункт «Підключення» і, що ще важливіше, будьте впевнені, що ви не перевіряєте свої системи з помилковими уявленнями про те, як працює цей параметр і метадані DDL.
Будь ласка, не відмовляйтеся від цього як "непроблема", тому що ви абсолютно комфортні з тим, як він працює, і вже знаєте, що прапор не можна довіряти - ви не той користувач, про якого я переживаю; це всі інші.