Thỉnh thoảng tôi thấy các câu hỏi hỏi cách lưu trữ mật khẩu người dùng một cách an toàn cho một ứng dụng web (sử dụng RDBMS, tôi không nói về Facebook hay Twitter). Câu trả lời thông thường là "muối mật khẩu, sau đó băm nó bằng thuật toán mạnh như TDES hoặc SHA512".
Câu hỏi của tôi là: Là một người dùng RDBMS, tại sao tôi phải bận tâm với việc lưu trữ mật khẩu có vấn đề vì hầu hết các công cụ đều có cơ chế xác thực tích hợp.
Ví dụ: nếu một số người dùng X muốn tạo mật khẩu người dùng tài khoản Y trên ứng dụng web của tôi, làm thế nào việc đưa ra truy vấn sau đây sai:
CREATE USER X WITH ENCRYPTED PASSWORD Y IN GROUP baseuser;
Sau đó, trong ứng dụng của tôi, người dùng có thể mở kết nối tới cơ sở dữ liệu bằng thông tin đăng nhập của anh ấy và tôi không phải bận tâm đến việc quản lý mật khẩu.
Tôi thấy nhiều ưu điểm của phương pháp này:
- Nếu RDBMS quyết định rằng cần phải thay đổi thuật toán mã hóa, tôi không cần phải chạm vào bất cứ thứ gì, chỉ để áp dụng các bản cập nhật bảo mật;
- Nó dễ dàng cho tôi để quản lý các ủy quyền người dùng. Nếu người dùng được thăng chức lên vai trò của quản trị viên, tôi chỉ cần thêm người dùng vào nhóm tương ứng;
- Việc tiêm SQL bây giờ là vô nghĩa, vì tôi quản lý các quyền để cho phép chính xác những gì tôi muốn cho phép mỗi người dùng trong cơ sở dữ liệu (ví dụ: trong một diễn đàn như SO, thêm bài đăng mới, trả lời bài đăng, nhận xét và chỉnh sửa / xóa câu hỏi của chính mình / câu trả lời / ý kiến);
- Tài khoản người dùng "ẩn danh" có thể được sử dụng cho các kết nối không được xác thực đến ứng dụng của tôi;
- Mỗi người dùng là chủ sở hữu của dữ liệu anh ta cung cấp.
Nhưng trên hầu hết mọi câu hỏi tôi thấy về chủ đề này, dường như có một sự đồng thuận chung rằng đây không phải là cách mọi thứ phải được thực hiện. Câu hỏi của tôi là: tại sao?
Lưu ý: Điểm thứ ba được cho phép bởi các chính sách trong PostgreSQL và các chính sách bảo mật trong Microsoft SQL Server. Tôi nhận ra rằng các khái niệm này là người mới, nhưng dù sao, bây giờ chúng ở đây, tại sao kỹ thuật tôi mô tả không trở thành cách tiêu chuẩn để xử lý tài khoản người dùng?