Це може не користуватися популярністю серед ваших користувачів, але я вважаю, що єдиний спосіб, який ви можете точно знати, - це змусити змінити пароль для кожного входу в SQL CHECK_POLICY = ON
. Це створить набір ALTER LOGIN
команд із порожніми паролями, ви можете оновити запит, надаючи їм загальний пароль, або оновити кожен вручну окремими паролями - просто переконайтеся, що вони відповідають вашій політиці. Звичайно, ви повинні бути впевнені, що політика щодо паролів настільки ж складна, як ви очікували, і що вона ввімкнена (Панель управління> Адміністративні засоби> Локальна політика безпеки> Політика облікового запису> Політика паролів> Пароль повинен відповідати вимогам складності).
SELECT N'ALTER LOGIN ' + QUOTENAME(name)
+ N' WITH PASSWORD = N'''' MUST_CHANGE, CHECK_POLICY = ON;'
FROM sys.sql_logins
--WHERE is_policy_checked = 0;
Стів Джонс писав про це деякий час назад. Зауважте, що - через те, що я виявив нижче - ви не можете розраховувати на is_policy_checked = 1
те, що пароль насправді відповідає вашій поточній політиці, оскільки логін міг бути створений за допомогою хешованого пароля (у такому випадку простого текстового пароля не може бути перевірено) або тоді, коли локальна політика складності була відключена (що все ще призводить до is_policy_checked = 1
).
Ще один підхід, який я думав, що буде спрацювати, - це спробувати створити копію кожного логіна з їх поточним password_hash
та з CHECK_POLICY = ON
, і зробити помітку кожного, хто не працює. Однак це не може працювати - навіть при CHECK_POLICY = ON
цьому воно не виконує перевірку вже хешованих паролів. Я включу код для нащадків - але, за задумом, політику просто неможливо перевірити.
SELECT N'BEGIN TRY
CREATE LOGIN ' + QUOTENAME(N'copy_of_' + name)
+ N' WITH PASSWORD = '
+ CONVERT(NVARCHAR(255), password_hash, 1)
+ ' HASHED, CHECK_POLICY = ON;
DROP LOGIN ' + QUOTENAME(N'copy_of_' + name) + ';
END TRY
BEGIN CATCH
IF ERROR_NUMBER() = 15118
PRINT N''' + REPLACE(name, '''', '''''')
+ N' was not complex enough.'';
END CATCH'
FROM sys.sql_logins;
Особисто я думаю, що це помилка. Якщо синтаксис дозволяє мені створити логін, використовуючи хешований пароль, і я можу встановити, що цей пароль повинен відповідати моїй політиці складності, він повинен створювати помилку або попередження про те, що політику насправді не перевіряли.
ОНОВЛЕННЯ : Я подав помилку щодо такої поведінки.