Tải bản đầy đủ (.pdf) (55 trang)

Tấn công Rootkit trong Oracle

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.47 MB, 55 trang )

MỤC LỤC
MỤC LỤC ............................................................................................................. 1
DANH MỤC HÌNH ẢNH .................................................................................... 3
DANH MỤC BẢNG ............................................................................................. 4
LỜI NÓI ĐẦU ...................................................................................................... 5
CHƢƠNG 1. TỔNG QUAN VỀ ROOTKIT ..................................................... 7
1.1. Tổng quan về mã độc (malware) .............................................................. 7
1.2. Tổng quan về Rootkit ............................................................................... 7
1.2.1. Lịch sử Rootkit ................................................................................... 7
1.2.2. Khái niệm Rootkit .............................................................................. 8
1.3. Cách thức hoạt động của Rootkit ............................................................. 9
1.3.1. Chiếm quyền điều khiển..................................................................... 9
1.3.2. Kỹ thuật Hooking ............................................................................... 9
1.4. Phân loại Rootkit .................................................................................... 10
1.4.1. User-mode rootkit và kernel – mode rootkit .................................... 10
1.4.2. Persistent và non-persistent rootkit .................................................. 11
CHƢƠNG 2. TẤN CÔNG ROOTKIT TRONG ORACLE ............................ 13
2.1. Tổng quan Oracle ................................................................................... 13
2.1.1. Oracle instance ................................................................................. 13
2.1.2. Oracle Database................................................................................ 14
2.2. Tấn công Rootkit trong Oracle ............................................................... 17
2.2.1. Tìm hiểu 1 số data dictionary view .................................................. 17
2.2.2. Khai thác các PL/SQL Package ....................................................... 20
2.2.3. Nhiệm vụ của Rootkit ...................................................................... 27
2.2.4. Cách thức tấn công của Rootkit ....................................................... 32
2.2.5. Mô tả tấn công Oracle sử dụng Rootkit kết hợp với Backdoor ....... 39
CHƢƠNG 3. PHÁT HIỆN ROOTKIT ............................................................ 44
1


3.1. Phƣơng pháp phát hiện Rootkit .............................................................. 44


3.1.1. Quét .................................................................................................. 44
3.1.2. Theo dõi các sự kiện......................................................................... 45
3.2. Một số phần mềm phát hiện và diệt Rootkit .......................................... 46
CHƢƠNG 4. THỰC HIỆN TẤN CÔNG ROOTKIT TRONG ORACLE ...... 48
4.1. Mục tiêu .................................................................................................. 48
4.2. Các bƣớc thực hiện ................................................................................. 48
KẾT LUẬN ......................................................................................................... 54
TÀI LIỆU THAM KHẢO ................................................................................... 55

2


DANH MỤC HÌNH ẢNH
Hình 2.1. Kiến trúc Oracle Server ....................................................................... 13
Hình 2.2. System Global Area SGA ................................................................. 14
Hình 2.3. Trƣớc khi ẩn user Hacker .................................................................... 28
Hình 2.4. Sau khi ẩn user Hacker ........................................................................ 29
Hình 2.5. V$session trƣớc khi ẩn session ........................................................... 30
Hình 2.6. V$session sau khi ẩn session .............................................................. 30
Hình 2.7. dba jobs trƣớc khi ẩn job .................................................................... 31
Hình 2.8. dba jobs sau khi ẩn job ....................................................................... 31
Hình 2.9.Trƣớc khi thay đổi binary..................................................................... 33
Hình 2.10. Sau khi thay đổi binary. .................................................................... 34
Hình 2.11. Đƣờng dẫn thực thi trong Oracle ...................................................... 35
Hình 2.12. Trƣớc khi thay đổi đƣờng dẫn thực thi ............................................. 35
Hình 2.13. Tạo view mới .................................................................................... 36
Hình 2.14. Truy xuất sau khi thay đổi đƣờng dẫn .............................................. 36
Hình 2.15. Sử dụng PL/SQL native .................................................................... 39
Hình 2.16. Sử dụng PL/SQL native .................................................................... 39
Hình 4.1.Giao diên SQL Plus .............................................................................. 48

Hình 4.2. Tạo user hacker ................................................................................... 48
Hình 4.3. Gán quyền DBA cho hacker ............................................................... 49
Hình 4.4. Đ ng nhập bằng user hacker ............................................................... 49
Hình 4.5. Truy vấn đến bảng dba_users.............................................................. 49
Hình 4.6. Tạo một view là DBA HACK để ẩn user hacker ............................... 50
Hình 4.7. Tạo một synonym có tên là hacker.dba users .................................... 50
Hình 4.8. Đ ng nhập user hacker ở chế độ thƣờng và truy vấn đến bảng
DBA_USERS ...................................................................................................... 50
Hình 4.9. Xem thông tin log group ..................................................................... 51
Hình 4.10. Xem thông tin member trong logfile................................................. 51
Hình 4.11. Thêm member trong logfile. ............................................................. 52
Hình 4.12. Truy vấn bảng logfile để kiểm tra member vừa tạo. ......................... 52
Hình 4.13. Xóa 1 member trong logfile .............................................................. 52
Hình 4.14. Kiểm tra lại trong bảng logfile .......................................................... 53

3


DANH MỤC BẢNG
Bảng 2.1. View dba_jobs .................................................................................... 18
Bảng 2.2. View dba_jobs_running ...................................................................... 19
Bảng 2.3. V$Process ........................................................................................... 19
Bảng 2.4. V$Session ........................................................................................... 20
Bảng 2.5. dbms_metadata ................................................................................... 21
Bảng 2.6. Dạng XML của các object .................................................................. 22
Bảng 2.7. dbms_output........................................................................................ 23
Bảng 2.8. dbms_jobs ........................................................................................... 23
Bảng 2.9. dbms_sql ............................................................................................. 25
Bảng 2.10. Các function cơ bản .......................................................................... 27
Bảng 2.11. Thông tin user, job, process .............................................................. 32


4


LỜI NÓI ĐẦU
Những n m gần đây, bảo mật luôn là vấn đề nhức nhối và làm đau đầu
các công ty, tổ chức... bởi cùng với những tiện ích to lớn mà công nghệ thông
tin, internet mang lại thì những nguy cơ mất an toàn, nguy hiểm khi sử dụng
những tiện ích đó cũng ra t ng nhanh chóng: thực tế thì từ những thông tin cá
nhân ngƣời dùng, dữ liệu của các công ty tổ chức bình thƣờng tới những bí mật
quân sự, bí mật quốc gia quan trọng đều đã từng bị hacker đánh cắp qua internet,
máy tính... Thông tin cá nhân: Hãng bảo mật Hold Security (Mỹ) vừa tiết lộ, tin
tặc Nga đang nắm giữ trong tay đến 1,2 tỉ tài khoản ngƣời dùng toàn cầu... Các
dữ liệu đƣợc lƣu trữ trong database của các công ty, tổ chức lớn cũng bị đánh
cắp rất nhiều nhƣ tài khoản ngân hàng, chiến lƣợc kinh doanh... Bí mật quân sự,
bí mật quốc gia: Các tài liệu mà cựu nhân viên tình báo của Cơ quan An ninh
Quốc gia Mỹ NSA cung cấp cho tạp chí Đức Der Spiegel, cho thấy là gián điệp
mạng của Trung Quốc đã đánh cắp một "khối lƣợng to lớn" thông tin quân sự
nhạy cảm liên quan đến chiếc F-35 – máy bay tàng hình tối tân của Mỹ... . Các
Hackers thƣờng lợi dụng các lỗ hổng bảo mật, sử dụng Virus, Trojan, Malware...
để thực hiện các hành vi phá hoại, n cắp thông tin... Tuy nhiên điều cực kì nguy
hiểm là các hành vi đó ngày càng khó phát hiện đối với các công ty tổ chức do
gần đây Hackers sử dụng một số biện pháp che dấu các hoạt động trong hệ
thống và xóa bỏ dấu vết truy cập ngày càng tinh vi. Một trong số đó là kĩ thuật
Rootkit.
Ví dụ đối với một vụ tấn công vào hệ cơ sở dữ liệu Oracle: Rootkit đƣợc
cài đặt sau khi đã đột nhập thành công vào một Oracle database, để che giấu mọi
dấu vết của cuộc đột nhập, và trở thành tấm bình phong che chắn sự hiện diện
của attacker trong database. Ngƣời quản trị sẽ khó lòng biết đƣợc database của
mình có đang bị nhìn ngó hay bị tấn công hay không. Với tốc độ phát triển

nhanh chóng và ngày một tinh vi, những n m gần đây Rootkit đã đƣợc xếp vào
top 10 nguy cơ về bảo mật nguy hiểm nhất.
Rootkit là một vấn đề đã và hiện rất nan giải đối với các chuyên gia bảo
mật toàn cầu, tuy nhiên tại Việt Nam thì tài liệu và hiểu biết về Rootkit còn khá
hạn hẹp nên nhóm chúng em đã thực hiện đề tài này để hiểu biết thêm về
Rootkit. Tổng kết đề tài gồm các phần chính:
5


Chương1: Tổng quan về Rootkit, cách thức Rootkit hoạt động trong
Oracle và một số phƣơng pháp phát hiện Rootkit...
Chương 2: Tấn công Rootkit trong Oracle
Chương 3: Phát hiện Rootkit
Chương 4: Thực hiện tấn công Rootkit trong Oracle
Với thời gian thực hiện và kiến thức có hạn, mặc dù nhóm đã rất trau dồi,
tỉ mỉ nhƣng vẫn không thể tránh khỏi những thiếu sót. Nhóm rất mong nhận
đƣợc các góp ý của thầy cô và bạn đọc để nhóm hoàn thiện tốt hơn nữa đề tài.
Chúng em xin chân thành cảm ơn!

6


CHƢƠNG 1. TỔNG QUAN VỀ ROOTKIT
1.1. Tổng quan về mã độc (malware)
Thuật ngữ Malware là từ viết tắt của Malicious software. Malware đƣợc
định nghĩa là một chƣơng trình đƣợc chèn một cách bí mật vào hệ thống với
mục đích làm hại đến tính bí mật, tính sẵn sàng của hệ thống. Các loại
malware nhƣ: virus, worms, trojans, backdoor, spyware…
Mục tiêu của malware có thể là thông tin cá nhân, dữ liệu, tài nguyên
máy tính… Bằng cách ghi dấu thói quen lƣớt Web của bạn, chúng biết những

vấn đề bạn quan tâm và những quảng cáo mà sẽ phù hợp với ý định của bạn.
Những malware này cho phép các công ty quảng cáo thiết kế các pop up nắm
bắt mục đích của từng cá nhân. Xa hơn nữa, malware có thể điều khiển nội
dung những gì đƣợc hiển thị trên trình duyệt của bạn. Đó là hacking. Các nội
dung tìm kiếm và hiển thị của bạn có thể bị hack sang trang mà malware chỉ
định. Điều này có thể đƣa đến nhiều phiền toái khi các pop up liên tục nhảy
ra, và tệ hơn nữa nó có thể chứa các virus, worm mà khi vô tình kích phải
chúng sẽ ngay lập tức xâm nhập vào máy tính của bạn.
Đối với các thông tin cá nhân nhƣ: những thông tin dùng để đ ng nhập
vào tài khoản ngân hàng, chuyển tiền, rút tiền… Nếu bạn dùng password, hacker
có thể dùng chƣơng trình giải mã mật khẩu. Hoặc nó có thể giả một chƣơng
trình an ninh, dụ bạn cài vào mà không biết trong đó có thể có chƣơng trình
keylogger, spyware… sẵn sàng lấy cắp thông tin của bạn. Cuối cùng, hacker sẽ
lợi dụng tài nguyên hệ thống vào những mục đích nhƣ tấn công hệ thống khác,
ẩn nấp sau hệ thống của bạn nhằm che giấu hành tung của mình. Để thực hiện
đƣợc các mục đích này, malware sẽ thực hiện dễ dàng hơn nếu có sự trợ giúp
của rootkit. Vì thế các malware đầu tiên sẽ cài đặt rootkit vào máy, tới lƣợt mình
rootkit sẽ che giấu hành vi của malware. Thực tế, rootkit là xấu hay tốt do mục
đích mà nó đƣợc sử dụng.
1.2. Tổng quan về Rootkit
1.2.1. Lịch sử Rootkit
Kỹ thuật Rootkit không còn mới mẻ với những ngƣời làm lĩnh vực An
toàn thông tin. Đầu tiên rootkit đƣợc phát triển trên hệ điều hành Unix-like
Solaris và Linux và sau đó là trên Windows.
7


N m 1999, Rootkit đƣợc công khai trên Windows bởi Greg Hoglundmột chuyên gia về bảo mật và ngƣời lập website rootkit.com. Thuật ngữ
rootkit bắt nguồn từ root – mức truy nhập cao nhất vào hệ thống, có quyền
admin và từ kit- một tập các công cụ để che giấu và chiếm quyền.

Việc phát hiện Sony Rootkit rootkit quản lí bản quyền số bởi Mark
Russonovich của Sysinternal đã khiến rootkit đƣợc quan tâm một cách đặc
biệt và nhiều ngƣời đã bắt đầu tìm hiểu hoạt động của nó. Cho tới sự kiện đó,
rootkit chỉ là một cái gì đó khêu gợi sự tò mò, hơn là một hiểm họa cận kề. Sự
kiện Sony Rootkit xảy ra ngày 31/10/2005 đã đƣa rootkit thành trung tâm chú
ý. Nó cũng chứng tỏ, hãng đã nghiên cứu và phát triển kỹ thuật rootkit một
cách quy củ. Sau sự kiện này, Sony đã phải tiến hành gỡ bỏ rootkit trên các
đĩa CD và tốn khoản bồi thƣờng không ít.
Sự kiện này đƣợc cho là trƣớc sau gì cũng xảy ra, khi mà các nhà cung
cấp bảo mật đƣa ra nhiều biện pháp để chống lại các kiểu nguy cơ có thể, thì
những ngƣời tạo malware cũng sẽ tƣơng ứng đáp lại bằng các kỹ thuật n cắp
và tinh ranh hơn. Bằng cách sử dụng rootkit và khả n ng lén lút của nó,
những hacker máy tính đã tìm ra cách mới và hiệu quả để tấn công. Các
chƣơng trình che giấu và rootkit cho thấy một nguy cơ cận kề về an ninh
mạng. Thực tế, ngày 6/12/2005 tạp chí eweek đã công bố rằng có tới 20%
malware bị phát hiện trên Windows XP SP2 là các rootkit. Một số liệu sau đó
vào ngày 6/12/2006 cũng ghi nhận rằng tỉ lệ rootkit trong số malware là 14%,
trong khi tại thời điểm của sự kiện Sony Rootkit con số đó là 8%.
1.2.2. Khái niệm Rootkit
Rootkit /ru:tkit/ là bộ công cụ phần mềm che giấu sự tồn tại file nhƣng
thực ra nó vẫn hoạt động. Rootkit thƣờng đƣợc bên thứ ba thƣờng là kẻ xâm
nhập dùng sau khi chiếm đƣợc quyền truy cập vào hệ thống máy tính. Các công
cụ này thƣờng nhằm để che dấu dữ liệu hệ thống, tập tin hoặc tiến trình đang
chạy, từ đó giúp cho kẻ xâm nhập duy trì quyền truy cập vào hệ thống mà ngƣời
dùng không biết. Rootkit có ở nhiều loại hệ điều hành nhƣ Linux, Solaris và các
phiên bản Microsoft Windows. Một máy tính bị cài rootkit đƣợc gọi là bị "chiếm
quyền root" ("rooted" trong tiếng Anh).

8



1.3. Cách thức hoạt động của Rootkit
1.3.1. Chiếm quyền điều khiển
Bất kì khi nào user hay một chƣơng trình nào truy vấn hệ thống, kết
quả trả về sẽ đƣợc mặc định tin tƣởng không gợn chút nghi vấn. Rootkit lợi
dụng sự tin tƣởng cơ bản này. Đầu tiên nó phải chiếm đƣợc quyền quản trị hệ
thống để có thể điều khiển hệ thống làm gì cho nó. Vì thế chiếm quyền admin
là một bƣớc vô cùng quan trọng và quyết định.
1.3.2. Kỹ thuật Hooking
Là kỹ thuật mà Rootkit sử dụng để thay đổi đƣờng dẫn thực thi của hệ
điều hành- nó chặn các lời gọi hệ thống và điều chỉnh kết quả sao cho không
có dấu vết gì về sự tồn tại của nó. Hook sẽ chuyển hƣớng các chƣơng trình
bình thƣờng, sang các hàm của rootkit thay vì các hàm của hệ thống. Cả
kernel mode và user mode rootkit đều sử dụng kỹ thuật hooking để lọc các
kết quả trả về bởi OS và giấu đi sự tồn tại của nó. Các chƣơng trình phân tích
và quét sẽ không phát hiện ra thông tin về sự tồn tại của nó trong Registry,
cũng nhƣ các port mà rootkit sử dụng. Đó là vì các chƣơng trình này dựa trên
thông tin lấy từ OS. Chúng ta sẽ không phát hiện đƣợc rootkit thông qua các
công cụ nhƣ Task Manager, windows explorer hay regedit. Windows sử dụng
các table để lƣu trữ và ghi dấu các thông tin quan trọng. Các table này có thể
bị hook, thay đổi và bẻ gẫy bởi rootkit.
User mode và kernel mode rootkit đều sử dụng kỹ thuật hook và mỗi
loại bị hạn chế bởi những gì mà chúng có thể hook do phạm vi hoạt động của
chúng. User mode rootkit chỉ có thể hook các table trong phạm vi không gian
địa chỉ dành cho user các bảng IAT, EAT hoặc có thể chèn các jump vào
API mức user để thay các system call sang function của rootkit.
Có hai kiểu hook là priviledge hook và unpriviledged hooks. User
mode rootkit là các unpriviledge hook, trong khi kernel mode rootkit là
priviledge hook. Ở mỗi kiểu hook khác nhau về quyền hệ thống đều sử dụng
kỹ thuật hook giống nhau. Kỹ thuật hooking API: user mode rootkit sẽ chặn

các lời gọi hàm API và thay đổi địa chỉ API trong IAT thuộc tiến trình của
user, sau đó trỏ tới rootkit function thay vì Windows API functions. Cả user
mode và kernel mode rootkit sử dụng API hooking để đảm bảo OS chỉ trả về
kết quả đã đƣợc sàng lọc, vốn sẽ bỏ rơi bất kì sự tiết lộ nào về rootkit hay
tung tích của nó. User mode rootkit chỉ có thể chỉnh sửa table nào thuộc về
9


chƣơng trình user. Mỗi chƣơng trình user có IAT riêng chứa thông tin về các
function mà kernel sẽ thực hiện cho nó. Để hiệu quả, user mode rootkit phải
tìm cách để thay đổi table của mọi user program và điều khiển bất kỳ chƣơng
trình nào sắp sửa chạy để nó có thể hook API tƣơng ứng của chƣơng trình đó.
Rootkit không nhất thiết phải hook mọi API, chỉ những API nào có thể liên
quan tới nó. Ví dụ nó có thể hook API của Task Manager dùng để liệt kê các
process hoặc API mà dùng bởi Windows Explorer để liệt kê danh sách các
file, folder. Và bởi vì nó phải hook cùng một API của mọi tiến trình đang
đƣợc kích hoạt nên user mode rootkit ít hiệu quả bằng kernel mode rootkit.
Kernel mode rootkit chỉ cần hook một cấu trúc mà tất cả user program sử
dụng.
1.4. Phân loại Rootkit
Rootkit đƣợc chia thành hai loại– user mode và kernel mode rootkit,
phụ thuộc vào phạm vi ảnh hƣởng và liệu chúng chỉ tồn tại trong bộ nhớ hay
sau khi khởi động lại đƣợc ghi lên ổ đĩa persisten và non-persistent rootkit.
1.4.1. User-mode rootkit và kernel – mode rootkit
Đây là rootkit có cơ chế điều khiển và phạm vi ảnh hƣởng lên hệ điều
hành khác nhau. Cơ chế điều khiển thông qua đặc quyền mà nó giành đƣợc.
Đặc quyền càng lớn, phạm vi ảnh hƣởng càng t ng.
Bất kể là chế độ nào đi nữa, thì mọi rootkit đều dựa trên cơ sở: các
chƣơng trình giao tiếp với nhau nhờ các lời gọi hàm. Tùy vào mức đặc quyền
của chƣơng trình, nó có thể tạo lời gọi trực tiếp tới kernel hay gián tiếp qua

một bên xử lí thứ ba đứng giữa nó và kernel. Hay ngƣời ta gọi là User mode
và kernel mode.
Rootkit mức user, là mức đặc quyền thấp nhất, nó phải sử dụng giao diện
ứng dụng chƣơng trình API để gửi yêu cầu tới hệ thống. Các lời gọi này sẽ
thông qua thƣ viện liên kết động mức user DLL để đƣợc chuyển thành
thông điệp mà kernel có thể hiểu. Thực tế thì chƣơng trình mức user không tự
chứa tất cả các khả n ng xử lí, nó sẽ phải dùng tạo các system call tới kernel.
Ví dụ, khi user click nút OK. Windows chuyển thông tin đó thành một system
call để hệ thống xử lí. Ngôn ngữ mà Window cung cấp để thực hiện giao tiếp
giữa kernel và chƣơng trình mức user gọi là API. Để vận hành tốt hơn, mỗi
chƣơng trình user tự tạo một bảng riêng chứa địa chỉ của tất cả API hoặc
10


system function mà nó sẽ cần gọi tới. Bảng đó đƣợc gọi là IAT ( import
address table . Gián tiếp liên lạc với kernel làm hạn chế mức ảnh hƣởng của
user mode rootkit. Nó chỉ có thể chạy trong một ứng dụng nhất định, với một
số user nhất định. Nó có thể bị phát hiện bởi các chƣơng trình phát hiện
rootkit. Lợi điểm của nó là dễ tạo, không làm hệ thống bị treo hay gặp sự cố.
Nhƣng để có kết quả nhất định, user mode rootkit còn khá nhiều việc phải
làm.
Kernel mode rootkit: kernel là phần mềm tƣơng ứng với đơn vị xử lí
trung tâm- bộ não của hệ điều hành, là thành phần c n bản. Kernel duy trì và
điều khiển nhiều tài nguyên quan trọng, và các hàm nhƣ thông tin bộ nhớ, an
ninh, lập lịch xử lí, giao tiếp giữa phần cứng và phần mềm. Kernel vì thế có
phạm vi ảnh hƣởng toàn bộ hệ thống, phần cứng và tất cả các ứng dụng. Tất
cả các chƣơng trình đều phải tƣơng tác với kernel theo một cách nào đó. Và
nếu rootkit thao túng đƣợc kernel, nó sẽ ở vị trí điều khiển tất cả.
Không giống user mode rootkit hoạt động ở Ring 3, kernel mode rootkit
hoạt động ở Ring 0, tƣơng tác trực tiếp với kernel. Kernel mode rootkit sẽ cài

đặt một device driver để lấy quyền điều khiển mức kernel. Sau đó, rootkit
driver sẽ chuyển hƣớng các system function call sang mã lập trình của nó để
thi hành.
1.4.2. Persistent và non-persistent rootkit
Một khía cạnh để phân loại rootkit nữa là khả n ng tồn tại của nó sau
khi hệ thống khởi động.
Persistent rootkit: để có thể tồn tại sau khi hệ thống khởi động rootkit
phải thay đổi đƣợc nội dung ổ cứng. Rootkit sẽ chèn một mục autostart vào
Registry, nhờ đó nó đƣợc load vào bộ nhớ và tự động thực thi mỗi lần máy
tính khởi động. Dù các thay đổi vật lí làm t ng khả n ng bị phát hiện nhƣng
vẫn rất nhiều tiện ích hệ thống cũng nhƣ chƣơng trình quét malware lại bỏ
qua rootkit.
Non-Persistent rootkit: chỉ tồn tại trên bộ nhớ và mất đi khi hệ thống
khởi động lại. Các chƣơng trình mà bỏ qua việc quét các nơi lƣu trữ vật lí sẽ
không phát hiện ra rootkit này. Non-persistent rootkit có vẻ nhƣ ít đe dọa tới
những ai mà việc khởi động lại máy tính là thƣờng xuyên. Nhƣng đối với một
mạng server- với hàng tr m máy tính client, việc reboot thƣờng rất hiếm. Các
11


rootkit nằm trên bộ nhớ thƣờng lợi dụng điểm này, hơn nữa, rootkit kiều này
không để lại manh mối vật lý nào để có thể bị phát hiện.

12


CHƢƠNG 2. TẤN CÔNG ROOTKIT TRONG ORACLE
2.1. Tổng quan Oracle
Oracle server là một hệ thống quản trị cơ sở dữ liệu đối tƣợng quan hệ cho
phép quản lý thông tin một cách toàn diện. Oracle server bao gồm hai thành

phần chính là Oracle instance và Oracle Database.

nh 2.1. Kiến trúc Oracle Server
2.1.1. Oracle instance
Là thành phần liên kết giữa ngƣời dùng và thông tin trong Oracle
Database. Một Oracle Instance chỉ đƣợc mở cho duy nhất một Oracle Database
cần truy xuất. Oracle Instance đƣợc tạo nên bởi sự kết hợp của hai thành phần là
cấu trúc bộ nhớ và các tiến trình nền Background Process dùng để quản lý
CSDL. Vùng nhớ của Oracle Instance gọi là SGA System Global Area có vai
trò lƣu trữ thông tin của Oracle Database và đƣợc chia sẻ cho những ngƣời đang
truy xuất vào cơ sở dữ liệu. Tiến trình trong Oracle có 2 loại: tiến trình của
ngƣời dùng User Process và tiến trình của Oracle (Oracle Process). User
Process đƣợc hình thành khi ngƣời dùng sử dụng công cụ hay ứng dụng kết nối
vào Oracle Instance. Khi đó, trên máy tính chứa Oracle Server sẽ phát sinh một
tiến trình gọi là Server Process dùng để giao tiếp giữa User Process và Oracle
13


Instance. Những xử lý bên trong Oracle Instance sẽ do các tiến trình nền
(Background Process) thực hiện.
SGA đƣợc cấp phát tại vùng nhớ ảo của máy tính đang chạy Oracle. SGA
gồm có một số cấu trúc vùng nhớ dùng để chứa dữ liệu và quản lý các thông tin
về Oracle Instance. SGA còn đƣợc biết nhƣ là một vùng nhớ chia sẻ, thông tin
về Database có thể đƣợc truy xuất bởi các tiến trình đang làm việc trên Database
đó. Nếu có nhiều ngƣời dùng kết nối với một Instance thì SGA của Instance sẽ
chia sẻ cho những ngƣời dùng đó. SGA bao gồm một số cấu trúc vùng nhớ
chính nhƣ: Shared Pool, Database Buffer Cache, Redo Log Buffer. Ngoài ra,
còn có hai cấu trúc vùng nhớ mà SGA có thể sử dụng hay bỏ qua là Large Pool
và Java Pool. Kích thƣớc vùng nhớ của SGA phụ thuộc vào kích thƣớc của các
thành phần tạo nên nó. SGA có một đặc tính quan trọng là ta có thể thay đổi

kích thƣớc mà không cần phải ngừng Instance của SGA cần sửa đổi. Điều này
có nghĩa là kích thƣớc của các Database Buffer Cache, Shared Pool và Large
Pool của SGA có thể đƣợc thay đổi trong khi Instance đang chạy.

nh 2.2. System Global Area (SGA)
2.1.2. Oracle Database
Oracle Database dùng để lƣu trữ và cung cấp thông tin cho ngƣời dùng.
Việc quản lý dữ liệu trong Oracle Database thông qua cấu trúc lƣu trữ logic và
vật lý. Cấu trúc lƣu trữ logic là những thành phần đặc trƣng của Oracle Server,
cấu trúc vật lý là những tập tin hệ thống tồn tại trong hệ điều hành, nơi Oracle
Server đang chạy.
Vai trò quan trọng nhất của Oracle Server là lƣu trữ và cung cấp thông tin
cho ngƣời dùng thông qua Oracle Database. Oracle Database quản lý thông tin
lƣu trữ thông qua hai thành phần lƣu trữ vật lý và logic. Thành phần lƣu trữ vật
lý là các tập tin. Thành phần lƣu trữ logic là các không gian bảng (table space).
14


Thành phần vật lý dùng để lƣu trữ dữ liệu trong Oracle Database là tập
hợp một số tập tin tồn tại trên máy tính cài đặt Oracle Server, các tập tin này sẽ
đƣợc sử dụng khi Oracle Database đang đƣợc mở. Dữ liệu trong Oracle
Database sẽ đƣợc tổ chức lƣu trữ và quản lý bởi ba loại tập tin sau:
- Data File
- Redo Log File
- Control File
 Data File
Mỗi một Oracle Database có 1 hay nhiều Data File, Data File dùng để
chứa tất cả dữ liệu của một Database. Những thành phần Logic của Database
nhƣ Table, Index đƣợc lƣu trữ vật lý trong các Data File của Database. Các đặc
điểm của Data File:

 Một Data File dùng để lƣu trữ dữ liệu của duy nhất một Database.
 Kích thƣớc của các Data File có thể tự động t ng để theo kích thƣớc của
Database.
 Một hay nhiều Data File tạo thành một đơn vị Logic của vùng nhớ trong
cơ sở trữ dữ liệu gọi là Tablespace, và một Data File chỉ quan hệ với duy
nhất một Tablespace mà thôi.
 Redo Log File
Mỗi một Oracle Database có 2 hay nhiều Redo Log File, tập hợp những
File này trong một CSDL đƣợc gọi là Redo Log của CSDL đó. Một Redo Log
tạo thành những Redo Entry, còn gọi là Redo Record. Chức n ng chính của
Redo Log là dùng để ghi lại những thông tin trong CSDL bị thay đổi.
Trong trƣờng hợp Database gặp sự cố trƣớc khi dữ liệu thay đổi đƣợc ghi
nhận chắc chắn xuống các Data File thì những thông tin trong Redo Log sẽ đƣợc
sử dụng trong việc phục hồi dữ liệu về trạng thái trƣớc khi dữ liệu thay đổi.
 Control File
Mỗi một Oracle Database có 1 Control File, dùng để chứa tất cả các thông
tin về cấu trúc vật lý của một Database nhƣ là: tên Database, nơi lƣu trữ của
Data File và Redo Log File, Time stamp tạo Database. Mỗi Control File chỉ
dùng cho một Database duy nhất.
Khi một Instance của Oracale Database đƣợc khởi động, Control File của
nó đƣợc sử dụng để xác định vị trí của các Data File và Redo Log File, các File
này phải đƣợc mở trong quá trình làm việc với Database.
15


Dữ liệu trong Oracle Database đƣợc tổ chức và quản lý dựa vào những
thành phần logic, là những thành phần hỗ trợ DBA và ngƣời dùng trong việc
lƣu trữ và sử dụng thông tin trên Oracle Server.
Về mặt logic, Oracle database bao gồm các tablespaces, schema, data
blocks, extents và segment. Mỗi database có thể phân chia về mặt logic thành

một hay nhiều datafiles của nó hoặc bằng kích thƣớc của các tablespaces của nó.
 Tablespace
Một Database đƣợc chia thành nhiều đơn vị lƣu trữ ở mức Logic, những
đơn vị lƣu trữ đó gọi là Tablespace. Các đặc điểm của Tablespace:
- Tablespace chỉ thuộc về một Database duy nhất.
- Một Tablespace bao gồm một hay nhiều tập tin vật lý dùng để lƣu trữ dữ
liệu, đó là Data File.
Trong Oracle Database luôn có một Tablespace do Oracle tạo ra trong quá
trình tạo Database có tên là SYSTEM. Đây là vùng nhớ quan trọng của
Database, dùng để lƣu trữ tất cả những thông tin về Database nhƣ định nghĩa cấu
trúc của các đối tƣợng, thông tin cấp phát và sử dụng vùng nhớ của các đối
tƣợng, .... Tablespace đƣợc tạo nên bởi sự kết hợp của một hay nhiều đơn vị lƣu
trữ Logic gọi là Segment, một Segment đƣợc chia thành nhiều Extent và trong
Extent thì có nhiều Data Block liên tục nhau.
 Data Block
Là đơn vị lƣu trữ Logic nhỏ nhất đƣợc Oracle sử dụng trong việc đọc và
ghi dữ liệu trong Oracle Database.
Kích thƣớc của Data Block sẽ đƣợc xác định thông qua tham số
DB_BLOCK_SIZE.
Data Block trong Oracle Database gồm có 3 vùng chính là: Header, Data
và Free Space.
Header là vùng chứa thông tin chung của Block, nhƣ là địa chỉ của Block
và loại Segment chứa Block là Data, Index, Rollback hay Temporary.
Vùng Data dùng lƣu trữ dữ liệu của các dòng trong bảng. Các dòng của
một bảng dữ liệu có thể nằm trên nhiều Block khác nhau.
Free Space là vùng nhớ nằm giữa Header và Data, vùng nhớ này giúp
kích thƣớc của Header và Data có thể t ng lên khi cần, trong trƣờng hợp thêm
hay sửa dữ liệu của bảng.
 Extent
16



Tập hợp nhiều Data Block liên tiếp nhau sẽ tạo thành một đơn vị lƣu trữ
Logic lớn hơn gọi là Extent. Số lƣợng Data Block của một Extent tùy thuộc vào
kích thƣớc đƣợc chỉ định cho Extent khi tạo đối tƣợng Table.
Khi ngƣời dùng tạo một Table thì Oracle sẽ tự động cấp phát cho Table
một Data Segment, trong Data Segment sẽ có một Extent với số lƣợng Data
Block tùy thuộc vào kích thƣớc của Extent. Nếu không gian lƣu trữ trong các
Data Block của một Extent trong Segment bị đầy thì Oracle sẽ tự động cấp phát
thêm một Extent cho Segment. Kích thƣớc của Extent mới cấp phát có thể lớn
hơn hay bằng kích thƣớc của Extent ban đầu.
Số Extent đƣợc cấp phát cho một Segment có thể đƣợc xác định thông
qua các tham số khi tạo Table, nhƣ là MINEXTENT, MAXEXTENT.
 Segment
Segment là tập hợp một số Extent dùng để chứa toàn bộ thông tin của cấu
trúc lƣu trữ Logic bên trong Tablespace, nhƣ là Table. Oracle Database sử dụng
4 loại Segment khác nhau để lƣu trữ thông tin:
- Data Segment.
- Index Segment.
- Temporary Segment.
- Rollback Segment.
Những Segment này sẽ đƣợc cấp phát cho những đối tƣợng ở những thời
điểm khác nhau. Ví dụ Data Segment sẽ đƣợc cấp phát cho Table khi thực hiện
câu lệnh tạo Table, còn Temporary Segment đƣợc cấp phát khi thực hiện các câu
lệnh SQL hay câu lệnh tạo bảng tạm.
2.2. Tấn công Rootkit trong Oracle
2.2.1. Tìm hiểu 1 số data dictionary view
 DBA_JOBS
View dba jobs lƣu thông tin về tất cả jobs trong database. Thông tin về
các cột trong view này:

Column

Comments

Job

Xác định một job. Không thay đổi nó dù thực hiện import hay
export nhiều lần

Log_user

Khi user xác nhận job thì sẽ đƣợc ghi lại

Priv_user

User có quyền mặc định đƣợc áp dụng cho job này
17


Schema_user

Schema mặc định đƣợc gán cho job khi thực thi

Last_date

Thời điểm gần nhất mà job đƣợc thực hiện thành cng

Last_sec

Tƣơng tự nhƣ last date


This_date

Thời điểm mà job đƣợc bắt đầu thực hiện là null nếu ko thực
thi)

This_sec

Tƣơng tự this_date. Thời điểm lần thực thi cuối cùng đƣợc bắt
đầu

Next_date

Thời điểm kế tiếp mà job sẽ đƣợc thực hiện

Next_sec

Tƣơng tự next_date. Thời điểm đƣợc thực hiện kế tiếp

Total_time

Tổng thời gian sử dụng hệ thống của job, tính theo giây

Brocken

Nếu là Y, nghĩa là không có một cố gắng chạy job này.
Nếu là N có một cố gắng để chạy job

Interval


Lập lịch chạy job lần tiếp thep

Failures

Số lần khởi động job và không thành công kể từ lần thành
công gần nhất

What

Body của block anonymous PL/SQL mà job này thực hiện

Nls_env

Tham số phiên mô tả biến môi trƣờng nls của job

Misc_env

Tham số phiên khác áp dụng cho job

instance

ID của instance chạy hoặc có thể chạy job. Mặc định là 0
Bảng 2.1. View dba_jobs

 DBA_JOB_RUNNING
View Dba_job_running liệt kê thông tin về tất cả job đang chạy
Column_name

Comments


Failures

Số lần job đƣợc khởi hoạt và thất bại kể từ lần thành công sau
cùng

instance

ID của instance chạy job

Job

ID của job đang chạy

Last_date

Ngày gần nhất mà job chạy thành công

Last_sec

Tƣơng tự nhƣ last date,đó là lần thực hiện thành công gần
nhất

SID

ID của tiến trình đang thực hiện job

This_date

Ngày mà job bắt đầu thực hiện thƣờng là null nếu không đang
18



thực hiện)
This_sec

Giống nhƣ this date. Đó là lần thực hiện thành công cuối cùng
Bảng 2.2. View dba_jobs_running

 VSPROCESS
Lƣu thông tin về các process hiện tại đang chạy
Mô tả

Cột
addr

Địa chỉ của process

Pid

Định danh của process

Spid

Định danh trên OS của process

Username

Process đƣợc chạy bằng tài khoản OS nào

Trace ID


Định danh file trace

Background

Nhận diện process có phải tiến trình background không

Latchwait

Địa chỉ của Latch mà process đang đợi

Latchspin

Địa chỉ của latch mà process đang spinning trên

Pga_used_mem Vùng nhớ PGA mà process sử dụng
Pga_alloc_mem Vùng nhớ PGA hiện thời đƣợc cấp phát cho process
Bảng 2.3. V$Process
 V$Session
V$sesion liệt kê các thông tin về mỗi session hiện tại. rootkit cần tìm cách
che giấu thông tin về các process ở trong các view này. Một số thông tin trong
view v$sesion:
Column

Nội dung

Saddr

Địa chỉ session


sid

Định danh session

Sarial#

Số serial của session. Dùng để xác định duy nhất một object
của session đảm bảo rằng các câu lệnh đƣợc thực thi đúng đối
19


tƣợng khi session kết thúc và một session khác dùng ID lại
định danh của session
Paddr

Địa chỉ của process sở hữu session,

Event

Tài nguyên hoặc sự kiện mà session đang đợi

Status

Trạng thái của session active, inactive, killed, catched…

Logon_time

Thời gian logon

Username


Tên user

Command

Các lệnh đang xử lý

Type

Kiểu session
Bảng 2.4. V$Session

2.2.2. Khai thác các PL/SQL Package
Package là một schema object nhóm các kiểu, biến và chƣơng trình
PL/SQL có liên quan. Package thƣờng có 2 phần: phần đặc tả là phần giao tiếp
của package. Nó khai báo các kiểu, các biến, hằng, ngoại lệ, con trỏ và các
chƣơng trình con mà bên ngoài có thể tham chiều tới. phần body định nghĩa các
truy vẫn cho con trỏ và mã cho các chƣơng trình con các procedure,
function… . Phần spec đƣợc coi là phần hộp trắng, phần body là hộp đen. Có
thể debug,thay đổi phần body mà không ảnh hƣởng tới phần spec.
Để tạo package spec, dùng lệnh: Create package. Lệnh Create package
body định nghĩa phần body. Phần spec sẽ đƣợc public với tất cả các procedure
và code khác bên ngoài pack. Phần body chứa các thực thi và các khai báo riêng,
không đƣợc hiển thị đối với bên ngoài.
 Package DBMS_METADATA
Để thay đổi thông tin mà các view đƣa ra, attacker cần phải tác động tới
mã nguồn mã tạo ra các view, table. Trong các function, procedure đƣợc viết
để thực hiện ý đồ của mình, attacker sẽ cần phải lấy mã nguồn của cá view, table
cần thay đổi sau đó thêm vào phần mã của mình và thực hiện tạo lại view, table.
Attacker có thể sử dụng package dbms_metadata của Oracle để lấy mã nguồn

DDL này.
20


Thực tế Oracle đƣa ra package dbms metadata nhằm làm đơn giản hóa
một số công việc trong database mà cần phải trích extract thông tin về các
table, index từ Oracle và chueyenr chúng sang hệ thống khác. Việc trích DDL
của các schema object từ dictionary sẽ rất hữu ích khi phải chuyển sang hệ thống
mới và muốn có lại cá object đó trong tablespace miows. Oracle cung cấp
package dbms metadata giúp các nhà phát triển dễ dàng lấy các metadata về các
object từ data dictionary và đƣa ra dƣới dạng XMI hoặc DDL. Sau đó load XMI
hoặc chạy DDL để tạo lại object. Dbms_metadata sử dụng một số object và table
đƣợc định nghĩa trong schema SYS. Thƣờng gặp nhất là ku$ parsed item và
ku$_ddl.
Trong dbms_metadata những user thông thƣờng chỉ có thể xem metadata
các object mà họ sở hữu, các object họ đƣợc gán quyền, các object đƣợc public.
SYS và user có quyền Select catalog role xem đƣợc metadata của tất cả các
object trong database. Trong các procedure, function và các package định nghĩa
quyền, các role nhƣ select cattalog role không đƣợc kích hoạt. Vì thế các
chƣơng trình PL/SQL chỉ có thể lấy metadata cho các object ở trong schema của
chính nó. Package dbms metadata định nghĩa trong schema SYS các object và
table nhƣ sau:
Các column

Table
Sys.ku$_parsed_item

Item, values, object_row

Sys.ku$_ddl


ddlText,parsedItem

Sys-ku$_Errorline

errorNumber, errorText

Sys.kus_submitresult

Ddl, errorlines
Bảng 2.5. dbms_metadata

Sử dụng các chƣơng trình con trong dbms metadata để lấy DDL của các
object hoặc đ ng ký dạng XML của các object với database.
Subprogram
Add_transform
function

Nội dung
Xác định 1 transform mà fetch xxx áp dụng đối với dạng
thể hiện XML của object

21


Fetch_xxx

Trả về metadata cho object thỏa mãn các tiêu chuẩn thiết
lập bởi open, set_filter, set_count, add_transform


Get_query

Trả về dạng text của query mà fetch xxx sử dụng

Get_xxx

Lấy về metadata cho một object cụ thể

Open

Chỉ ra kiểu của object cần lấy, phiên bản metadata của nó

Set_count

Thiết lập số object đƣợc lấy trong một lời gọi fetch_xxx

Set_parse_item

Xác định một thuộc tính object đƣợc phân tích

Set_filter

Đặt các tiêu chuẩn để tìm hiểu object ví dụ tên hay
schema

put

Gửi dạng XML cho database
Bảng 2.6. Dạng XML của các object
Ví dụ để lấy metadata dạng XML của Scottemp:

Set long 2000000
Set pagesize 0
Select dbms_metadata.get_xml „table‟,‟scott‟
From dual;

 Package DBMS_OUTPUT
Dbms output package cho phép gửi message từ pl/sql. Thƣờng dùng nhất
là kích hoạt package dbms output và hiển thị nội dung của message buffer.
Trong sql*plus điều này có thể thực hiện bằng lệnh: „ Set serveroutput on‟ hoặc
“Setserverout on”. Dbms output package thƣờng đƣợc dùng trong việc debug.
Procedure put và put line cho phép đặt thông tin vào buffer để bất kỳ trigger,
procedure, package nào cũng có thể đọc đƣợc. hiển thị thông tin ở vùng buffer
bằng cách gọi procedure get line và get lines.
Package dbms output đƣợc chạy bằng scrip dbmsscrip.sql bởi user
Sys.Package này đƣợc gán Excute cho tất cả user(public)
Subprogram
Dbms_output.enable

Nội dung
Enable các chƣơng trình con Put, put line, get line,
22


get lines và new line
Dbms_output.new_line

Thêm một end-of-line vào buffer

Dbms_output.get_line(s)


Lấy một hoặc nhiều dòng từ buffer

Dbms_output.put

Chuyển tham số đƣợc gọi vào buffer

Dbms_output.put_line

Thêm một end-of-line vào buffer
Bảng 2.7. dbms_output

 Package DBMS_JOB
Dbms_job cung cấp một job cho nhiều instance. Mặc định job có thể chạy
trên bất kỳ một instance nào, nhƣng chỉ có một instance sẽ chạy nó. Không yêu
cầu phải có system privilege nào để có thể sử dụng dbms job. Và cũng không có
system privilege nào quản lý dbms job. Các job không thể bị sửa đổi hay xóa
ngoài job sở hữu bởi user đó. Một khi job đƣợc start và chạy sẽ không dễ ngừng
job lại.
Subprogram

Nội dung

Broken

Chặn thực hiện job

Change

Chỉnh sửa tham số ngƣời dùng định nghĩa liên quan tới job


Instance

Gán một job cho một instance chạy

Next_date

Lần thực hiện job tiếp theo

Remote

Xóa một job khỏi hàng đợi job

Run

Thực hiện chạy job

Submit

Đƣa một job vào hàng đợi job

what

Thay đổi đặc tả của một job
Bảng 2.8. dbms_jobs

 Package DBMS_SQL
Package dbms sql cho phép truy nhập tới dynamic SQL và dynamic
PL/SQL từ ben trong chƣơng trình PL/SQL. Dynamic có nghĩa là các câu lệnh
SQL trong package sử dụng những tham số chƣa đƣợc trong chƣơng trình.
Chugns là các chuỗi ký tự đƣợc xây dựng tại thời điểm chạy và sau đó đƣợc đƣa

23


vào SQL engine để thực hiện. package dbms sql cho phép thực hiện những hành
động là không thể trong chƣơng trình PL/SQL bao gồm:
- Executre câu lệnh ddl: câu lệnh ddl nhƣ drop table hay create index là
không đƣợc phép trong native PL/SQL.
- Tạo một ad-hoc query interface: với dbms không cần phải nhọn nhằn
gõ các câu lệnh select cho một truy vẫn hay con trỏ. Bạn có thể cho
user xác định các thứ tự sắp xếp, các điều kiện và bất kỳ trƣờng hợp
nào của các câu lệnh select.
- Execute dynamic các chƣơng trình PL/SQL đã đƣợc tạo: trong table,
chúng ta lƣu tên của procedure thực hiện cho phép tính toán nào đó.
Sau đó dùng một front-end cho table đó, để user lực chọn chức n ng
phù hợp đƣa giá trị đầu vào và thực thi thay vì phải thêm vào hàng và
tƣơng tác với khá nhiều giao diện
Với sức mạnh sự ảnh hƣởng và linh hoạt của dynamic SQL thông thƣờng
chỉ nên gán quyền Execute cho những user mà cần thực hiện dynamic SQL. Để
che giấu dbms_sql thực hiện lệnh bằng tài khoản sys:
- Revoke execute on dbms_sql from public;
- Để gán quyền execute cho user nào đó, thực hiện :
- Grant execute on dbms_sql to User_name;
Khi thực hiện một chƣơng trình dbms sql từ một anonymous block,
chƣơng trình đó đƣợc thực hiện với quyền của schema hiện tại. Nếu những
chƣơng trình dbms SQL sẽ thực hiện sử dụng quyền của ngƣời sở hữu chƣơng
trình đó. Dbms sql còn đƣợc gọi là package „run as user‟ hơn là „run as owner‟.
Miêu tả

Name
Close(open)_curror


Đóng mở) con trỏ

Column_value

Lấy giá trị từ con trỏ vào biến cục bộ

Execute

Thực thi con trỏ

Fetch_rows

Nhập giá trị row từ con trỏ

Is_open

Trả về giá trị true true nếu con trỏ đang mở

Last_row_count

Trả về tổng số row đƣợc fetch từ con trỏ
24


Last_SQL_function_code

Trả về function code cho câu lệnh SQL

Define_column


Xác định một column đƣợc chọn từ một con trỏ cụ
thể

Parse

Phân tích cú pháp câu lệnh SQL nếu đó là DDL thủ
tục phân tích sẽ thực thi luôn câu lệnh

Variale_value

Lấy giá trị một biến trong con trỏ
Bảng 2.9. dbms_sql

Dbms_sql thực sự là một package mạnh nhƣng nó cũng là một package
khá phức tạp để sử dụng. thông thƣờng chúng ta có thể tạo và thực hiện vào các
câu lệnh SQL. Nhƣng việc tạo nhƣ vậy khá là thủ công và vất vả, phải xác định
tất cả các câu lệnh SQL. Nhƣng việc tạo nhƣ vậy khá thủ công và vất vả, phải
xác định tất cả các câu lệnh SQL, với các lời gọi thủ tục, các kiểu, biến…
Quá trình xử lý của Dynamic SQL
-

Mở vùng nhớ: trƣớc khi thực hiện bất kỳ sql dynamic nào phải có một con
trỏ tới cùng nhớ mà sql dynamic sẽ đƣợc quản lý. Khi mở vùng nhớ,
Rdbms trả về một integer gán với con trỏ. Chúng ta sẽ sử dụng giá trị này
trong các lời gọi sau đó tới các chƣơng trình dbms sql để thực hiện câu
lệnh dynamic này. Có thể sử dụng một con trỏ để thực hiện nhiều câu lệnh
SQL. Nội dung của vùng lƣu dữ liệu sẽ đƣợc rết nếu một câu lệnh mới
đƣợc phân tích vì thế không phải close và open lại con trỏ.


-

Phân tích câu lệnh: sau khi đã xác định con trỏ tới vùng nhớ, để liên kết
nó với câu lệnh sql cần phải phân tích parse câu lệnh bằng lời gọi tới thủ
tục parse. Nó xác định các câu lệnh này có đúng cấu trúc không và liên
kết các câu lệnh với con trỏ. Lƣu ý khi phân tích một câu lệnh DDL, nó
cũng ngay tức khắc đƣợc thực thi và rdbms cũng thực hiện một lệnh
commit ngầm định.
Ràng buộc tất cả giá trị host: câu lệnh mà chúng ta thực hiện ở dạng chuỗi
tại thời điểm chạy. Khi sử dụng dynamic sql, tại thời điểm compile chúng
ta chƣa biết giá trị vì thế phải chuyển qua giá trị vào câu lệnh sql tai thời
điểm chạy. Có 2 cách để thực hiện: móc nối concatenation và ràng
buộc(binding). Với móc nối, chuyển tất các thành phần tròn câu lệnh sql

-

25


Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×