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
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 tồ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 tồ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...).
- 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 qt, 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.
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.
1.2. Mơ hình tổng qt 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:
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 tố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ơ
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 qt
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 qt. 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
Dựa trên mơ hình bảo mật cơ sở dữ liệu tổng qt, 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 qt đã 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 số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;
- Sử dụng VPN để bảo mật thông tin và dữ liệu trên đường truyền;
- Sử dụng các biện pháp xác thực.
Lớp bảo mật Hệ điều hành
- Xác thực người dùng;
- Phát hiện xâm nhập;
- Áp dụng chính sách quản lý mật khẩu chặt chẽ;
- 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 qt.
Hình 1.7. Mơ hình bảo mật ứng dụng tổng qt
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ó đốn của mật khẩu và tuổi thọ của mật khẩu. Độ khó
đố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ó đố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
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
tố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 tố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 ln cần có khóa, phương pháp băm sử
dụng các thuật tố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 tố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 ngun tính tố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 tồ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
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à hồn tồ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. Ngồ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.
- 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 tồn vẹn
dữ liệu.
- Xác thực thực thể.
- Đảm bảo tính bí mật, tồ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 ngun tính tố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. Q
trình tuyển chọn diễn ra vào tháng 10 năm 2000, NIST đã công bố thuật tố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.
1.3.4. Dẫn xuất khóa PBKDF2
PBKDF2 là một thuật tốn được sử dụng để tạo ra các khóa. Thuật tố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 tồ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 tốn sẽ tính tố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à q 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).
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 tồ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 tốn và xem với nhiều
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 tốn có chi phí tính tốn lớn như tố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 tồ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
tồ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
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 ngồ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
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 tồ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;
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ị. Ngồ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
đ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 qt, 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.
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.
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.
• Khơng cần cấu hình
Như đã đề cập ở các phần trên, SQLite được thiết kế mà có thể khơng
cần quản trị viên của hệ thống. Việc cấu hình và quản lý SQLite rất đơn giản,
nó đã bao gồm đầy đủ các chức năng được cấu hình trong hệ thống, người
dùng khơng cần can thiệp vào bên trong nó mà vẫn có thể dùng như một hệ
thống hồn chỉnh.
• 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.
• 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. Ngồ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
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
Ngồ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
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 ngồ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/
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.