ไม่ใช่คำตอบโดยตรงเกี่ยวกับการจัดเก็บรหัสผ่าน แต่โดยทั่วไปฉันใช้การเชื่อมต่อฐานข้อมูลอย่างน้อยสองครั้งเมื่อสร้าง webapps - ใช้งาน 99% ของเวลาสำหรับกิจกรรมที่เกี่ยวข้องกับผู้ใช้ด้วยสิทธิ์ที่ จำกัด และอีกอันใช้สำหรับฟังก์ชั่น 'admin' (ลบผู้ใช้ ฯลฯ )
ในบางกรณีที่ฉันกำลังติดตั้งแพคเกจของคนอื่นฉันจะติดตั้งสองอินสแตนซ์ ... อินสแตนซ์สาธารณะที่มีการเข้าถึงฐานข้อมูลเพื่อทำสิ่งที่ผู้ใช้ทั่วไปเท่านั้นและอีกอินสแตนซ์ที่สองที่ จำกัด IP เครือข่ายย่อยในพื้นที่ของฉัน (อาจเป็นได้ในเครื่องอื่น) ที่จะต้องใช้สำหรับกิจกรรมประเภท 'ผู้ดูแลระบบ' ไม่มีใครสามารถแก้ไขตาราง ฯลฯ ได้ แต่ ... ฉันต้องการเข้าใช้งานผ่านเครื่องมือฐานข้อมูลพื้นฐานมากกว่าที่จะอนุญาตให้เว็บแอปรันงานอัพเดทของตัวเองที่ไม่ได้รับการตรวจสอบ
คุณสามารถใช้งานได้มากขึ้นและเพิ่มการเชื่อมต่อเพิ่มเติมสำหรับงานที่ได้รับมอบหมาย ... ดังนั้นการสร้างผู้ใช้งาน & การจัดการรหัสผ่านต้องผ่านผู้ใช้ที่มีสิทธิ์พิเศษในตารางผู้ใช้เข้าสู่ระบบมีฐานข้อมูลส่วนตัวเพื่อรับรองความถูกต้อง ฯลฯ
ด้วยวิธีนี้หากมีการโจมตีการฉีด sql บนหน้าเว็บส่วนใหญ่มันไม่สามารถทำอะไรที่สำคัญ - ไม่เห็นแฮชรหัสผ่านไม่สามารถเพิ่มผู้ใช้ผู้ดูแลระบบใหม่ (ไม่ว่าพวกเขาจะสามารถทำได้ อะไรก็ตาม) ฯลฯ มันยังคงไม่ช่วยถ้าพวกเขาจัดการเพื่อรับเปลือกบนเครื่องของคุณ แต่มันจะช้าลง