Bảo mật cơ sở dữ liệu web và việc đảm bảo an toàn cho cơ sở dữ liệu của website. Các vấn đề liên quan đến bảo mật cơ sở dữ liệu web bao gồm: chèn mã SQL (SQL Injection), các thiết lập quyền truy nhập cơ sở dữ liệu và an toàn cho các thủ tục (Stored Procedures). Vấn đề tấn công chèn mã SQL và các biện pháp phòng chống đã đƣợc đề cập ở Mục 2.3. Phần tiếp theo của mục này sẽ trình bày các vấn đề còn lại.
3.2.3.1. Vấn đề thiết lập quyền truy nhập cơ sở dữ liệu
Quyền truy nhập cơ sở dữ liệu là quyền gán cho ngƣời dùng cơ sở dữ liệu truy nhập các đối tƣợng trong cơ sở dữ liệu, nhƣ các bảng, khung nhìn, thủ tục và hàm. Thiết lập quyền truy nhập phù hợp cho ngƣời dùng cơ sở dữ liệu là biện pháp đảm bảo an toàn hiệu quả cho cơ sở dữ liệu của website.
Đứng trên góc độ bảo mật, việc sử dụng một tài khoản ngƣời dùng để thực hiện mọi thao tác với cơ sở dữ liệu, gồm các thao tác truy nhập dữ liệu từ website và các thao tác quản trị là một lựa chọn tồi do ngƣời dùng có quyền quản trị cơ sở dữ liệu khi bị tấn công khai thác thì rủi ro đối với hệ thống là rất lớn. Điều nên làm là tạo và sử dụng nhiều tài khoản truy nhập cơ sở dữ liệu dựa trên ánh xạ vai trò của ngƣời dùng web, chẳng hạn tài khoản cho ngƣời dùng chỉ đọc dữ liệu, tài khoản cho ngƣời dùng cập nhật dữ liệu và tài khoản cho ngƣời quản trị cơ sở dữ liệu. Hình 3.12 minh họa một phƣơng pháp chia nhóm ngƣời dùng web dựa trên các trang đƣợc truy nhập và trên cơ sở đó tạo nhóm ngƣời dùng cơ sở dữ liệu tƣơng ứng phù hợp.
84
3.2.3.2. An toàn cho các thủ tục cơ sở dữ liệu
Nhƣ đã đề cập ở Mục 2.3, việc sử dụng thủ tục cơ sở dữ liệu thay cho các câu lệnh động, trực tiếp là một trong các biện pháp để ngăn chặn hiệu quả tấn công chèn mã SQL do dữ liệu ngƣời dùng đƣợc tách khỏi mã. Ngoài ra, thủ tục cũng giúp tăng hiệu năng đáng kể do các thủ tục đã đƣợc dịch và lƣu trong cơ sở dữ liệu. Liên quan đến vấn đề quyền truy nhập vào các bảng dữ liệu, thủ tục cũng cho phép hạn chế đến tối thiểu quyền truy nhập trực tiếp của ngƣời dùng vào các bảng dữ liệu thông qua việc chỉ thiết lập quyền thực hiện thủ tục. Khi đó, mọi thao tác dữ liệu đều thông qua các thủ tục và không cho phép thực hiện trực tiếp các câu lệnh SQL trên các bảng.
Để đảm bảo an toàn cho các thủ tục cơ sở dữ liệu, cần hạn chế sử dụng các câu lệnh SQL động trong thủ tục, nhƣ trong ví dụ sau:
Khi đó, nếu dữ liệu nhập vào là '; DROP TABLE sales;-- thì thủ tục vẫn bị tấn công chèn mã SQL và hậu quả là bảng sales bị xóa.