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