1. Trang chủ
  2. » Luận Văn - Báo Cáo

Cài Đặt Và Thực Nghiệm SQLcipher Trên Hệ Điều Hành Android (Luận Văn Thạc Sĩ)

54 12 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Cài Đặt Và Thực Nghiệm SQLcipher Trên Hệ Điều Hành Android (Luận Văn Thạc Sĩ)
Tác giả Nguyen Thanh Long
Trường học Viện Công Nghệ Thông Tin Và Truyền Thông, Đại Học Bách Khoa Hà Nội
Chuyên ngành Khoa Học Máy Tính và Công Nghệ Thông Tin
Thể loại Luận văn thạc sĩ
Năm xuất bản 2023
Thành phố Hà Nội
Định dạng
Số trang 54
Dung lượng 1,28 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Cài Đặt Và Thực Nghiệm SQLcipher Trên Hệ Điều Hành Android (Luận Văn Thạc Sĩ) Mục tiêu nghiên cứu Tìm hiểu về SQLite EnCryption Extension và khả năng ứng dụng của SQLCipher vào bảo mật CSDL SQLite trên thiết bị di động. 3. Đối tượng và phạm vi nghiên cứu - Đối tượng nghiên cứu: SEE, SQLCipher. - Phạm vi nghiên cứu: Đồ án tốt nghiệp nghiên cứu các đặc trưng của CSDL SQLite và tìm hiểu về phần mở rộng mã hóa SQLite trên thiết bị di động. 4. Phương pháp nghiên cứu - Nghiên cứu, tài liệu liên quan để thu thập thông tin về cơ sở lý thuyết từ nhiều nguồn (tài liệu, Internet...). - Tổng hợp các kết quả nghiên cứu để lựa chọn cách tiếp cận phù hợp với nội dung nghiên cứu. 5. Những đóng góp của đồ án - Về lý thuyết: Đồ án tình bày tổng quan về bảo mật cơ sở dữ liệu trên thiết bị di động. Trình bày tổng quan về CDSL SQLite; giới thiệu, cách thức hoạt động, API trong SEE, biên dịch và sử dụng SEE. Đồng thời giới thiệu, tìm hiểu về đặc điểm, hướng tiếp cận, tính năng bảo mật và SQLCipher API của SQLCipher. - Về tính ứng dụng: Đồ án trình bày quá trình cài đặt và thực nghiệm SQLCipher để mã hóa CSDL SQLite. 6. Bố cục của đồ án tốt nghiệp Đồ án gồm 3 chương: Chương 1: Tổng quan về bảo mật CSDL Chương đầu tiên này tìm hiểu về các khái niệm chung của CSDL, các yêu cầu bảo mật, mô hình tổng quát, các lớp bảo mật, các cơ chế bảo mật CSDL, một số tấn công lên CSDL và giải pháp hiện có để bảo vệ CSDL. Chương 2: Tìm hiểu về SQLite EnCryption Extension Chương này trình bày tổng quan về CSDL SQLite; đặc điểm, cách thức hoạt động, biên dịch và sử dụng SEE. Đồng thời tìm hiểu về đặc điểm, tính năng bảo mật và cách thức hoạt động của SQLCipher. Chương 3: Cài đặt và thử nghiệm SQLCipher Chương này cài đặt và thử nghiệm SQLCipher trên hệ điều hành Android. (Luận Văn Thạc Sĩ) Cài Đặt SQLcipher Trên Hệ Điều Hành Android, Cài Đặt SQLcipher , Cài Đặt SQLcipher Trên Android, Sqlcipher Android, SQLCipher encryption, Open sqlcipher database, Install sqlcipher Windows, Pysqlcipher3, SQLite, Sqlcipher pragma key

Trang 1

Viện Công Nghệ Thông Tin Và Truyền Thông

ĐẠI HỌC BÁCH KHOA HÀ NỘI

Luận Văn Thạc Sĩ

CÀI ĐẶT VÀ THỰC NGHIỆM SQLCIPHER

TRÊN HỆ ĐIỀU HÀNH ANDROID

Nguyen Thanh Long

Ha Noi, 2023

Trang 2

LỜI MỞ ĐẦU

1 Tính cấp thiết của đề tài

Ngày nay, cuộc cách mạng khoa học công nghệ đã thúc đẩy sự phát triển của ngành công nghiệp sản xuất, đặc biệt là sản xuất thiết bị di động Cùng với sự phát triển mạnh mẽ đó thì nhu cầu sử dụng các phần mềm ứng dụng trên thiết bị di động cũng tăng lên, kéo theo nhu cầu lưu trữ dữ liệu ngày càng lớn Vấn đề lựa chọn CSDL để tối ưu hóa việc lưu trữ cũng như tầm quan trọng của bảo mật dữ liệu trên thiết bị di động đã và đang là vấn đề được các nhà phát triển cân nhắc và nghiên cứu Việc lựa chọn một CSDL để đáp ứng các yêu cầu về lưu trữ cũng như bảo mật thông tin cần thỏa mãn đầy đủ các nhu cầu : là CSDL nhúng, dung lượng nhỏ, thiết kế và cài đặt đơn giản, dễ thao tác trên thiết bị di động Và SQLite là một ví dụ điển hình xuất sắc, đáp ứng đầy đủ những nhu cầu trên để trở thành một CSDL tối ưu để lưu trữ dữ liệu trong ứng dụng di động Song song với đó, bên cạnh lưu trữ thì bảo mật

dữ liệu cũng là một vấn đề quan trọng Dữ liệu nằm trong CSDL càng quý giá thì một CSDL càng cần có mức độ bảo mật cao, để bảo vệ bảo đảm sự an toàn của dữ liệu có trong CSDL trên thiết bị di động Vì vậy vấn đề bảo mật CSDL trở nên cấp bách và rất cần thiết cho tất cả mọi người và nhất là đối với cơ quan lưu trữ những dữ liệu mật hoặc thông tin quan trọng Mã hóa chính là một trong những phương pháp bảo mật CSDL có độ an toàn và đảm bảo nhất

2 Mục tiêu nghiên cứu

Tìm hiểu về SQLite EnCryption Extension và khả năng ứng dụng của SQLCipher vào bảo mật CSDL SQLite trên thiết bị di động

3 Đối tượng và phạm vi nghiên cứu

- Đối tượng nghiên cứu: SEE, SQLCipher

- Phạm vi nghiên cứu: Đồ án tốt nghiệp nghiên cứu các đặc trưng của CSDL SQLite và tìm hiểu về phần mở rộng mã hóa SQLite trên thiết bị di động

4 Phương pháp nghiên cứu

- Nghiên cứu, tài liệu liên quan để thu thập thông tin về cơ sở lý thuyết

từ nhiều nguồn (tài liệu, Internet )

Trang 3

- Tổng hợp các kết quả nghiên cứu để lựa chọn cách tiếp cận phù hợp với nội dung nghiên cứu

5 Những đóng góp của đồ án

- Về lý thuyết: Đồ án tình bày tổng quan về bảo mật cơ sở dữ liệu trên thiết bị di động Trình bày tổng quan về CDSL SQLite; giới thiệu, cách thức hoạt động, API trong SEE, biên dịch và sử dụng SEE Đồng thời giới thiệu, tìm hiểu về đặc điểm, hướng tiếp cận, tính năng bảo mật và SQLCipher API của SQLCipher

- Về tính ứng dụng: Đồ án trình bày quá trình cài đặt và thực nghiệm SQLCipher để mã hóa CSDL SQLite

6 Bố cục của đồ án tốt nghiệp

Đồ án gồm 3 chương:

Chương 1: Tổng quan về bảo mật CSDL

Chương đầu tiên này tìm hiểu về các khái niệm chung của CSDL, các yêu cầu bảo mật, mô hình tổng quát, các lớp bảo mật, các cơ chế bảo mật CSDL, một số tấn công lên CSDL và giải pháp hiện có để bảo vệ CSDL

Chương 2: Tìm hiểu về SQLite EnCryption Extension

Chương này trình bày tổng quan về CSDL SQLite; đặc điểm, cách thức hoạt động, biên dịch và sử dụng SEE Đồng thời tìm hiểu về đặc điểm, tính năng bảo mật và cách thức hoạt động của SQLCipher

Chương 3: Cài đặt và thử nghiệm SQLCipher

Chương này cài đặt và thử nghiệm SQLCipher trên hệ điều hành Android

Trang 4

Chương 1 TỔNG QUAN VỀ BẢO MẬT CƠ SỞ DỮ LIỆU TRÊN THIẾT BỊ DI

DỘNG 1.1 Cơ sở dữ liệu và hệ quản trị cơ sở dữ liệu trên thiết bị di động

Dữ liệu là các thông tin liên quan đến đối tượng (ví dụ như người, vật,

sự việc, ) Dữ liệu được mô tả dưới nhiều dạng khác nhau (như ký tự, ký hiệu, hình ảnh, âm thanh )

Dữ liệu về đối tượng có thể khác nhau tùy thuộc vào mục đích quản lý

Ví dụ: Cùng là dữ liệu về đối tượng sinh viên nhưng với mục đích quản lý khác nhau thì sẽ khác nhau, cụ thể như sau:

- Với mục đích quản lý điểm, dữ liệu về đối tượng sinh viên sẽ bao gồm: Tên, Mã sinh viên, Điểm môn 1, Điểm môn 2, Điểm môn 3

- Với mục đích quản lý thông tin cá nhân, dữ liệu về đối tượng sinh viên sẽ bao gồm: Tên, Địa chỉ, Ngày Sinh, Quê Quán, Lớp

Cơ sở dữ liệu trên thiết bị di động là tâp hợp dữ liệu được tổ chức một cách có cấu trúc liên quan với nhau và được lưu trữ trên các thiết bị này Cơ

sở dữ liệu được thiết kế, xây dựng cho phép người dùng lưu trữ dữ liệu, truy xuất thông tin hoặc cập nhật dữ liệu Tất cả cơ sở dữ liệu của Android được lưu trữ trong thư mục /data/data/<tên package>/databases trong thiết bị hoặc máy ảo

Hệ quản trị cơ sở dữ liệu là một tập các chương trình cho phép người dùng tạo lập và duy trì các cơ sở dữ liệu Các thao tác cơ sở dữ liệu được hỗ trợ thực hiện gồm:

- Định nghĩa: Khai báo các kiểu, cấu trúc và ràng buộc dữ liệu

- Xây dựng: Liên quan đến việc lưu trữ dữ liệu trên các phương tiện lưu trữ do hệ quản trị cơ sở dữ liệu quản lý;

- Xử lý: Cho phép thực hiện các thao tác truy vấn, thêm, sửa, xóa dữ liệu;

- Chia sẻ: Cho phép nhiều người dùng cùng truy nhập, chia sẻ dữ liệu

Trang 5

1.2 Mô hình tổng quát và các lớp bảo mật cơ sở dữ liệu

1.2.1 Bảo mật cơ sở dữ liệu và các yếu tố liên quan

An toàn, hay bảo mật cơ sở dữ liệu (Database security) liên quan đến

ba yếu tố: Con người (people), Phần mềm (Software) và Dữ liệu (Data)

Hình 1.1 Bảo mật cơ sở dữ liệu và các yếu tố liên quan

Đồng thời, các nhân tố liên quan đến bảo mật cơ sở dữ liệu trong mô hình này bao gồm: Các mối đe dọa (Threats), Các rủi ro (Risks) và Các lỗ hổng (Vulnerabilities)

Hình 1.2 Các mối đe dọa bảo mật cơ sở dữ liệu

Các mối đe dọa đối với bảo mật cơ sở dữ liệu bao gồm 4 loại: Các đe dọa đến từ con người (People), từ mã độc (Malicious code), từ các tai họa công nghệ (Technological disasters) và từ tai họa tự nhiên (Natural disasters) Trong số các mối đe dọa kể trên, các mối đe dọa đến từ người dùng ác tính, như tin tặc và mã độc có mức độ nguy hiểm cao nhất Điều này cũng đúng với thống kê Top 10 mối đe dọa đối với bảo mật cơ sở dữ liệu theo hãng Imperva thực hiện năm 2015:

Trang 6

1 Excessive and Unused Privileges (Đặc quyền quá mức hoặc không

sử dụng)

2 Privilege Abuse (Lạm dụng đặc quyền)

3 Input Injection (Chèn mã đầu vào)

4 Malware (Mã độc)

5 Weak Audit Trail (Log kiểm toán yếu)

6 Storage Media Exposure (Rò rỉ dữ liệu từ phương tiện lưu trữ)

7 Exploitation of Vulnerabilities and Misconfigured Databases (Khai thác lỗi hổng và cấu hình cơ sở dữ liệu sai)

8 Unmanaged Sensitive Data (Các dữ liệu nhạy cảm không được quản lý)

9 Denial of Service (Tấn công từ chối dịch vụ)

10 Limited Security Expertise and Education (Kiến thức chuyên gia và đào tạo về bảo mật hạn chế)

Hình 1.3 Các rủi ro bảo mật cơ sở dữ liệu

Hình 1.4 Các lỗ hổng bảo mật cơ sở dữ liệu

Hình 1.3 cung cấp 4 nguồn rủi ro đối với bảo mật cơ sở dữ liệu, bao gồm các rủi ro đến từ con người (People), từ dữ liệu (Data), từ phần cứng (Hardware) và từ sự tín nhiệm Hình 1.4 cũng nêu 4 loại lỗ hổng bảo mật cơ

Trang 7

sở dữ liệu, bao gồm lỗ hổng do lỗi người dùng, lỗ hổng do thiết kế và lập trình, lỗ hổng phần mềm và lỗ hổng do cài đặt và cấu hình Trong các loại lỗ hổng kể trên, các lỗ hổng do lỗi người dùng và lỗ hổng do cài đặt và cấu hình

là các loại thường xuyên xảy ra nhất và có mức rủi ro cao nhất

1.2.2 Mô hình bảo mật cơ sở dữ liệu tổng quát

Hình 1.5 Mô hình bảo mật cơ sở dữ liệu tổng quát

Trên nguyên tắc giảm thiểu các yếu tố có thể truy nhập trực tiếp dữ liệu

và bề mặt tấn công cơ sở dữ liệu, Hình 1.5 mô tả mô hình bảo mật cơ sở dữ liệu tổng quát Theo đó, mô hình bảo mật cơ sở dữ liệu gồm 7 lớp: Lớp con người (People), lớp ứng dụng (Applications), lớp mạng (Network), lớp hệ điều hành (Operating system), lớp hệ quản trị cơ sở dữ liệu (DBMS), lớp file

dữ liệu (Data files) và lớp dữ liệu (Data)

Hình 1.6 Phương pháp thực hiện bảo mật cơ sở dữ liệu

Trang 8

Dựa trên mô hình bảo mật cơ sở dữ liệu tổng quát, Hình 1.12 mô tả phương pháp thực hiện bảo mật cơ sở dữ liệu Theo đó, các khâu thực hiện bảo mật cơ sở dữ liệu được đưa ra tương ứng với các khâu trong quy trình phát triển phần mềm Các khâu thực hiện bảo mật cơ sở dữ liệu gồm: Identification (Nhận dạng rủi ro), Assessment (Đánh giá rủi ro), Design (Thiết

kế các kiểm soát), Implementation (Áp dụng các kiểm soát), Evaluation (Đánh giá hiệu quả áp dụng) và Auditing (Kiểm toán) Kết quả khâu kiểm toán được sử dụng làm phản hồi để thực hiện các điều chỉnh phù hợp với các khâu trước đó

1.2.3 Các lớp bảo mật cơ sở dữ liệu

Mục này mô tả chi tiết các biện pháp cần thực hiện với mỗi lớp bảo mật

cơ sở dữ liệu theo mô hình tổng quát đã trình bày ở mục 1.3.2

Lớp bảo mật Con người

- Hạn chế truy nhập vật lý đến phần cứng hệ thống và các tài liệu;

- Sử dụng các biện pháp nhận dạng và xác thực thông tin nhận dạng của người dùng, như thẻ nhận dạng (ID card), PIN, hoặc mật khẩu, hoặc các đặc điểm sinh trắc học, như vân tay, tròng mắt;

- Đào tạo người quản trị, người dùng về tầm quan trọng của bảo mật và các biện pháp bảo vệ tài sản;

- Thiết lập các chính sách và thủ tục kiểm soát an ninh

Lớp bảo mật Ứng dụng

- Xác thực người dùng truy nhập ứng dụng;

- Áp dụng chính xác quy trình xử lý công việc;

- Sử dụng cơ chế đăng nhập một lần (Single Sing On) cho máy chủ cơ

sở dữ liệu, các ứng dụng, hoặc website có liên kết

Lớp bảo mật Mạng

- Sử dụng tường lửa để ngăn chặn xâm nhập trái phép;

Trang 9

- Sử dụng VPN để bảo mật thông tin và dữ liệu trên đường truyền;

- Vấn đề tài khoản người dùng

Lớp bảo mật File dữ liệu

- Quyền truy nhập file;

- Giám sát truy nhập file

Lớp bảo mật Dữ liệu

- Kiểm tra dữ liệu;

- Các ràng buộc dữ liệu;

- Mã hóa dữ liệu

1.3 Các cơ chế bảo mật cơ sở dữ liệu

1.3.1 Xác thực và trao quyền trong cơ sở dữ liệu

1.3.1.1 Xác thực và trao quyền trong cơ sở dữ liệu

Xác thực sử dụng tên người dùng (username) và mật khẩu (password)

là phương pháp chủ yếu trong xác thực người dùng cơ sở dữ liệu Xác thực là thành phần cơ sở của mô hình bảo mật tổng quát

Trang 10

Hình 1.7 Mô hình bảo mật ứng dụng tổng quát

Hầu hết các hệ quản trị cơ sở dữ liệu hỗ trợ lựa chọn phương pháp xác thực phù hợp trong số các phương pháp xác thực sẵn có:

- Không xác thực (No authentication)

- Xác thực dựa trên hệ điều hành

- Xác thực dựa trên hệ quản trị cơ sở dữ liệu

- Xác thực hỗn hợp (hệ điều hành hoặc hệ quản trị cơ sở dữ liệu)

Nhìn chung, không nên sử dụng phương pháp không xác thực do chúng

có độ rủi ro cao Nên sử dụng phương pháp xác thực dựa trên hệ điều hành do

hệ điều hành có cơ chế quản lý thông tin người dùng tương đối tốt và cơ chế xác thực mạnh

1.3.1.2 Bảo mật mật khẩu cơ sở dữ liệu

Mặc dù có nhiều công nghệ xác thực, nhưng xác thực dựa trên mật khẩu vẫn là phương pháp được sử dụng phổ biến nhất trong xác thực người dùng cơ sở dữ liệu Lý do cho sự phổ biến của việc sử dụng mật khẩu trong xác thực người dùng cơ sở dữ liệu là đảm bảo được mức an toàn tối thiểu, đơn giản, dễ sử dụng, và chi phí cài đặt, quản lý và vận hành thấp

Tính bảo mật của kỹ thuật điều khiển truy nhập sử dụng mật khẩu dựa trên 2 yếu tố: độ khó đoán của mật khẩu và tuổi thọ của mật khẩu Độ khó đoán của mật khẩu lại phụ thuộc vào số loại ký tự được sử dụng và độ dài của mật khẩu Một mật khẩu tốt, khó đoán cho truy nhập cơ sở dữ liệu từ ứng dụng nên đảm bảo có đủ 4 loại ký tự (chữ thường, hoa, chữ số, ký tự đặc biệt)

và độ dài từ 10 ký tự trở lên Tuổi thọ của mật khẩu là khoảng thời gian một

Trang 11

mật khẩu hoạt động Nhìn chung nên chọn mật khẩu có thời gian sống phù hợp theo chính sách an ninh, an toàn của cơ quan, tổ chức

Ngoài ra, cũng nên tránh sử dụng các mật khẩu ngắn, dễ đoán, như tên, ngày tháng năm sinh, tên đăng nhập,… hoặc sử dụng một mật khẩu (kể cả mật khẩu tốt) trên nhiều hệ thống do có nguy cơ rò rỉ cao

1.3.2 Sử dụng mã hóa trong cơ sở dữ liệu

1.3.2.1 Giới thiệu về mã hóa cơ sở dữ liệu

Các kỹ thuật mã hóa (Cryptographic techniques) có thể được sử dụng

để bảo vệ dữ liệu lưu trong cơ sở dữ liệu cũng như để bảo vệ cả cơ sở dữ liệu Hai phương pháp phổ biến được sử dụng để bảo vệ thông tin trong cơ sở dữ liệu, gồm: mã hóa (Encryption) và băm (Hashing) Mã hóa sử dụng các thuật toán mã hóa với khóa (key) để bảo vệ các loại dữ liệu Thông thường, các thuật toán mã hóa khóa đối xứng được sử dụng như DES, 3DES, AES, RC2, RC4, do kích thước khóa nhỏ và tốc độ mã hóa nhanh

Khác với phương pháp mã hóa luôn cần có khóa, phương pháp băm sử dụng các thuật toán băm có khóa, hoặc không khóa để chuyển đổi dữ liệu có

độ dài bất kỳ thành chuỗi đầu ra có độ dài cố định Phương pháp băm thường được dùng để mã hóa mật khẩu lưu trong cơ sở dữ liệu Các thuật toán băm không khóa thường được sử dụng, bao gồm: MD5, MD6, SHA1, SHA2, SHA3,

Nhìn chung, mã hóa là thao tác đòi hỏi nhiều tài nguyên tính toán (CPU

và bộ nhớ) nên thao tác này làm tăng đáng kể tải cho máy chủ cơ sở dữ liệu, hoặc máy chủ ứng dụng Do vậy, việc sử dụng mã hóa cần được xem xét và

áp dụng một cách hợp lý Việc lựa chọn phương pháp mã hóa và phần dữ liệu cần mã hóa, như chỉ mã hóa các dữ liệu nhạy cảm, hay mã hóa toàn bộ cơ sở

dữ liệu phụ thuộc vào yêu cầu của chính sách bảo mật trong từng tổ chức cụ thể

1.3.2.2 Mã hóa dữ liệu trong bảng

Dữ liệu trong các bảng cơ sở dữ liệu có thể được mã hóa theo 2 hướng: (1) sử dụng các hàm mã hóa/giải mã trong cơ sở dữ liệu để mã hóa/giải mã khi thực hiện các thao tác ghi/đọc và (2) thực hiện mã hóa/giải mã dữ liệu tại lớp ứng dụng Nhìn chung, các hệ quản trị cơ sở dữ liệu phiên bản cũ thường

Trang 12

không hỗ trợ các hàm mã hóa/giải mã, còn các hệ quản trị cơ sở dữ liệu phiên bản mới hơn hỗ trợ các hàm mã hóa/giải mã ở mức hạn chế Ngược lại, đa số thư viện API của ứng dụng hỗ trợ các hàm mã hóa/giải mã mạnh

Một vấn đề khác nảy sinh là khi dữ liệu trong bảng được mã hóa sẽ gây khó khăn cho việc lập chỉ số và tìm kiếm Do vậy, cần xem xét lựa chọn các

dữ liệu cần mã hóa và lựa chọn phương pháp mã hóa phù hợp Với các trường

dữ liệu cần lập chỉ số và tìm kiếm thường xuyên, đặc biệt là các trường khóa, không nên thực hiện mã hóa

1.3.2.3 Mã hóa toàn bộ dữ liệu

Dữ liệu trong các bảng và cả dữ liệu quản lý các bảng (siêu dữ liệu) có thể được mã hóa nhờ các công nghệ đặc biệt thực hiện trực tiếp trên máy chủ

cơ sở dữ liệu Theo đó, dữ liệu được tự động mã hóa khi nó được ghi vào cơ

sở dữ liệu và dữ liệu lại được tự động giải mã sau khi được đọc từ cơ sở dữ liệu và nạp vào bộ nhớ

Công nghệ mã hóa dữ liệu trong suốt (Transparent Data Encryption - TDE) cho phép tự động mã hóa từng khối dữ liệu khi nó được ghi vào cơ sở

dữ liệu và tự động giải mã khi khối được đọc ra từ cơ sở dữ liệu

Ưu điểm của công nghệ TDE là hoàn toàn trong suốt với người dùng Tuy nhiên, nhược điểm của nó là làm tăng tải máy chủ cơ sở dữ liệu Ngoài

ra, nếu người dùng hoặc tin tặc có thể truy cập cơ sở dữ liệu, thì hắn ta có thể trích xuất dữ liệu từ cơ sở dữ liệu theo cách thông thường Điều này có nghĩa

là TDE không thể bảo vệ được dữ liệu khỏi bị đánh cắp nếu người dùng có quyền truy nhập vào dữ liệu trong cơ sở dữ liệu

1.3.2.4 Mã hóa dữ liệu trên đường truyền

Dữ liệu trao đổi giữa máy khách, máy chủ ứng dụng và máy chủ cơ sở

dữ liệu có thể được bảo vệ sử dụng các giao thức, kỹ thuật dựa trên mã hóa, như SSL/TLS, hoặc IPSec (IP Security) SSL/TLS là giao thức bảo mật dữ liệu hoạt động giữa tầng giao vận (TCP) và tầng ứng dụng Một số đặc tính của SSL/TLS:

- Cần có chứng chỉ số khóa công khai cho máy chủ cấp bởi bên thứ 3 tin cậy

Trang 13

- Sử dụng hệ khóa công khai để trao đổi khóa phiên

- Sử dụng khóa phiên để mã hóa dữ liệu

- Sử dụng hàm băm có khóa (MAC/HMAC) để đảm bảo tính toàn vẹn

dữ liệu

- Xác thực thực thể

- Đảm bảo tính bí mật, toàn vẹn và xác thực thông tin truyền

Khác với SSL/TLS, giao thức bảo mật IPSec hoạt động ở tầng mạng (IP) và được sử dụng để tạo đường hầm, hoặc kênh giao tiếp an toàn giữa máy chủ và máy khách Tùy theo cấu hình làm việc, IPSec hỗ trợ đảm bảo tính xác thực và bí mật dữ liệu truyền Trên thực tế, IPSec thường được sử dụng làm giao thực bảo mật trong các mạng riêng ảo (VPN)

Nhìn chung, các giao thức bảo mật dữ liệu trên đường truyền làm giảm hiệu năng hệ thống do chúng tiêu tốn nhiều tài nguyên tính toán và tăng đáng

kể lượng dữ liệu truyền thực tế Do vậy, chỉ nên sử dụng các giao thức bảo mật dữ liệu trên đường truyền khi máy khách và máy chủ cơ sở dữ liệu không

ở cùng mạng LAN

1.3.3 Thuật toán mã khối AES

AES (Advanced Encryption Standard) là tên gọi cuộc thi được phát động bởi Viện Tiêu chuẩn và Công nghệ quốc gia (NIST) của Mỹ năm 1997 nhằm xây dựng chuẩn mã hóa dữ liệu mới thay thế chuẩn mã hóa DES Quá trình tuyển chọn diễn ra vào tháng 10 năm 2000, NIST đã công bố thuật toán Rijndael chính thức được chọn làm AES vào năm 2001

Rijndael là mã khối đối xứng với độ dài khối và độ dài khóa đều có thể thay đổi được theo bội của 32-bit, nhỏ nhất là 128-bit và lớn nhất là 256-bit AES là một trường hợp riêng của Rijndael với độ dài khối 128-bit và độ dài khóa thay đổi 128-bit, 192-bit hoặc 256-bit

Trang 14

1.3.4 Dẫn xuất khóa PBKDF2

PBKDF2 là một thuật toán được sử dụng để tạo ra các khóa Thuật toán này không được tạo ra nhằm mục đích băm mật khẩu, nhưng nhờ có đặc tính chậm, nó trở nên khá phù hợp với chức năng này Khóa kết quả được tạo ra (HMAC) có thể được dùng để lưu trữ mật khẩu một cách an toàn PBKDF2 không phải là hàm lý tưởng cho việc băm mật khẩu, nhưng bù lại nó rất dễ sử dụng và được xây dựng trên thuật toán băm SHA-1 hoặc SHA-2 (HMAC nào cũng có thể sử dụng được, nhưng đây là những khóa phổ biến nhất và có tính bảo mật cao nhất)

Để tạo khóa PBKDF2 ta làm như sau:

DK = PBKDF2(PRF, Password, Salt, c, dkLen) Trong đó DK là khóa được tạo, PRF là hàm HMAC được ưu tiên (đây

có thể là HMAC SHA-1/2, password được sử dụng như một khóa cho HMAC còn salt được sử dụng như văn bản), c là số vòng lặp và dkLen là độ dài của khóa được tạo Một salt phải có độ dài ít nhất 64 bits và số vòng lặp tối thiểu phải là 1024 Thuật toán sẽ tính toán SHA-1-HMAC(password+salt), và lặp lại phép tính 1024 lần trên kết quả thu được Điều này có nghĩa là quá trình băm một mật khẩu sẽ chậm lại 1024 lần Tuy nhiên điều này không thực sự bảo vệ mật khẩu tốt hơn trước nỗ lực tấn công bruteforce vào hệ thống phân

bố hoặc GPU (Graphic Processing Unit)

Cũng có một dấu hiệu cảnh báo khi mật khẩu dài hơn 64 bytes, khi đó

nó sẽ được cắt ngắn bằng cách thực hiện băm mật khẩu sử dụng thuật toán PBKDF2 sao cho độ dài mật khẩu không vượt quá block size Ví dụ khi sử dụng HMAC-SHA-1 một mật khẩu dài hơn 64 bytes sẽ được giảm xuống SHA-1(password), có độ dài 20 bytes Điều này có nghĩa là mật khẩu có độ dài lớn hơn 64 bytes không có tính bảo mật cao hơn trước những cuộc tấn công phá vỡ khóa được dùng để tạo ra HMAC, thậm chí còn làm giảm tính bảo mật vì độ dài của khóa sẽ bị giảm xuống (lưu ý rằng ngay cả khi giảm còn

20 bytes, cháu của cháu của cháu của cháu của cháu của cháu của cháu của cháu của cháu của cháu của cháu của chúng ta cũng đã ngỏm từ lâu trước khi khóa bị phá bởi phương thức brute force)

Trang 15

1.4 Một số tấn công thường gặp lên cơ sở dữ liệu và biện pháp phòng chống

Hai dạng tấn công phổ biến lên cơ sở dữ liệu bao gồm: Tấn công từ chối dịch vụ và trojan trên cơ sở dữ liệu

1.4.1 Tấn công từ chối dịch vụ

1.4.1.1 Các dạng tấn công DoS vào cơ sở dữ liệu

Tấn công từ chối dịch vụ cơ sở dữ liệu không được biết đến nhiều như tấn cống DoS/DDoS vào hạ tầng mạng và các dịch vụ mạng Theo đó, tin tặc thường lợi dụng hoặc khai thác các tính năng, các lỗi, hoặc lỗ hổng trong hệ thống cơ sở dữ liệu để làm tiêu tốn tài nguyên hoặc giảm hiệu năng cơ sở dữ liệu Tấn công từ chối dịch vụ cơ sở dữ liệu gồm các dạng: (1) Lạm dụng các tính năng của cơ sở dữ liệu, (2) Sử dụng các câu truy vấn phức tạp, (3) Khai thác các lỗi hoặc khiếm khuyết và (4) Tấn công thông qua lớp ứng dụng

• Lạm dụng các tính năng của cơ sở dữ liệu

Trong dạng tấn công này, tin tặc thường lợi dụng các tính năng của cơ

sở dữ liệu để tấn công từ chối dịch vụ (DoS) Thông thường, các tính năng này không an toàn với truy nhập từ bên ngoài Chẳng hạn, nếu ta giới hạn số lần đăng nhập sai với một người dùng, kẻ tấn công nếu biết tên người dùng sẽ thử đăng nhập nhiều lần với mật khẩu sai Kết quả là người dùng thực sự sẽ bị khóa tài khoản trong một khoảng thời gian Một ví dụ khác trong việc khai thác các tính năng là nếu ta cấu hình cơ sở dữ liệu cho phép tự tăng năng lực khi số yêu cầu truy vấn tăng, kẻ tấn công sẽ gửi đến rất nhiều yêu cầu giả mạo làm cơ sở dữ liệu tăng sử dụng tài nguyên đến tối đa, có thể dẫn đến máy chủ sụp đổ và ngừng hoạt động Một khả năng khác là tin tặc có thể tạo các yêu cầu đặc biệt gây lỗi trong xử lý dữ liệu đầu vào, và điều này có thể làm máy chủ cơ sở dữ liệu ngừng hoạt động

• Sử dụng các câu truy vấn phức tạp

Ở dạng tấn công này, tin tặc tạo các câu truy vấn phức tạp nhằm làm máy chủ cơ sở dữ liệu sử dụng nhiều tài nguyên (bộ nhớ, thời gian CPU, đĩa, ), làm giảm hiệu năng hoặc ngừng hoạt động máy chủ cơ sở dữ liệu Tin tặc cũng có thể tạo câu truy vấn với các trường tính toán và xem với nhiều

Trang 16

trường và số lượng lớn bản ghi, có thể làm máy chủ cơ sở dữ liệu tiêu thụ nhiều bộ nhớ Một số khả năng khác mà tin tặc có thể khai thác trong dạng tấn công này:

- Sử dụng các câu truy vấn lồng nhau hoặc đệ quy

- Sử dụng các phép toán có chi phí tính toán lớn như toán tử IN với danh sách so sánh rất dài Chẳng hạn, sử dụng toán tử IN câu lệnh SELECT:

"select * from <table1> from where <column1> IN (select <column2> from table2….)"

- Sử dụng phép JOIN để tạo các câu truy vấn cho tập kết quả rất lớn, như trong câu lệnh SELECT sau: "Select * from table1 a inner join table2 b

on a.c1 = b.c2…."

- Sử dụng hàm do người dùng định nghĩa: Tin tặc có thể tự viết các hàm để tấn công cơ sở dữ liệu

• Khai thác các lỗi và khiếm khuyết

Đây là một trong các dạng tấn công DoS phổ biến nhất vào cơ sở dữ liệu Các lỗi và khiếm khuyết thường bị khai thác bao gồm: lỗi tràn bộ đệm,

lỗi chèn mã SQL và lỗi thiết lập quyền truy nhập Một ví dụ điển hình là sâu Slammer (còn gọi là Sapphire) đã khai thác lỗi tràn bộ đệm để tấn công các máy chủ chạy hệ quản trị cơ sở dữ liệu Microsoft SQL 2000 với tốc độ lây lan rất nhanh đã gây ra một "trận lụt lưu lượng mạng" trên toàn thế giới vào năm

2003

Tuy không gây ra các "trận lụt", nhưng lỗi chèn mã SQL trên các trang web có thể giúp tin tặc tấn công đánh cắp dữ liệu cũng như có thể phá hủy toàn bộ nội dung cơ sở dữ liệu, gây gián đoạn hoạt động của hệ thống Hơn nữa, lỗi thiết lập quyền truy nhập (cấp quyền quản trị cho người dùng truy nhập dữ liệu) và chèn mã SQL có thể giúp tin tặc thực hiện các thao tác chiếm quyền điều khiển hệ thống chạy máy chủ cơ sở dữ liệu

• Tấn công thông qua lớp ứng dụng

Trong dạng này, tin tặc có thể tấn công cơ sở dữ liệu thông qua ứng dụng có kết nối và sử dụng cơ sở dữ liệu Chẳng hạn, tin tặc có thể thêm hàng ngàn sản phẩm vào 1 giỏ hàng trên một website bán hàng, sau đó liên tục

Trang 17

thêm sản phẩm và xem lại toàn bộ giỏ hàng Khi lượng sản phẩm đủ lớn có thể gây chậm hoặc đình trệ hoạt động của cơ sở dữ liệu của website Theo cách khác, tin tặc có thể sử dụng các script để liên tục yêu cầu các trang phức tạp có mức truy vấn cơ sở dữ liệu lớn, gây quá tải cho máy chủ cơ sở dữ liệu 1.4.1.2 Các biện pháp phòng chống

Mặc dù tấn công từ chối dịch vụ vào cơ sở dữ liệu không phổ biến, nhưng khi xảy ra có thể gây hậu quả rất lớn cho cơ sở dữ liệu cũng như hệ thống ứng dụng liên quan Do vậy, cần có các biện pháp phòng chống được chủ động triển khai để ngăn ngừa và giảm thiểu hậu quả có thể có Các biện pháp phòng chống tấn công từ chối dịch vụ vào cơ sở dữ liệu bao gồm: cấu hình máy chủ và cơ sở dữ liệu, đặt giới hạn sử dụng tài nguyên, cập nhật các bản vá, giám sát hoạt động của cơ sở dữ liệu

• Cấu hình máy chủ và cơ sở dữ liệu

- Giảm thiểu các vị trí mà tin tặc có thể tấn công cơ sở dữ liệu, như xóa

bỏ hoặc vô hiệu hóa các tài khoản, các tính năng và các dịch vụ không sử dụng;

- Hạn chế người dùng bên ngoài trực tiếp kết nối đến cơ sở dữ liệu, như

sử dụng mô hình người dùng, hoặc máy khách gián tiếp truy nhập cơ sở dữ liệu;

- Áp dụng chính sách quản lý người dùng, mật khẩu, phân quyền truy nhập chặt chẽ:

+ Mật khẩu phải đảm bảo an toàn và phải đổi mật khẩu định kỳ;

+ Quyền truy nhập được cấp cho các đối tượng phù hợp Cụ thể, cần hạn chế cho phép thực hiện các lệnh SQL trực tiếp trên các bảng dữ liệu và chỉ cấp quyền thực hiện các thủ tục

• Đặt giới hạn (threshold) sử dụng tài nguyên

Cần đặt giới hạn sử dụng tài nguyên cơ sở dữ liệu cho mỗi người dùng, như số lượng câu truy vấn/phút, thời gian hết hạn (Timed-out) với câu truy vấn lớn, ngưỡng sử dụng bộ nhớ và CPU, Ngoài ra, cần giới hạn số người dùng cơ sở dữ liệu có thể đăng nhập và truy vấn dữ liệu đồng thời Nhìn

Trang 18

chung, các dạng giới hạn giúp giảm nguy cơ cơ sở dữ liệu bị tấn công từ chối dịch vụ

• Cập nhật các bản vá

Cập nhật các bản vá, nâng cấp an ninh là biện pháp hiệu quả trong phòng chống các dạng tấn công khai thác các lỗ hổng đã biết Do vậy, cần cập nhật thường xuyên các bản vá cho hệ điều hành, các hệ quản trị cơ sở dữ liệu

và các ứng dụng liên quan để giảm thiểu các tấn công khai thác các lỗi, lỗ hổng đã biết Hơn nữa, trong điều kiện có thể, cần nâng cấp hệ điều hành và

hệ quản trị cơ sở dữ liệu lên phiên bản mới, ổn định và an toàn hơn

• Giám sát hoạt động của cơ sở dữ liệu

Sử dụng hệ thống giám sát để phát hiện và cảnh báo về các hành vi bất thường, hoặc các truy vấn không hợp lệ vào cơ sở dữ liệu Các thông tin có thể giám sát gồm: tần suất đăng nhập, kết nối đến cơ sở dữ liệu, việc truy nhập các đối tượng quan trọng, mức sử dụng CPU, bộ nhớ, và tài nguyên mạng, và các yêu cầu không hợp lệ hoặc bị cấm

1.4.2 Trojan trên cơ sở dữ liệu

1.4.2.1 Các dạng trojan trên cơ sở dữ liệu

Trojan là các phần mềm chứa mã độc, thường giả danh những chương trình có ích, nhằm lừa người dùng kích hoạt chúng Trojan thường được sử dụng để thực thi gián tiếp các tác vụ, mà tác giả của chúng không thể thực hiện trực tiếp do không có quyền truy nhập Trojan thường khai thác cơ chế điều khiển truy nhập tùy quyền (DAC) để thay đổi quyền truy nhập, cho phép tin tặc truy nhập các đối tượng mà chủ thể không hay biết

Các trojan cơ sở dữ liệu thường là các đoạn mã độc SQL được nhúng vào các thủ tục cơ sở dữ liệu, được chia thành 4 dạng:

1 Một tấn công thực hiện cả việc chèn mã và gọi thực hiện trojan;

2 Một tấn công sử dụng một người dùng hoặc tiến trình thực hiện việc chèn mã trojan và sau đó gọi thực hiện trojan nhằm trích xuất thông tin hoặc thực hiện một hành động nào đó trong cơ sở dữ liệu;

3 Một tấn công thực hiện việc chèn mã trojan và sau đó sử dụng một người dùng hoặc một tiến trình khác gọi thực hiện trojan;

Trang 19

4 Một tấn công sử dụng một người dùng hoặc tiến trình này thực hiện việc chèn mã trojan và sau đó sử dụng một người dùng hoặc một tiến trình khác gọi thực hiện trojan

Sau đây là 2 trường hợp về mã trojan được chèn vào thủ tục cơ sở dữ liệu và được gọi thực hiện Trong trường hợp thứ nhất, tin tặc sử dụng 1 người dùng hoặc 1 tiến trình nào đó để chèn mã SQL trojan vào thủ tục Theo

đó, một lập trình viên ít kinh nghiệm lấy 1 đoạn mã thủ tục trên mạng hoặc từ các nguồn không rõ ràng và đưa vào cơ sở dữ liệu mà không hiểu rõ đoạn mã

đó thực hiện những công việc gì Khi thủ tục được gọi, trojan được kích hoạt

Trong trường hợp thứ hai, trojan được gọi thực hiện sử dụng 1 người dùng hoặc 1 tiến trình nào đó Theo đó, một thủ tục cơ sở dữ liệu được cài đặt chạy định kỳ vào cuối tháng để tính lương cho tất cả nhân viên trong công ty Tin tặc nắm được điều này có thể tìm cách chèn mã trojan vào thủ tục này và

nó sẽ được kích hoạt khi thủ tục được chạy

1.4.2.2 Các biện pháp phòng chống

Để phòng chống trojan trên cơ sở dữ liệu hiệu quả cần kết hợp 2 biện pháp: (1) kiểm soát việc tạo và sửa các thủ tục và (2) giám sát việc thực hiện các thủ tục trên cơ sở dữ liệu Trong kiểm soát việc tạo và sửa các thủ tục, nội dung đầu tiên là hạn chế, hoặc cấm người dùng thao tác dữ liệu tạo, hoặc sửa các thủ tục, hàm cơ sở dữ liệu trong môi trường máy chủ sản xuất (production server) Cần đảm bảo rằng các thủ tục, hàm cần được tạo, sửa và kiểm thử kỹ trong môi trường máy chủ phát triển (development server) và triển khai trên chủ sản xuất sử dụng người dùng quản trị Ngoài ra, không sử dụng mã SQL

từ các nguồn không rõ ràng và đặc biệt là mã SQL từ mạng Internet mà không được kiểm tra kỹ Kèm theo, cần ghi log và lưu phiên bản của mã nguồn các thủ tục và hàm

Giám sát việc thực hiện các thủ tục, hàm trên cơ sở dữ liệu là việc cần thiết nhằm phát hiện các bất thường, hoặc các hành vi nguy hiểm đối với cơ

sở dữ liệu Đặc biệt, cần ghi log và giám sát chặt chẽ việc thực hiện các thủ tục quan trọng, có độ phức tạp cao, các thủ tục được chạy định kỳ hoặc được kích hoạt bởi triger Một vấn đề bổ sung là cần cấm, hoặc hạn chế quyền thực hiện các thủ tục mở rộng hoặc thủ tục hệ thống – là những thủ tục chứa những

Trang 20

đoạn mã có thể can thiệp sâu vào cơ sở dữ liệu, máy chủ cơ sở dữ liệu và hệ điều hành

Kết luận chương: Chương này đã tìm hiểu được về các khái niệm

chung của CSDL, các yêu cầu bảo mật, mô hình tổng quát, các lớp bảo mật, các cơ chế bảo mật CSDL, một số tấn công lên CSDL và giải pháp hiện có để bảo vệ CSDL Từ đó chương 2 đi sâu nghiên cứu về CSDL SQLite, SEE và SQLCipher

Trang 21

Chương 2 TÌM HIỂU VỀ SQLITE ENCRYPTION EXTENSION

2.1 Tổng quan về CSDL SQLite

CSDL SQLite ra đời giải quyết được vấn đề lưu trữ dữ liệu trong các ứng dụng cần hệ quản trị CSDL nhúng SQLite là mã nguồn mở, được phát hành vào năm 2000 Với một số đặc điểm như linh động, dễ sử dụng, nhỏ gọn, hiệu quả và tính tin cậy cao thì SQLite được đánh giá là một CSDL tốt

2.1.1 Giới thiệu chung về CSDL SQLite

Hiện nay, có khá nhiều CSDL để có thể sử dụng cho việc lưu trữ trên ứng dụng của mình như Web Service, Firebase, và SQLite là một trong số

đó SQLite được phát hành năm 2000 là thư viện điều khiển thực thi độc lập, không cấu hình SQLite là một cơ sở dữ liệu quan hệ, mã nguồn mở Mã nguồn của SQLite được công khai và sử dụng miễn phí cho bất kỳ mục đích nào, kể cả thương mại và riêng tư và được tích hợp sẵn trên Android SQLite thường được sử dụng trong các ứng dụng ở Local, như các ứng dụng danh bạ, tin nhắn, ghi chú, quản lý thông tin cá nhân, các tùy chọn thiết lập (Setting) trong phần mềm,…

SQLite được thiết kế để cung cấp những phương pháp thích hợp cho ứng dụng để quản lý dữ liệu mà không cần chi phí quản lý thường thấy ở những hệ thống quản trị CSDL quan hệ chuyên dụng SQLite là cơ sở dữ liệu được triển khai rộng rãi nhất trên thế giới với rất nhiều ứng dụng và các dự án lớn

Hình 2.1 Logo của CSDL SQLite

Trang 22

2.1.2 Các đặc trưng của CSDL SQLite

SQLite tuy là một CSDL nhỏ, nhưng nó cung cấp đầy đủ các tính năng

và khả năng mà một hệ quản trị CSDL có SQLite hỗ trợ tập hợp các chức năng cơ bản như giao tác, khung nhìn, kiểm tra ràng buộc, truy vấn con liên quan và các truy vấn kết hợp cùng với nhiều tính năng khác trong CSDL như

bộ kích hoạt, chỉ mục, tăng tự động chỉ số của cột, các câu lệnh LIMIT/OFFSET Nó cũng có nhiều chức năng đặc biệt như CSDL bộ nhớ trong, gán kiểu động và giải quyết một số xung đột Dưới dây là một số các tính năng đặc trưng được mở rộng trong CSDL SQLite

• Tính di động, khả chuyển

SQLite được thiết kế đặc biệt với khả năng di động của nó SQLite có thể biên dịch và chạy trên nhiều hệ điều hành như Android, Windows, Linux, BSD, OS X, hệ điều hành Unix như Solaris, HPUX và AIX, cũng như nhiều nền tảng nhúng như QNX, VxWorks, Symbian, Palm OS và Window CE Nó còn có thể hoạt động tốt trên các kiến trúc bản 16, 32 và 64 bit với các thứ tự byte lớn nhỏ Tính di động không chỉ dừng lại với phần mềm mà các tập tin CSDL SQLite cũng có khả năng di động Các định dạng tập tin CSDL là định dạng nhị phân, chúng tương thích trên tất cả các hệ điều hành, kiến trúc phần cứng và thứ tự byte mà SQLite có thể hoạt động được Người dùng có thể tạo CSDL SQLite trên rất nhiều công cụ và sử dụng các hệ điều hành hay thiết bị, ngay cả trên điện thoại di động mà không cần bất kỳ sự chuyển đổi hay sửa đổi nào Hơn nữa, CSDL SQLite có thể chứa tới 2 terabyte dữ liệu và hỗ trợ 2 kiểu mã hoá UTF-8 và UTF-16

Trang 23

• Tính nhỏ gọn

SQLite được thiết kế nhẹ và khép kín; một tập tin tiêu đề, một thư viện

và không yêu cầu CSDL bên ngoài Tất cả mọi đối tượng được đóng gói, dung lượng nhỏ hơn một nửa megabyte Ngoài ra, tập tin CSDL SQLite cũng nhỏ gọn, chúng là những tập tin hệ thống thông thường Với bất kỳ hệ thống nào thì tất cả các đối tượng trong CSDL như bảng, bộ kích hoạt, lược đồ, chỉ mục và khung nhìn đều được chứa trong một tập tin CSDL duy nhất Hơn nữa, SQLite dử dụng các bản ghi có chiều dài có thể thay đổi, việc cấp phát

bộ nhớ chỉ cần một dung lượng tối thiểu để SQLite lưu giữ các trường

• Tính đơn giản

Như một thư viện lập trình, API của SQLite là một trong những giao diện lập trình ứng dụng đơn giản và dễ sử dụng API được thiết kế giúp người dùng có thể tuỳ chọn SQLite bằng nhiều cách, chẳng hạn như thực hiện các chức năng do người dùng mở rộng bằng ngôn ngữ C Hơn thế nữa, có nhiều thư viện giao diện và nhiều ngôn ngữ có thể sử dụng được CSDL SQLite: Perl, Python, Ruby, Tcl/Tk, Java, PHP, Visual Basic, Objective C Việc thiết

kế các thư viện giao diện cho phép SQLite có đầy đủ các chức năng và mở rộng khi mà mã nguồn của chúng không phức tạp và vẫn đơn giản Mỗi khối của hệ thống chuyên xử lý một nhiệm vụ cụ thể Những khối này giúp cho SQLite có thể dễ dàng phát triển và gỡ lỗi mà không phụ thuộc vào hệ thống Kết quả của những công việc đó giúp SQLite có thể tách biệt rõ ràng giữa front-end (trình biên dịch SQL) và back-end (hệ thống lưu trữ) cho phép 2 thành phần này độc lập nhau Tóm lại, việc thiết kế API rõ ràng trong cả tài liệu giao diện, việc phân chia các khối và thành phần riêng biệt, không có sự ràng buộc giữa các khối và thành phần đó đã giúp việc sử dụng SQLite đơn giản và dễ dàng hơn

• Tính linh hoạt

SQLite là CSDL nhúng, nó cung cấp những điều kiện tốt nhất như sức mạnh và tính linh hoạt của một CSDL có hệ thống font-end, và đơn giản, nhỏ gọn như hệ thống back- end Hệ thống font-end bao gồm trình biên dịch SQL bên trong hệ thống CSDL, có nhiệm vụ thực thi và xử lý các câu lệnh truy

Trang 24

vấn Còn hệ thống back-end đảm nhiệm chức năng lưu trữ dữ liệu cho SQLite Theo đó, không cần cấu hình máy chủ, không cần kết nối mạng hoặc không phải lo lắng về việc kết nối CSDL và không có giới hạn nền tảng, không phải tìm hiểu kiến trúc API và miễn phí về bản quyền Thay vào đó, nếu muốn sử dụng CSDL SQLite, chỉ cần đưa SQLite vào ứng dụng

• Cấp phép tự do

Tất cả mã nguồn của SQLite được chia sẻ mà không cần giấy phép Ai cũng có thể sử dụng bất kỳ phần nào của SQLite mà không phải bồi thường bản quyền tác giả SQLite không giới hạn pháp lý về cách bạn có thể sử dụng

mã nguồn dưới mọi hình thức như chỉnh sửa, kết hợp, phân phối, bán và sử dụng cho bất kỳ mục đích thương mại mà không có phí bản quyền hay bị hạn chế Tóm lại SQLite là CSDL miễn phí

• Tính tin cậy

Mã nguồn của SQLite không chỉ miễn phí mà SQLite còn cho phép viết trong đó Mã nguồn của SQLite bao gồm gần 70.000 dòng chuẩn được viết bằng ngôn ngữ C, mã nguồn rõ ràng, được chú thích rất tốt Mã nguồn còn được thiết kế giúp người sử dụng tiếp cận, dễ dàng hiểu và dễ dàng chỉnh sửa

và dễ dàng truy cập Với lập trình viên thạo ngôn ngữ C thì có thể theo dõi mọi phần của mã nguồn SQLite hoặc với mã nguồn đó thì họ có thể đủ thời gian để tìm hiểu

Thêm nữa, mã nguồn của SQLite cung cấp API đầy đủ tính năng đặc biệt cho việc tuỳ chọn và mở rộng SQLite thông qua việc bổ sung các hàm do người dùng định nghĩa, tập hợp và đối chiếu tuần tự cùng với hỗ trợ cho các hoạt động bảo mật

• Tính tiện lợi

Ngoài những tính năng giống như các hệ quản trị CSDL khác, thì SQLite còn có một số các chức năng duy nhất mà chỉ SQLite mới có Nó bao gồm các tính năng như: gán kiểu động, giải quyết xung đột và khả năng đính kèm nhiều CSDL cho một phiên làm việc đơn lẻ

Tính năng gán kiểu động của SQLite gần giống với ngôn ngữ kịch bản Đặc biệt, kiểu của biến được xác định bằng chính giá trị của nó, mà không

Trang 25

phải định nghĩa trước như các ngôn ngữ khác như C và Java Hầu hết các hệ thống CSDL giới hạn giá trị các trường khi định nghĩa một kiểu trong cột tương ứng Nhưng trong SQLite thì các cột có thể có những kiểu được định nghĩa, và các trường không bị giới hạn giá trị, và biến trong ngôn ngữ kịch bản có thể được gán giá trị với các kiểu khác nhau

Thêm nữa, chức năng giải quyết xung đột trong SQLite cũng là một tính năng tiện lợi khác Chẳng hạn khi thực thi câu lệnh UPDATE bạn có thể gặp lỗi xung đột kiểu của biến SQLite có câu lệnh UPSET hoặc MERGE để giải quyết vấn đề xung đột đó

Cuối cùng là tính năng đính kèm tập tin CSDL bên ngoài vào phiên bản làm việc hiện tại Tính năng này được dùng khi bạn đang kết nối và làm việc với một CSDL, bạn muốn làm việc với một CSDL khác cùng một thời điểm, bạn có thể dùng câu lệnh ATTACH để thực hiện mục đích này

Tóm lại, với việc cung cấp một số tính năng đặc biệt thì SQLite giúp người dùng sử dụng và thao tác với SQLite dễ dàng và tiện lợi hơn

2.1.3 SQLite trong lập trình Android

Hệ điều hành android cung cấp hệ quản trị cơ sở dữ liệu quan hệ đầy đủ thông qua thư viện SQLite, mà không có bất kỳ hạn chế nào.Sử dụng SQLite,

có thể tạo độc lập, cơ sở dữ liệu quan hệ cho mỗi ứng dụng Sử dụng chúng

để lưu trữ và quản lý cấu trúc dữ liệu phức tạp của ứng dụng Tất cả cơ sở dữ liệu của Android được lưu trữ trong thư mục /data/data/<tên package>/databases trong thiết bị hoặc máy ảo

Tương tự như các hệ quản trị cơ sở dữ liệu khác thì khi thao tác với Database sẽ có những hành động cổ điển đó là CRUD: Create, Read, Update, Delete

Đầu tiên, để thao tác với SQLite, phải dùng 2 đối tượng:

• SQLiteOpenHelper: Đối tượng dùng để tạo, nâng cấp, đóng mở kết nối CSDL

• SQLiteDatabase: Đối tượng dùng để thực thi các câu lệnh SQL trên một CSDL

Trang 26

- Tham số 2: String name: Tên database

- Tham số 3: CursorFactory factory: thường để null

- Tham số 4: Int version: version của database

Khi khởi tạo một đối tượng của lớp này, phải ghi đè 2 phương thức:

- onCreate(): Phương thức này được gọi bởi framework, nếu có yêu cầu truy cập database mà chưa khởi tạo database, phải viết code khởi tạo database, cụ thể là khởi tạo bảng (chú ý: khi khởi tạo bảng, ta phải đặt tên

khóa chính là _id)

- onUpgrade(): Phương thức này được dùng khi ứng dụng có nhiều phiên bản database được thêm vào Nó sẽ cập nhật database hiện có hoặc khởi tạo lại thông qua onCreate()

Lớp này có 2 phương thức: getReadableDatabase() (chỉ đọc), getWriteableDatabase() (Cho phép ghi đọc) Thông qua 2 phương thức này, ta

có thể tạo ra một đối tượng SQLiteDatabase

2.1.3.2 SQLiteDatabase

Để tạo ra một cơ sở dữ liệu, gọi phương thức openOrCreateDatabase này với tên cơ sở dữ liệu của ta và chế độ như một tham số Nó trả về một thể hiện của cơ sở dữ liệu SQLite mà ta phải nhận được trong cú pháp object và được đưa ra dưới đây:

SQLiteDatabase mydatabase = openOrCreateDatabase( "database name" ,MODE_PRIVATE,null);

Một số hàm có sẵn trong gói cơ sở dữ liệu:

Trang 27

- openDatabase (String path, SQLiteDatabase.CursorFactory factory, int flags, DatabaseErrorHandler): Phương thức này chỉ mở thêm cơ sở dữ liệu hiện có với các chế độ cờ thích hợp Các chế độ cờ phổ biến có thể là OPEN_READWRITE OPEN_READONLY

- openDatabase (String path, SQLiteDatabase.CursorFactory factory, int flags): Phương thức này tương tự như phương thức trên vì nó cũng mở ra các cơ sở dữ liệu hiện có, nhưng nó không định nghĩa bất kỳ xử lý để xử lý các lỗi cơ sở dữ liệu

- openOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory): Phương thức này không chỉ mở ra nhưng lại tạo ra cơ sở dữ liệu nếu

nó không tồn tại Phương thức này tương đương với phương thức OpenDatabase

- openOrCreateDatabase (File file, SQLiteDatabase.CursorFactory factory): Phương thức này cũng tương tự như phương thức trên nhưng phải mất File đối tượng như là một con đường mà không phải là một chuỗi Nó tương đương với file.getPath()

Lớp này có các phương thức sau để làm việc với SQLite:

- insert(): Sử dụng phương thức này để insert một bản ghi vào CSDL

Dùng đối tượng ContentValues để đưa dữ liệu vào bảng Đối tượng này có các phương thức put (tên cột , dữ liệu) Sau đó gọi phương thức insert để đưa

đối tượng (dòng này) vào bảng

VD: Thêm một bản ghi mới vào bảng

Ngày đăng: 24/06/2023, 15:33

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w