Trước đây, việc đảm bảo an toàn cho một CSDL thường bị hạn chế trong phạm vi gán và thu hồi các đặc quyền cho các đối tượng CSDL. Nhưng ngày nay các quản trị viên cần quan tâm đến môi trường xung quanh CSDL (đảm bảo an toàn cho hệ điều hành, đảm bảo an toàn mạng, an toàn máy chủ ứng dụng), cũng như các chủ đề khác như: tấn công SQL injection an toàn đa mức (multilevel security), an toàn kho dữ liệu (data warehouse) và khai phá dữ liệu (data mining).
An toàn ứng dụng và SQL injection
Ví dụ, xét một trang web với hai trường đầu vào là tên đăng nhập (username) và mật khẩu (password). Nếu người dùng gõ vào tên đăng nhập và mật khẩu tương ứng với một tên người dùng và mật khẩu trong CSDL thì một câu lệnh SQL động sẽ được tạo ra để tìm kiếm bản ghi tương ứng trong CSDL. Sau đó, người dùng này được xác thực và được phép truy nhập vào hệ thống. Ngược lại, nếu người dùng gõ vào tên và mật khẩu không hợp lệ thì không được xác thực. Tuy nhiên, một hacker có thể gõ một văn bản “độc” vào hộp thoại username để truy nhập được vào hệ thống mà không cần biết tên và mật khẩu hợp lệ của người dùng. Bằng cách điền vào trường username trên hộp thoại với chuỗi: ‘;shutdown; --’ và để trống trường password, câu lệnh SQL sau sẽ được thực thi:
SELECT user FROM all_users where username =’’;
shutdown; —‘ and pass=’’
Lưu ý rằng, sau shutdown và dấu chấm phẩy, có hai dấu gạch nối. Trong ngôn ngữ SQL, hai dấu gạch nối là một chú thích thể hiện rằng những thứ phía sau đó sẽ không được thực hiện. Trong CSDL SQL Server của Microsoft, tài khoản quản trị hệ thống mặc định (sa) với đăng nhập ứng dụng và câu lệnh ở trên, sẽ làm chấm dứt hoạt động của máy chủ cơ sở dữ liệu. Một đầu vào độc khác là ‘Or 1=1 -- cho trường username, khi đó câu truy vấn SQL trở thành:
SELECT * FROM all_Users WHERE UserName=’’ Or
1=1 --’ AND Password=’’
Biểu thức 1=1 luôn đúng cho mọi bản ghi của bảng, và phép toán OR luôn trả về giá trị đúng nếu một trong hai thành phần của biểu thức là đúng. Vì vậy, câu truy vấn này sẽ trả về các bản ghi lẽ ra không được trả về.
Các CSDL quan hệ, chẳng hạn như: SQL Server, Oracle, MySQL, DB2 và Sybase, đều có thể bị tổn thương bởi tấn công SQL injection. Tấn công SQL injection có thể thực hiện được là do đặc tính của bản thân ngôn ngữ SQL. SQL cho phép nhúng các chú thích vào câu lệnh SQL bằng cách sử dụng một cặp dấu gạch nối, cho phép ghép nối nhiều câu lệnh SQL cùng nhau (phân biệt bởi dấu chấm phẩy) và thực hiện chúng cùng nhau như một khối, cho phép truy vấn siêu dữ liệu từ các bảng từ điển dữ liệu của cơ sở dữ liệu.
Một nhà nghiên cứu (Litwin) đã mô tả 5 phương pháp để ta có thể ngăn chặn các tấn công SQL injection. Thứ nhất là không bao giờ tin tưởng hoàn toàn vào thông tin đầu vào của người dùng. Những thông tin đầu vào này cần được kiểm tra tính hợp lệ. Cách tốt nhất là “xác định các ký tự được phép và chỉ cho phép những ký tự đầu vào này”. Thứ hai, không nên dùng các truy vấn SQL động, nên sử dụng các thủ tục được lưu có chứa tham biến. Thứ ba, không bao giờ kết nối tới CSDL bằng một tài khoản quản trị. Thứ tư, không lưu các mật khẩu dưới dạng rõ, mà nên mã hóa hoặc “băm” mật khẩu, ngoài ra cần mã hóa các chuỗi kết nối và dữ liệu nhạy cảm khác. Cuối cùng, những thông điệp báo lỗi mà người dùng có thể nhìn thấy, chỉ được hiển thị những thông tin tối thiểu.
An toàn đa mức
Các CSDL truyền thống phân chia dữ liệu ở hai loại là nhạy cảm hoặc không nhạy cảm. An toàn đa mức (Multilevel Security – MLS) là một đặc tính cho phép thông tin trong một hệ thống được phân loại ở những mức an toàn khác nhau, người dùng cũng được phân loại theo quyền và mức độ mật của thông tin để ngăn chặn việc truy nhập thông tin trái phép. Người dùng chỉ có thể truy nhập được thông tin nếu mức phân loại của người dùng phù hợp với mức nhạy cảm của thông tin. Mục đích của chính sách này là phân tách dữ liệu theo mức phân loại an toàn của bản thân dữ liệu. Dữ liệu đã phân loại sẽ được lưu trong các hệ thống chuyên dụng và truy nhập của những người dùng bên ngoài và các cơ quan trung gian đều bị ngăn chặn. Nhược điểm chính của MLS là đòi hỏi các CSDL dung lượng lớn hơn nên chi phí cho cơ sở hạ tầng công nghệ thông tin cũng tăng lên.
Trong hệ thống MLS, các đối tượng như: các bảng dữ liệu, các bản ghi và các trường được coi như những thực thể thụ động. Một chủ thể là một tiến trình chủ động, có yêu cầu truy nhập tới các đối tượng. Mọi đối tượng đều được gán một lớp phân loại (classification) và mọi chủ thể đều có một mức độ mật (clearance). Mức phân loại và mức độ mật được đề cập chung như là các thành phần của các nhãn (label).
Một nhãn bao gồm hai thành phần: mức nhạy cảm của dữ liệu (level - là thành phần phân cấp) và hạng mục (compartment – không phân cấp). Các khía cạnh quan trọng khác của MLS chính là kiểm soát truy nhập bắt buộc (MAC) và đa thể hiện (Poly-instantiation). An toàn đa mức sử dụng kiểm soát truy nhập MAC để ngăn chặn việc khám phá thông tin trái phép từ dữ liệu mức cao của người dùng ở mức thấp. Trong MAC, độ an toàn được thực thi theo chính sách an toàn của hệ thống và không do người sở hữu của đối tượng quyết định. Đa thể hiện cho phép một bảng quan hệ được lưu trữ nhiều bản ghi với cùng khóa chính trong đó, mỗi bản ghi là một thể hiện của cùng một thực thể, nhưng với mức an toàn khác nhau.
Hiện nay chỉ có một số DBMS được thiết kế để hỗ trợ an toàn đa mức. Đó là thách thức lớn đối với các tổ chức nghiên cứu về CSDL. Các nhà cung cấp hệ quản trị CSDL thương mại đã tạo ra các phiên bản tin cậy (Trusted) cho các sản phẩm của họ, chẳng hạn như: Trusted Oracle, Informix Online/Secure, Sybase Secure Server và DB2 cho z/OS. Tuy nhiên, các phiên bản này đều có hai điểm yếu cơ bản sau:
- DBMS đa mức đó thực sự là nhiều thể hiện của nhiều DBMS mức đơn.
- CSDL đa mức được phân tách thành nhiều CSDL mức đơn (là một phân đoạn trong CSDL đa mức ở mức khái niệm).
Hai đặc điểm này làm giảm mạnh hiệu năng thực hiện của hệ thống.
Một cách tiếp cận khác là tận dụng ưu điểm của các đặc trưng an toàn có trong những phiên bản mới của các sản phẩm DBMS chuẩn. Chẳng hạn, từ phiên bản Oracle 9i trở lên, Oracle thực thi An toàn dựa vào nhãn (Oracle Label Security), cho phép chúng ta có thể mô phỏng một CSDL đa mức. Đó là một kiểm soát truy nhập mức bản ghi được xây dựng sẵn trong DBMS, dùng cho các ứng dụng an toàn mức cao, thêm một trường mới cho mỗi bản ghi để lưu nhãn nhạy cảm của mỗi hàng. Việc người dùng truy nhập vào các bản ghi có thể được thực hiện hoặc bị từ chối, tùy thuộc vào việc so sánh định danh và nhãn an toàn của người dùng với các nhãn nhạy cảm của các hàng dữ liệu đó.
An toàn Kho dữ liệu và Khai phá dữ liệu
Theo cơ chế kiểm soát truyền thống, chỉ các tác vụ quản lý cấp cao mới có thể truy vấn được các kho dữ liệu (data warehouse). Trong khi đó, trình độ của người dùng ngày càng cao, đòi hỏi hệ thống cần thực thi nhiều cơ chế kiểm soát truy nhập phức tạp hơn nữa. Trước đây, việc mã hóa các kho dữ liệu không được sử dụng rộng rãi vì làm giảm hiệu năng của hệ thống. Do vậy, để nâng cao hiệu quả xử lý, các kho dữ liệu cần sử dụng các kỹ thuật thiết kế và tối ưu hóa để đảm bảo thời gian trả lời nhanh đối với các câu truy vấn. Hiện nay,các kho dữ liệu đã được thiết kế cho các hệ thống mở, cho phép xử lý phân tích trực tuyến.
Các kho dữ liệu lưu trữ một lượng lớn dữ liệu quan trọng và nhạy cảm phải được đặt tại nơi bảo đảm an toàn ở mức cao. Trong một môi trường kho dữ liệu cơ bản, việc mã hóa dữ liệu có hai thách thức chính cần vượt qua là mã hóa không được làm thay đổi cách thức CSDL sử dụng hoặc thao tác trên dữ liệu và không được ảnh hưởng nhiều đến hiệu năng của CSDL.
Kho dữ liệu, cũng như Khai phá dữ liệu (tìm kiếm các mẫu dữ liệu để có thêm thông tin về một tổ chức cụ thể) và các CSDL thống kê (ví dụ CSDL quản lý nhân sự của tổ chức) sử dụng lượng lớn các khung nhìn (giao diện) chứa các dữ liệu tích hợp (như: tổng lương, số lượng nhân viên, giới tính, lương trung bình,...). Thông thường, người dùng chỉ nên được phép nhìn thấy dữ liệu tích hợp, mà không được xem các mục dữ liệu riêng, chứa những dữ liệu nhạy cảm hơn. Tuy nhiên, một hacker có thể suy diễn hoặc lấy được dữ liệu nhạy cảm từ những dữ liệu không nhạy cảm. Ví dụ, có một chương trình cho phép người dùng xem được lương trung bình của nam và nữ nhân viên trong một phòng làm việc nhất định bằng cách nhập thông tin vào hai trường “giới tính” và “phòng làm việc”. Nếu một người dùng biết rằng chỉ có một nữ nhân viên làm việc tại phòng Khoa học máy tính, anh ta/cô ta sẽ nhập thông tin vào phòng Khoa học máy tính và giới tính là nữ, và có thể xem được lương của nữ nhân viên đó.
Loại tấn công suy diễn này có thể chống được bằng cách không hiển thị những truy vấn trả về ít hơn một vài bản ghi. Tuy nhiên, điều này có thể gây ra tình huống từ chối truy nhập một người dùng hợp pháp, cần truy nhập để lấy thông tin phân tích có giá trị - mà thường kho dữ liệu được thiết kế để thực hiện mục đích này.
Ngoài các vấn đề trên, an toàn hệ điều hành, an toàn mạng và đặc biệt là chính sách an toàn cần được xem xét trong quá trình nghiên cứu và triển khai bảo đảm an toàn cho các cơ sở đữ liệu hiện nay.