Tất cả những gì tôi đã thấy về các cuộc tấn công SQL SQL dường như gợi ý rằng các truy vấn được tham số hóa, đặc biệt là các truy vấn được lưu trữ, là cách duy nhất để bảo vệ chống lại các cuộc tấn công đó. Trong khi tôi đang làm việc (trở lại thời kỳ đen tối), các thủ tục lưu trữ được xem là thực hành kém, chủ yếu là vì chúng được xem là ít bảo trì hơn; ít kiểm tra hơn; kết hợp cao; và khóa một hệ thống vào một nhà cung cấp; ( câu hỏi này bao gồm một số lý do khác).
Mặc dù khi tôi đang làm việc, các dự án hầu như không biết về khả năng của các cuộc tấn công như vậy; các quy tắc khác nhau đã được thông qua để bảo mật cơ sở dữ liệu chống lại tham nhũng thuộc nhiều loại khác nhau. Các quy tắc này có thể được tóm tắt là:
- Không có ứng dụng khách / ứng dụng nào có quyền truy cập trực tiếp vào các bảng cơ sở dữ liệu.
- Tất cả các truy cập vào tất cả các bảng đều thông qua các khung nhìn (và tất cả các cập nhật cho các bảng cơ sở được thực hiện thông qua các kích hoạt).
- Tất cả các mục dữ liệu có một miền được chỉ định.
- Không có mục dữ liệu nào được phép là không thể thực hiện được - điều này có ý nghĩa khiến các DBA nghiến răng đôi khi; nhưng đã được thi hành
- Vai trò và quyền được thiết lập phù hợp - ví dụ: vai trò bị hạn chế chỉ cung cấp cho các chế độ xem quyền thay đổi dữ liệu.
Vì vậy, một tập hợp các quy tắc (được thi hành) như thế này (mặc dù không nhất thiết phải là tập hợp cụ thể này) có phải là sự thay thế phù hợp cho các truy vấn được tham số hóa trong việc ngăn chặn các cuộc tấn công SQL SQL không? Nếu không, tai sao không? Cơ sở dữ liệu có thể được bảo mật chống lại các cuộc tấn công như vậy bằng các biện pháp cụ thể (chỉ) cơ sở dữ liệu không?
BIÊN TẬP
Nhấn mạnh của câu hỏi thay đổi một chút, trong ánh sáng của các câu trả lời ban đầu nhận được. Câu hỏi cơ bản không thay đổi.
EDIT2
Cách tiếp cận dựa vào các truy vấn tối ưu hóa dường như chỉ là một bước ngoại vi trong phòng thủ chống lại các cuộc tấn công vào các hệ thống. Đối với tôi, dường như các biện pháp phòng vệ cơ bản hơn đều được mong muốn và có thể khiến việc phụ thuộc vào các truy vấn đó là không cần thiết, hoặc ít quan trọng hơn, thậm chí để bảo vệ chống lại các cuộc tấn công tiêm chích.
Cách tiếp cận ngầm trong câu hỏi của tôi dựa trên cơ sở dữ liệu "bọc thép" và tôi không biết liệu đó có phải là một lựa chọn khả thi hay không. Nghiên cứu sâu hơn đã gợi ý rằng có những cách tiếp cận như vậy. Tôi đã tìm thấy các nguồn sau đây cung cấp một số gợi ý cho kiểu tiếp cận này:
http://database-programmer.blogspot.com
http://thehelsinkideclaration.blogspot.com
Các tính năng chính tôi đã lấy từ các nguồn này là:
- Một từ điển dữ liệu rộng lớn, kết hợp với một từ điển dữ liệu bảo mật mở rộng
- Tạo các kích hoạt, truy vấn và ràng buộc từ từ điển dữ liệu
- Giảm thiểu mã và tối đa hóa dữ liệu
Mặc dù các câu trả lời tôi đã có cho đến nay rất hữu ích và chỉ ra những khó khăn phát sinh từ việc bỏ qua các truy vấn tối ưu hóa, cuối cùng chúng không trả lời (các) câu hỏi ban đầu của tôi (hiện được nhấn mạnh bằng chữ in đậm).