นี้อาจไม่เป็นที่นิยมในหมู่ผู้ใช้ของคุณ แต่ผมเชื่อว่าวิธีเดียวที่คุณสามารถทราบว่าคือการบังคับให้เปลี่ยนรหัสผ่านสำหรับการเข้าสู่ระบบทุก 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;
โดยส่วนตัวฉันคิดว่านี่เป็นข้อผิดพลาด หากไวยากรณ์อนุญาตให้ฉันสร้างการเข้าสู่ระบบโดยใช้รหัสผ่านที่แฮชและฉันสามารถกำหนดให้รหัสผ่านนั้นต้องเป็นไปตามนโยบายความซับซ้อนของฉันก็ควรสร้างข้อผิดพลาดหรือคำเตือนว่านโยบายนั้นไม่ได้ตรวจสอบจริง
อัปเดต : ฉันยื่นข้อผิดพลาดกับพฤติกรรมนี้