Bài viết được sự cho phép của tác giả Trần Nhật Trường
Giới thiệu
Lợi ích của điều tra số Database nói chung:
- Truy cứu nguồn gốc các hoạt động DML và DDL của người dùng.
- Xác định các dữ liệu trước và sau câu truy vấn.
- Phục hồi các row data bị xoá
- Có thể giúp chứng minh hoặc bác bỏ một tình huống thất thoát dữ liệu.
- Xác định phạm vi xâm nhập cơ sở dữ liệu
DML và DDL là gì?
DDL là viết tắt của Ngôn Ngữ Định Nghĩa Dữ Liệu và do vậy có thể nói câu lệnh DDL được dùng để định hình dữ liệu của bạn trông như thế nào, tổ chức ra sao. Một số câu lệnh DDL phổ biến mà chúng ta dễ bắt gặp nhất chính là:
- CREATE – được dùng để tạo mới các đối tượng trong cơ sở dữ liệu như database, table, function, stored procedure, trigger.
- ALTER – được dùng để sửa đổi các đối tượng như table (thêm cột), column (sửa đổi kiểu dữ liệu), trigger (sửa đổi nội dung).
- DROP – dùng để xóa các đối tượng trong cơ sở dữ liệu.
- TRUNCATE – dùng để xóa tất cả dữ liệu của bảng một cách nhanh chóng.
DML là viết tắt của Ngôn Ngữ Thao Tác Dữ liệu, chính là những câu lệnh truy vấn, thêm xóa sửa mà chúng ta thường dùng khi làm việc với dữ liệu lưu trữ trong SQL Server. Một số câu lệnh phổ biến như:
- INSERT – thêm dữ liệu vào một bảng trong cơ sở dữ liệu.
- UPDATE – sửa đổi dữ liệu trong một bảng.
- DELETE – xóa dòng dữ liệu trong bảng.
- SELECT – truy vấn dữ liệu.
Các tệp tin của cơ sở dữ liệu:
- Tệp dữ liệu, có phần mở rộng là .mdf, chứa dữ liệu thực sự, chứa nhiều data page (không biết gọi là gì)
Tệp nhật ký, có phần mở rộng là .ldf, chứa các dữ liệu cho việc đảo ngược các transaction, phục hồi cơ sở dữ liệu. Các tệp nhật ký này được biểu diễn thành Virtual Log File (VLF). Mỗi record trong transaction log Thế (VLF) được đánh số thứ tự Log Sequence Number (LSN), số lượng và kích thước của VLF được quyết định bởi Database Engine của SQL Server.
Trong Transaction Log, những record cần dùng cho quá trình Full Recovery của Database được gọi là Active Log. Khi thông tin chứa trong các record của Transaction Log được ghi xuống Data File (với Recovery model là SIMPLE), hoặc khi Transaction Log được sao lưu (với Recovery model là FULL/BULK-LOGGED) thì các Active Log sẽ trở thành Inactive Log. Lúc đó, vùng lưu trữ chứa các Inactive Log có thể được sử dụng để lưu trữ các Active Log mới. Quá trình này được gọi là Log Truncation.
Thực chất, quá trình Log Truncation không xóa đi dữ liệu nên không làm cho kích thước Log File giảm xuống. Ở đây, SQL Server chỉ đánh dấu các record không còn được sử dụng và do đó có thể ghi đè bằng các record mới. Vì thế, Transaction Log không cần tăng thêm kích thước cho record mới.
Các record được ghi vào Transaction Log theo cơ chế xoay vòng (circular). Nghĩa là các Active Log được ghi tuần tự từ cho đến cuối file. Nếu lưu đến cuối file mà vùng lưu trữ đầu file có thể sử dụng (do quá trình Log Truncation xảy ra) thì các record mới sẽ được ghi đè vào vùng này.
Tùy theo Recovery model thiết lập cho Database mà bạn cần có phương án quản lý Transaction Log hợp lý để tránh trường hợp dung lượng Transaction Log cứ tăng lên, làm đầy ổ đĩa khiến Database không thể hoạt động. Nếu Recovery model của Database là SIMPLE, bạn không cần quan tâm nhiều đến quản lý Transaction Log. Bởi khi đó SQL Server sẽ tự thực hiện Checkpoint để ghi dữ liệu xuống Data File và tiến hành quá trình Log Truncation. Trong trường hợp Recovery model là FULL hoặc BULK-LOGGED, bạn cần sao lưu Transaction Log định kỳ để quá trình Log Truncation diễn ra.
Toàn bộ các trường có transaction log:
tất cả transactions được viết vào tệp nhật ký trước khi commit (ký thác)
Điều tra log bằng hàm fn_dblog()
hàm fn_dblog() còn gọi lệnh DBCC, nó cho phép xem các bản ghi nhật ký giao dịch. fn_dblog() yêu cầu các tham số sau:
SELECT * FROM fn_dblog(NULL, NULL)
Bây giờ, fn_dblog sẽ trả về tất cả các chi tiết giao dịch, vì vậy, hãy chọn các giao dịch để phân tích. Kết quả giao dịch bao gồm LSN hiện tại, thao tác đã thực hiện, ID giao dịch, ID giao dịch gốc, Thời gian, Tên giao dịch và SID giao dịch.
Xem thêm nhiều việc làm SQL hấp dẫn trên TopDev
Thu thập bằng chứng
- Thu thập các dữ liệu tổng hợp của cơ sở dữ liệu, sử dụng công cụ Windows Forensic Toolchest (WFT)
- Thu thập các active transaction log
- Thu thập plan cache
- Thu thập các tệp tin dữ liệu và nhật ký (Microsoft SQL ServerMSSQL.1MSSQLDATA*.MDF | *.LDF)
- Thu thập các tệp default trace (Microsoft SQL ServerMSSQL.1MSSQLLOGLOG_#.TRC)
- Thu thập các error log SQL (Microsoft SQL ServerMSSQL.1MSSQLLOGERRORLOG)
- Thu thập các system event log (WFT)
Phân tích bằng chứng
Cần phải thu thập và phân tích các log sau:
- Windows event log
- Error log
- Default database trace
- Data files & log files
- Active transaction log
- Plan cache
Phục hồi dữ liệu
https://ieeexplore.ieee.org/document/9328241
Dùng tool, sẽ nói ở phần dưới
Điều tra số SQL Server với công cụ SQL Log Analyzer
SQL Log Analyzer là một công cụ chuyên nghiệp giúp đọc và phân tích các transaction của các tệp nhật ký của máy chủ SQL, cho phép tự động phân tích các tệp nhật ký và phục hồi tệp LDF. Đối với sử dụng fn_dblog(), nó không hiển thị các transcation và đi vào chi tiết, thời điểm các bản ghi bị xoá.
Công cụ cũng đồng thời hiển thị ác hoạt động được thực hiện trong tệp LDF với các trường Transaction Name, Login Name, Time, Table Name và Query, do đó ta có thể thực hiện phân tích được tất cả các transaction như INSERT, DELETE, UPDATE…
Các bước phân tích như sau:
Bước 1: chạy SQL Log Analyzer và chọn tệp .ldf muốn phân tích:
Ngoài ra có thể scan online, cung cấp thông tin SQL server, tool nó sẽ tự quét tệp .ldf cho.
Bước 2: chạy scan, khi hoàn thành nó sẽ pop up
Bước 3: công cụ sẽ show ra các transaction, chọn bảng muốn xem:
Bài viết gốc được đăng tải tại nhattruong.blog
Có thể bạn quan tâm: