Чи означає, що sys.sql_logins.is_policy_ checked означає, що політика перевірена?


16

Коли я заглядаю sys.sql_logins, я бачу стовпчик, що називається is_policy_checked. Чи можу я довіряти, що мою політику паролів перевірено на всі входи, де знаходиться це значення стовпця 1?

Відповіді:


21

Ні.

Хоча в документації на даний момент є таке, певно неоднозначне твердження про те, що означає цей прапор:

Політика щодо паролів перевірена.

Що насправді означає, і слід сказати, це те, що прапор виконує дві цілі:

  1. Політика щодо паролів, можливо , була перевірена, але тільки якщо (a) політика паролів була ввімкнена під час останнього встановлення пароля, і (b) пароль був вказаний у простому тексті (не з хеш-пам'яттю).
  2. Політика паролів буде перевірятися в наступний раз , коли політика встановлюється, але тільки якщо (а) пароль політики включений в той час, і (б) зазначений пароль у вигляді простого тексту ( а ні з хеш).

(І зауважте, що "політика" також стосується примусового закінчення терміну дії та того, що користувач повинен змінити пароль при наступному вході, але оскільки складність, як правило, є фокусом аудиторських операцій, я збираюся зосередитись лише на цьому аспекті. )

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.

Будь ласка, не відмовляйтеся від цього як "непроблема", тому що ви абсолютно комфортні з тим, як він працює, і вже знаєте, що прапор не можна довіряти - ви не той користувач, про якого я переживаю; це всі інші.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.