Kiểm thử phần mềm cơ sở dữ liệu: Kiểm soát truy cập và quản lý bảo mật

MỤC LỤC

Kiểm soát truy cập nhiều người dùng

Chức năng tiếp theo được nhắc đến chính là khả năng kiểm soát và truy cập nhiều người dùng. Điều này sẽ cho phép nhiều người sử dụng có thể truy cập cơ sở dữ liệu trong cùng một lúc.

Chức năng quản lý về bảo mật

Một số trường hợp có thể thông qua việc xỏc thực bằng sinh trắc học (bằng võn tay hoặc vừng mạc). Chức năng này cũng có một số các hạn chế cụ thể mà bất cứ người dùng nào cũng có thể xem và quản lý.

Các hệ quản trị CSDL nổi tiếng 1 MySQL

    MariaDB thực chất là một nhánh được tách ra từ quá trình phát triển MySQL với mục đích phi thương mại, có nghĩa là nó sẽ hoàn toàn miễn phí cho người sử dụng. Ở trờn thỡ chỳng ta đó đề cập đến 3 kiểu CƠ SỞ DỮ LIỆU Cể QUAN HỆ, tiếp theo, chúng ta sẽ đến với MongoDB – đây là một hệ quản trị cở dữ liệu phi quan hệ (NoSQL). MongoDB được viết bằng nhiều ngôn ngữ lập trình khác nhau như C/C++, Go, JavaScript, Python và cũng hỗ trợ trên hầu hết các nền tảng hệ điều hành (Windows, Linux, MacOS…).

    Đặc điểm của HỆ QUẢN TRỊ DỮ LIỆU PHI QUAN HỆ là dữ liệu được lưu lại dưới dạng JSON (JavaScript Object Notation) và gần như là các các bản ghi không nhất thiết phải giống nhau về cấu trúc. Là một hệ quản trị cơ sở dữ liệu quan hệ được xây dựng và phát triển bởi Microsoft, với phiên bản đầu tiên ra đời vào năm 1989 (SQL Server 1.0) đến nay đã là phiên bản SQL Server 2019, và cũng là phiên bản ổn định nhất. Ban đầu thì Microsoft SQL Server chỉ hỗ trợ hệ điều hành Windows, nhưng sau này nó đã được phát triển để hỗ trợ trên hầu hết các nền tảng hệ điều hành Linux và MacOS.

    Redis (viết tắt của cụm từ REmote DIctionary Server) là một mã nguồn mở được sử dụng để lưu trữ dữ liệu có cấu trúc, có thể được sử dụng như một Database, bộ nhớ cache hoặc là một Message Broker. Redis lưu trữ dữ liệu dưới dạng Key-Value, hỗ trợ việc sắp xếp, query, backup dữ liệu lên đĩa cứng để cho phép bạn có thể khôi phục hệ thống khi gặp sự cố. Một vài kiểu dữ liệu trong Redis như String, List, Set, Hash… Có thể nói Redis là một sự lựa chọn tuyệt vời khi cần đến một Server lưu trữ dữ liệu đòi hỏi tính mở rộng cao, chia sẻ nhiều tiến trình, nhiều ứng dụng và nhiều server khác nhau.

    Chúng ta có thể liên kết SQLite tĩnh hoặc động tới ứng dụng, chỉ khoảng 400KB với cấu hình đầy đủ hoặc 259KB nếu bỏ qua một số tính năng tùy chọn thì SQLite thực sự rất nhẹ để tích hợp vào ứng dụng.

    Hình 9: Hệ quản trị CSDL Oracle
    Hình 9: Hệ quản trị CSDL Oracle

    Kỹ thuật kiểm thử Cơ sở dữ liệu 1. Khái niệm

    • Các loại kiểm thử cơ sơ dữ liệu

      Kiểm thử cấu trúc dữ liệu bao gồm việc xác nhận tính hợp lệ của tất cả các yếu tố bên trong kho lưu trữ dữ liệu được sử dụng chủ yếu để lưu trữ dữ liệu và không cho end user thao tác trực tiếp. SQL Server cho phép Tester có thể kiểm tra và truy vấn schema của cơ sở dữ liệu bằng cách viết các câu truy vấn đơn giản và không thông qua mã code. Ví dụ: nếu developer muốn thay đổi cấu trúc bảng hoặc xóa nó, Tester sẽ muốn đảm bảo rằng tất cả các Stored Procedures và Views được sử dụng bảng sẽ tương thích với sự thay đổi đó.

      Việc kiểm thử cơ sở dữ liệu chức năng theo đặc tả yêu cầu cần đảm bảo hầu hết các giao dịch và hoạt động được thực hiện bởi end user phải phù hợp với thông số kỹ thuật. Trong kịch bản cụ thể, Tester sẽ thao tác với các dữ liệu cơ bản và tiếp theo sẽ chuyển tới giao diện người dùng có liên quan để xác thực tính hợp lệ của các trường?. Kiểm tra xem các trigger được thực thi cho các giao dịch DML (Data Manipulation Language: ngôn ngữ thao tác dữ liệu)tương ứng đã hoàn thành các điều kiện yêu cầu hay chưa.

      Kiểm tra xem tất cả người dùng có được cấp quyền truy cập vào Cơ sở dữ liệu được chỉ định theo yêu cầu của các thông số kỹ thuật nghiệp vụ hay không. Load testing cũng tương tự như stress testing, nó có thể được nhóm lại dựa trên Performance Testing nhằm phục vụ hai mục đích cụ thể khi nói đến vai trò của kiểm thử phi chức năng. Định lượng rủi ro thực sự giúp các các bên liên quan xác định các yêu cầu về thời gian đáp ứng của hệ thống khác nhau theo các mức tải được yêu cầu.

      Cần lưu ý rằng kiểm thử tải không giảm thiểu rủi ro trực tiếp, nhưng thông qua các quá trình xác định rủi ro và định lượng rủi ro sẽ thể hiện các cơ hội khắc phục và động lực để khắc phục sẽ giúp giảm thiểu rủi ro. Một trình tạo SQL là cần thiết để xác nhận tính hợp lệ của SQL nhằm đảm bảo các truy vấn SQL sẽ thích hợp cho việc xử lý các trường hợp kiểm tra cơ sở dữ liệu cần thiết. Giải pháp: Bảo trì các truy vấn SQL và cập nhật liên tục là một phần quan trọng của quá trình kiểm tra tổng thể và nên là một phần của chiến lược kiểm tra tổng thể.

      Hình 17: Các kiểu kiểm thử cơ sở dữ liệu Có 3 kiểu kiểm thử dữ liệu đó là: [3]
      Hình 17: Các kiểu kiểm thử cơ sở dữ liệu Có 3 kiểu kiểm thử dữ liệu đó là: [3]

      Ứng dụng kiểm thử Cơ sở Dữ liệu 1. Kiểm tra tính hợp lệ của cơ sở dữ liệu

      • Datatype: varchar, nvarchar, ntext Kiểm tra Maxlength[6]
        • Datatype: int, tinyint, float
          • Kiểm tra tính toàn vẹn của cơ sở dữ liệu
            • Kiểm tra hiệu năng
              • Kiểm tra thủ tục 1 Định nghĩa

                Ví dụ như khi thực hiện import một lượng dữ liệu lớn trực tiếp trong database hoặc trên GUI, sau đó cần confirm một trường nào đó chỉ tồn tại các ký tự hoa (hoặc ký tự thường) theo đúng quy định kiểu dữ liệu. Ví dụ check trong bảng employee, trường first_name_eng xem toàn bộ các dữ liệu đang được lưu trữ trong trường này có bị có dữ liệu nào không phải toàn bộ là ký tự hoa không SELECT * from employee WHERE UPPER(first_name_eng) <> first_name_eng;. Check trong bảng employee, trường first_name_eng xem toàn bộ các dữ liệu đang được lưu trữ trong trường này có bị có dữ liệu nào không phải toàn bộ là ký tự thường không SELECT * from employee WHERE LOWER(first_name_eng) <> first_name_eng;.

                Mở màn hình giao diện, input dữ liệu có ký tự unicode vào trường cần check và save lại Confirm kết quả xử lý thành công hay thất bại trên GUI (các màn hình liên quan có hiển thị Unicode string này). Mở màn hình giao diện, input dữ liệu có ký tự unicode vào trường cần check và save lại o Confirm kết quả xử lý thành công hay thất bại trong Database bằng câu lệnh SELECT Nếu ký tự Unicode không bị vỡ font là OK. INSERT INTO Users (UserName, NickName) VALUES(NULL, 'Kumori') Kết quả: Nếu FALSE thì chứng tỏ không thể nhập NULL vào trường UserName Chúng ta có thể check xem giá trị NULL ở một trường nào đó bằng câu lệnh SELECT.

                File có size không đúng với spec: file vượt quá giới hạn cho phép, file 0 byte File có tên đúng với spec: độ dài, tên ký tự đặc biệt, tiếng Anh, tiếng Nhật File có tên không đúng với spec: độ dài vượt quá giới hạn cho phép, tên sai chuẩn File mà đang được lưu trữ ở các nguồn khác nhau: trên local/online/share file/sub folder/. Do khi thực hiện query để lấy dữ liệu thì sẽ phải lấy dữ liệu từ nhiều bảng khác nhau (điều kiện join) với nhiều điều kiện lọc giới hạn phạm vi dữ liệu sẽ được trích xuất ra (điều kiện where) nên hay xảy ra vấn đề là tốc độ trả về kết quả hiển thị trên màn hình mất nhiều thời gian, hoặc không hiển thị được kết quả trên màn hình do timeout. Trong trường hợp thời gian trả về quá lâu so với thời gian kỳ vọng (slow query) thì tiến hành report bug cho bên DEV để DEV điều tra, ví dụ như check lại câu query có hợp lý không, cần cải tiến tốc độ như thế nào?.

                Khi một thủ tục lưu trữ đã được định nghĩa, nó có thể được gọi thông qua tên thủ tục, nhận các tham số truyền vào, thực thi các câu lệnh SQL bên trong thủ tục và có thể trả về các giá trị sau khi thực hiện xong. Thủ tục lưu trữ được phân tích, tối ưu khi tạo ra nên việc thực thi chúng nhanh hơn nhiều so với việc phải thực hiện một tập rời rạc các câu lệnh SQL tương đương theo cách thông thường. Thay vì cấp phát quyền trực tiếp cho người sử dụng trên các câu lệnh SQL và trên các đối tượng cơ sở dữ liệu, ta có thể cấp phát quyền cho người sử dụng thông qua các thủ tục lưu trữ, nhờ đó tăng khả năng bảo mật đối với hệ thống.