Không phải là câu trả lời trực tiếp về việc lưu trữ mật khẩu, nhưng tôi thường sử dụng ít nhất hai kết nối cơ sở dữ liệu khi xây dựng ứng dụng web - một lần sử dụng 99% thời gian cho các hoạt động liên quan đến người dùng, với các đặc quyền bị hạn chế và khác được sử dụng cho chức năng 'quản trị viên' (xóa người dùng, v.v.).
Trong một số trường hợp, khi tôi cài đặt gói của người khác, tôi sẽ cài đặt hai phiên bản ... một phiên bản công khai chỉ có quyền truy cập cơ sở dữ liệu để thực hiện công cụ loại người dùng chung và phiên bản thứ hai bị hạn chế IP mạng con cục bộ của tôi (thậm chí có thể trên một máy khác) phải được sử dụng cho mọi hoạt động loại 'quản trị viên'. Không ai có quyền truy cập để sửa đổi các bảng, v.v., ... Tôi thà truy cập thông qua các công cụ cơ sở dữ liệu nguyên gốc hơn là cho phép ứng dụng web chạy các tác vụ cập nhật của riêng mình mà chưa được xem xét.
Mặc dù vậy, bạn có thể đưa nó đi xa hơn và thêm nhiều kết nối cụ thể cho các tác vụ nhất định ... để các tác vụ quản lý mật khẩu và tạo người dùng đi qua một người dùng có các đặc quyền bổ sung trên các bảng người dùng, đăng nhập có quyền riêng tư cơ sở dữ liệu để xác thực và không nhiều thứ khác v.v.
Theo cách này, nếu có một cuộc tấn công tiêm sql, trên hầu hết các trang web, nó thực sự không thể làm gì đáng kể - không thể thấy băm mật khẩu, không thể thêm người dùng quản trị mới (không phải họ có thể làm được dù thế nào đi nữa), v.v ... Sẽ không có ích gì nếu họ quản lý để lấy vỏ trên máy của bạn, nhưng nó sẽ làm chậm chúng.