เมื่อฉันมองในผมเห็นคอลัมน์ที่เรียกว่าsys.sql_logins is_policy_checkedฉันสามารถเชื่อถือได้ว่านโยบายรหัสผ่านของฉันได้รับการตรวจสอบสำหรับการเข้าสู่ระบบทั้งหมดที่ค่าคอลัมน์นี้คือ1อะไร?
เมื่อฉันมองในผมเห็นคอลัมน์ที่เรียกว่าsys.sql_logins is_policy_checkedฉันสามารถเชื่อถือได้ว่านโยบายรหัสผ่านของฉันได้รับการตรวจสอบสำหรับการเข้าสู่ระบบทั้งหมดที่ค่าคอลัมน์นี้คือ1อะไร?
คำตอบ:
ในขณะที่เอกสารในปัจจุบันมีข้อความที่ไม่ชัดเจนต่อไปนี้เกี่ยวกับความหมายของการตั้งค่าสถานะนี้:
ตรวจสอบนโยบายรหัสผ่านแล้ว
ความหมายและควรพูดคือธงทำหน้าที่สองประการ:
- นโยบายรหัสผ่านอาจได้รับการตรวจสอบ แต่หาก (ก) นโยบายรหัสผ่านถูกเปิดใช้งานในเวลาที่ตั้งรหัสผ่านล่าสุดและ (b) รหัสผ่านถูกระบุเป็นข้อความธรรมดา (ไม่ใช่แฮช)
- นโยบายรหัสผ่านจะได้รับการตรวจสอบในครั้งต่อไปที่มีการตั้งค่านโยบาย แต่ถ้า (ก) นโยบายรหัสผ่านถูกเปิดใช้งานในเวลานั้นและ (b) รหัสผ่านถูกระบุเป็นข้อความธรรมดา (ไม่ใช่แฮช)
(และโปรดทราบว่า "นโยบาย" ยังหมายถึงการบังคับใช้การหมดอายุและความจริงที่ว่าผู้ใช้จะต้องเปลี่ยนรหัสผ่านในการเข้าสู่ระบบครั้งต่อไป แต่เนื่องจากความซับซ้อนมักเป็นจุดสนใจของการตรวจสอบการดำเนินงาน )
is_policy_checkedบิตถูกตั้งค่า1ถ้าCHECK_POLICY = ONในระหว่างการCREATE LOGINหรือALTER LOGINเหตุการณ์แม้ว่านโยบายไม่ได้ตรวจสอบได้ตลอดเวลา เนื่องจากคุณอาจรวบรวมจากด้านบนการตรวจสอบนี้จะไม่เกิดขึ้นในสถานการณ์เหล่านี้:
HASHEDคำหลัก (เป็นกลยุทธ์ที่พบบ่อยมากเมื่อทำการโยกย้ายการเข้าสู่ระบบระหว่างเซิร์ฟเวอร์หรือคัดลอกการเข้าสู่ระบบเพื่อจัดส่งที่สอง / มิเรอร์ / AG 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 ของคุณและมั่นใจว่าพวกเขาทุกคนปฏิบัติตามนโยบายความซับซ้อนของคุณ ในวันนี้และอายุของข้อมูลที่เพิ่มมากขึ้นการฝ่าฝืนข้อมูลมากขึ้นเรื่อย ๆ และความต้องการที่ชัดเจนในการรักษาความปลอดภัยของระบบที่เข้มงวดมากขึ้นและเข้มงวดมากขึ้นนี่เป็นปัญหาที่ต้องแก้ไข ฉันเขียนบล็อกเกี่ยวกับสิ่งนี้และสร้างรายการเชื่อมต่อเกี่ยวกับเรื่องนี้:
ฉันขอแนะนำให้คุณลงคะแนนในรายการเชื่อมต่อและที่สำคัญกว่านั้นคือให้แน่ใจว่าคุณไม่ได้ตรวจสอบระบบของคุณด้วยการรับรู้ผิด ๆ เกี่ยวกับวิธีที่ตัวเลือก DDL และข้อมูลเมตานี้ทำงาน
โปรดอย่าปัดเรื่องนี้ในฐานะ "ไม่ใช่ปัญหา" เพราะคุณพอใจกับวิธีการทำงานและรู้ว่าธงไม่น่าเชื่อถือ - คุณไม่ใช่ผู้ใช้ที่ฉันกังวล มันเป็นคนอื่น