Tải bản đầy đủ (.docx) (69 trang)

TẤN CÔNG ROOTKIT TRONG ORACLE 10G

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.11 MB, 69 trang )

HỌC VIỆN KỸ THUẬT MẬT MÃ
KHOA AN TOÀN THÔNG TIN

BÁO CÁO BÀI TẬP LỚN

TẤN CÔNG ROOTKIT TRONG ORACLE
10G.

Giảng viên hướng dẫn: Nguyễn Thị Hồng Hà

HÀ NỘI, 11/2016

1


2


MỤC LỤC

3


ST
T
1
2
3
4
5
6


7
8
9
10
11
12
13
14
15
16

CÁC THUẬT NGỮ VÀ VIẾT TẮT
Các thuật ngữ
Ý nghĩa
ADA
API
CKPT
DBA
DBWn
HĐH
OS
SGA
LGWr
SMON
PMON
Package
SYS
SQL
PL/SQL
View


Ngôn ngữ lập trình
Giao diện lập trình
Checkpoint process
Quyền trong Oracle
Database write
Hệ điều hành
Hệ điều hành
System Global Area
Log write
System Monitor
Process Monitor
Chứa các procedure,function
System
Ngôn ngữ truy vấn
Ngôn ngữ truy vấn có thủ tục
Bảng chứa siêu dữ liệu.

4


DANH MỤC CÁC BẢNG

5


DANH MỤC CÁC HÌNH VẼ

6



LỜI NÓI ĐẦU
Rootkit trong OS không còn xa lạ với chúng ta. Chúng đã được các
kẻ xâm nhập sử dụng để che giấu các dấu vết từ rất lâu. Tuy nhiên, không
phải ai cũng biết rằng rootkit còn có thể được sử dụng và đang được các
tin tặc sử dụng trong cơ sở dữ liệu vì trong cơ sở dữ liệu thường chứa các
dữ liệu quan trọng của các công ty, tổ chức.
Theo ước tính, khoảng 100 triệu người có thông tin cá nhân nằm
trong tầm kiểm soát của tội phạm Internet. Lấy cắp thông tin đã trở thành
một nguy cơ chính, thông tin đã trở thành mỏ vàng cho tội phạm. Thông
tin cá nhân được chia thành nhiều loại với mức giá khác nhau. Ví dụ,
thông tin về địa chỉ, số điện thoại, ngày sinh, số dịch vụ xã hội, số đăng
ký bằng lái…đều được đặt giá. Rất nhiều cơ sở dữ liệu của các công ty
lớn bị xâm phạm. Nhất là các ngân hàng, nhà băng, dịch vụ thẻ thanh toán
như CardSystems, Citigroup, Bank of America, DSW Shoe Warehouse…
đều đã bị tội phạm nhòm ngó và gây ra thiệt hại nhất định.
Oracle là hãng dẫn đầu trong thị trường cơ sở dữ liệu và thường được
sử dụng ở các cơ quan, tổ chức lớn. Với khối lượng dữ liệu lớn và quan
trọng. Không nghi ngờ gì, Oracle đã trở thành đích ngắm hấp dẫn trong
các cuộc tấn công.
Oracle database rootkit là hướng tấn công khá mới. 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 tin tặc trong cơ sở dữ liệu. Người quản trị sẽ khó lòng biết
được cơ sở dữ liệu của mình có đang bị nhìn ngó hay bị tấn công hay
không, dù có sử dụng các công cụ tìm kiếm rootkit. Và vì thế không có
biện pháp cải thiện hay áp dụng phương pháp tự bảo vệ, qua một thời gian
dài thiệt hại sẽ rất đáng kể. Khi mà cơ sở dữ liệu là một tài nguyên vô
cùng quan trọng có ý nghĩa sống còn đối với doanh nghiệp, tổ chức.
Các tin tặc thường lợi dụng các lỗ hổng bảo mật, sử dụng Virus, Trojan ...

để 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 các tin tặc 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
7


nhanh chóng và ngày một tinh vi, những năm gần đây Rootkit đã được xếp vào
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.
Nội dung đề tài gồm ba chương:
Chương 1. Tổng quan về Rootkit. Giới thiệu chung về mã độc, Rootkit,
cách thức hoạt động và phân loại Rootkit.
Chương 2. Tấn công Rootkit trong Oracle .Giới thiệu về hệ quản trị
Oracle, tấn công Rootkit trong Oracle
Chương 3. Phát hiện và phòng tránh Rootkit. Các phương phápphát hiện
và phòng chống Rootkit.
Nhóm em xin chân thành cảm ơn cô Nguyễn Thị Hồng Hà đã tận tình chỉ
bảo và giúp đỡ nhóm em hoàn thành đề tài này. Do thời gian có hạn nên đề tài
nghiên cứu của nhóm em vẫn còn nhiều thiếu sót. Nhóm em mong nhận được sự
đóng góp ý và chỉ bảo của thầy cô.

Nhóm em xin chân thành cảm ơn!.
Hà Nội, tháng 11/2016

8


CHƯƠNG 1. TỔNG QUAN VỀ ROOTKIT
1.1.Giới thiệu chung về mã độc hại
Mã độc hại (Malware) viết tắt của malicious software. Mã độc là một loại
phần mềm hệ thống do các tay tin tặc hay các kẻ nghịch ngợm tạo ra nhằm mục
đích truy cập, chỉnh sửa và phá hại các phần mềm khác trên máy tính. Mã độc
gồm nhiều loại: Virus, Spyware, Trojan/Backdoor, Adware, Worm,.... và các
biến thể khác xuất hiện từng ngày.
Mục tiêu của mã độc 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 các 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
mã độc 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, mã độc 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ị hacking sang trang mà malware chỉ định. Điều này có
thể đưa đến nhiều phiền toái với các pop up liên tục xảy ra, và tệ hơn nữa 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.
Mục tiêu thứ ba, là thông tin cá nhân. 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 dùng mật khẩu, tin tặc 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, ví dụ 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 người dùng. Cuối cùng, tin tặc 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 nhằm che giấu hành tung của mình. Để thực hiện được các

mục đích này, mã độc sẽ thực hiện dễ dàng hơn nếu có sự trợ giúp của rootkit.
Vì thế các mã độc đầ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 mã độc. Thực tế, rootkit là xấu hay tốt là do mục đích nó
được sử dụng.
1.2.Giới thiệu chung về Rootkit
1.2.1. Lịch sử Rootkit
Kỹ thuật Rootkit thực ra không phải là mới. Nó đã tồn tại gần mười mấy
năm. Đầu tiên được phát triển trên hệ điều hành Unix-like (Solaris và Linux) và
sau đó là trên Windows. Rootkit đầu tiên được công khai dựa trên Windows là
vào năm 1999 bởi Greg Hoglund- một chuyên gia về bảo mật và người lập trình
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 hợ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ố) với Mark
Rusonovich 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 một hiểm họa cận kề. Sự kiện Sony
9


Rootkit xảy ra ngày 31/10/2005 đã đưa ra rootkit thành trung tâm chú ý. Nó
cũng chứng tỏ, hãng đã nghiên cứa và phát triển kỹ thuật rootkit quy củ. Sau sự
kiện này, Sony đã phải tiến hành gỡ bỏ rootkit trên đĩ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, khó 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 ra mã độc 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
tin tặc máy tính đã tìm ra cách mới là hiệu quả để tấn công. Các chương trình
che giấu rootkit cho thấy một nguy cơ cận kề về an ninh. 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 trong số các 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. Định nghĩa
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 là kẻ xâm nhập dùng sau khi chiếm
được quyền truy nhậ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.
Nói cách khác, rootkit là một tập các chương trình và đoạn mã cho phép tồn tại
một cách bền vững, lâu dài và gần như không thể phát hiện trên máy vi tính.
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”.
Rootkit cũng được cho là gần nghĩa với “undetectable” (không thể phát
hiện). Hầu hết các công nghệ và kỹ thuật mà rootkit sử dụng đều được thiết kế
để ẩn mã chương trình và dữ liệu trên hệ thống. Phần lớn các rootkit có thể ẩn
được các tệp tin, các thư mục, khối bộ nhớ, ngoài ra, rootkit cũng có tính năng
như cho phép truy cập điều khiển từ xa, keyloger và thực hiện bắt cóc gói tin
trong mạng. Khi các công nghệ này kết hợp lại thì rootkit trở nên gần như không
thể phát hiện được. Rootkit không mang nghĩa xấu, và không phải thường được
sử dụng để lấy trộm thông tin cá nhân
Thuật ngữ “rootkit” lúc đầu được dùng đề chỉ một bộ công cụ Unix được
biên dịch lại như “ps”,”netstat”,”w” and ”passwd” có thể che giấu kỹ lưỡng vết
tích của kẻ xâm nhập mà bình thường sẽ bị hiển thị bởi các lệnh trên. Vì vậy nó
cho phép kẻ xâm nhập duy trì quyền “root” trên hệ thống mà ngay cả người
quản trị hệ thống cũng không thể thấy họ.
Ngày nay thuật ngữ này không chỉ giới hạn ở các hệ điều hành dựa trên
Unix mà còn được dùng để chỉ các công cụ thực hiện tác vụ tương tự trên hệ
điều hành không Unix như Microsoft Windows (ngay cả khi hệ điều hành đó

không có tài khoản “root”).
10


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 người dùng hay một chương trình nào cần 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 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ả chế độ nhân
hệ điều hành và chế độ người dùng, rootkit đều sử dụng kỹ thuật hooking để lọc
các kết quả trả về bởi hệ điều hành và giấu đi sự tồn tại của nó. 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 bảng để lưu trữ và ghi dấu các thông tin quan trọng. Các
bảng này có thể bị hook, thay đổi và bẻ gẫy bởi rootkit.
Rookit ở chế độ người dùng và chế độ nhân đề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. Rootkit ở chế độ người dùng chỉ có thể hook các bảng trong phạm vi
không gian địa chỉ dành cho người dùng (các bảng IAT, EAT) hoặc có thể chèn
các jump vào API mức user để thay các lời gọi hệ thống sang hàm của roorkit.
Có hai kiểu hook là hook đặc quyền và hook không đặc quyền. Rootkit ở
chế độ người dùng là hook không đặc quyền còn rootkit ở chế độ nhân là hook
đặc quyền. Ở 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 và thay đổi địa chỉ API: rootkit ở chế
độ người dùng sẽ chặn các lời gọi hàm API và thay đổi địa chỉ API trong IAT
(Import Address Table) thuộc tiến trình của người dùng, sau đó trỏ tới hàm
rootkit thay vì Windows API trong hàm IAT. Cả Rootkit ở chế độ người dùng
và chế độ nhân đều 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ó.
Rootkit ở chế độ người dùng chỉ cho thể chỉnh sửa bảng nào thuộc về chương
trình người dùng. Mỗi chương trình người dùng có IAT riêng chứa thông tin về
các hàm mà nhân sẽ thực hiện cho nó. Để hiệu quả, rootkit ở chế độ người dùng
phải tìm cách để thay đổi bảng của mọi chương trình người dùng và điều khiển
bất kỳ chương trình nào sắp sửa chạy để có 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 tiến trình hoặc API mà dùng bởi Windows Explorer để liệt kê danh
sách các tài liệu. 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 rootkit ở chế độ nhân.
11


Rootkit ở chế độ nhân chỉ cần hook một cấu trúc mà tất cả chương trình người
dùng sử dụng
1.4.

Phân loại Rootkit
Rootkit được phân loại dựa trên sự duy trì sau khi khởi động lại hoặc hoạt
động ở chế độ người dùng hay ở chế độ cấp hệ thống.
1.4.1. Rootkit ở chế độ người dùng và Rootkit ở chế độ nhân hệ điều hành
Rootkit ở chế độ người dùng: Những rootkit này sẽ sửa (chỉnh) các tiến trình
đang chạy trong bộ nhớ và qua đó nhận được những thông tin cần thiết. Rootkit
ở chế độ người dùng sử dụng nhiều phương pháp khác nhau để lẩn trốn không bị

phát hiện.
Ví dụ: rootkit ở chế độ người dùng sẽ chặn tất cả các hàm gọi hệ thống như:
FindFirstFile/FindNextFile hay như để Task Manager của Windows có thể hiện
ra danh sách các tiến trình đang chạy, nó sẽ gọi một hàm Windows API
(EnumProcesses) và nhận về danh sách các ID tiến trình được lấy từ một cấu
trúc dữ liệu của nhân. Những hàm này còn được gọi bởi các chương trình quản
lý tập tin của Windows như Explorer để liệt kê toàn bộ các thư mục, tập tin hệ
thống. Khi một ứng dụng thực thi liệt kê danh sách thư mục và các tập tin có thể
chứa rootkit, các rootkit này sẽ chặn các hàm này và thay đổi các kết quả dữ liệu
đầu ra nhằm loại bỏ các tập tin chứa rootkit khỏi danh sách liệt kê.
Những rootkit ở chế độ người dùng phức tạp hơn sẽ chặn các tập tin hệ thống,
Registry, và các hàm liệt kê các tiến trình từ các hàm API hệ thống. Các kết nối
mạng có thể được giấu bằng những phương pháp tương tự nhau bằng cách thay
đổi kết quả của những lời gọi hàm tương ứng. Vì hầu hết các trình diệt virus và
chống phần mềm gián điệp đều dựa vào những lời gọi hàm này (như lời gọi hàm
tìm kiếm file để quét), khi đó những file được các rootkit che giấu sẽ trở nên vô
hình với những trình diệt virus này. Máy tính có thể vẫn bị lây nhiễm nhưng
trình diệt virus lại không thể phát hiện ra.
Rootkit ở chế độ nhân: Rootkit chế độ nhân nguy hiểm hơn các loại trên,
chúng không chỉ chặn các hàm API hệ thống mà còn có thể thao tác trực tiếp các
cấu trúc dữ liệu trong chế độ nhân. Các rootkit ở chế độ nhân thì cần phải có
thêm một số đoạn mã để có thể được nạp vào nhân (thường là một trình điều
khiển thiết bị hoặc một file .sys). Để đạt được mục đích này, chúng có thể theo
trình tự hợp lệ mà các trình điều khiển thiết bị mức thấp vẫn dùng (thông qua
trình quản lý điều khiển dịch vụ services.exe). Ngoài ra cũng còn một số phương
pháp bất thành văn khác để chèn mã vào kernel. Một khi đã vào được trong
HĐH, đoạn mã có thể chỉnh sửa các kết quả trả về từ lời gọi hàm bên trong lõi
hoặc chỉnh sửa chính các cấu trúc lõi HĐH. Một kĩ thuật chung cho việc ẩn nấp
các tiến trình mã độc là loại bỏ các tiến trình này ra khỏi danh sách các tiến trình
ở chế độ nhân. Bởi vì các hàm API quản lý các tiến trình đều phải phụ thuộc vào

nội dung trong các cấu trúc dữ liệu này, nên khi rootkit thay đổi nội dung cấu
12


trúc dữ liệu hệ thống thì các công cụ như Task Manager hoặc Process Explorer
cũng không thể phát hiện được.
Một ví dụ: Rootkits copy một bản sao của chúng với tên malware.exe và
spy.dll cũng như một phần của chúng vào một thư mục. Sau đó chúng sẽ chỉnh,
sửa lại nhân để những thành phần chúng vừa copy không bị phát hiện nữa (cả
với windows-explorer lẫn một chương trình filemanager bất kỳ. Chúng hoàn
toàn “tàng hình” và dưới cái lốt đó chúng có thể làm bất cứ một điều gì đó có
hại đến hệ thống của bạn.
1.4.2. Rootkit bền bỉ và Rootkit dựa trên bộ nhớ
Rootkit bền bỉ: là một loại rootkit kết hợp với các mã độc khác hoạt động mỗi
khi hệ thống khởi động. Bởi vì các mã độc chứa mã phá hoại sẽ được thực thi tự
động mỗi khi hệ thống khởi động hoặc khi người sử dụng đăng nhập vào hệ
thống. Chúng cần phải lưu trữ các đoạn mã thực thi chương trình trong Registry,
các tập tin hệ thống và các phương pháp cho phép âm thầm chạy các đoạn mã
mà người sử dụng không hay biết .
Rootkit dựa trên bộ nhớ: loại rootkit này chính là các mã độc không có
những đoạn mã "dai dẳng" - chỉ lưu trong bộ nhớ, chính vì thế loại rootkit này
không tồn tại sau khi khởi động lại máy.

13


CHƯƠNG 2. TẤN CÔNG ROOTKIT TRONG ORACLE
2.1. Giới thiệu về kiến trúc Oracle

Hình 1. Kiến trúc Oracle

Máy chủ Oracle là một hệ thống quản trị cơ sở dữ liệu đối tượngquan hệ cho phép quản lý thông tin một cách toàn diện. Máy chủ Oracle
bao gồm hai thành phần chính là thể hiện của Oracle và cơ sở dữ liệu
Oracle.

2.1.1. Thể hiện của Oracle
Thể hiện của Oracle bao gồm một cấu trúc bộ nhớ hệ thống vùng cục
bộ (SGA) và các tiến trình nền (background processes) được sử dụng để
quản trị cơ sở dữ liệu. Thể hiện của Oracle được xác định qua tham số
môi trường ORACLE_SID của hệ điều hành.

14


Hình 2. Kiến trúc vùng nhớ SGA

SGA là vùng bộ nhớ chia sẻ được sử dụng để lưu trữ dữ liệu và các
thông tin điều khiển của máy chủ Oracle. SGA bao gồm một vài cấu trúc
bộ nhớ chính. Shared pool: là một phần trong SGA và được sử dụng khi
thực hiện phân tích câu lệnh (parse phase). Tham số xác định:
SHARED_POOL_SIZE. Các thành phần của Shared pool gồm có: Library
cache và Data dictionary cache.

Hình 3. Kiến trúc Database buffer cache
Bộ đệm ẩn cơ sở dữ liệu ( Database buffer cache ) : Khi thực hiện
một truy vấn, tiến trình máy chủ sẽ tìm các khối cần thiết trong vùng nhớ
đệm dữ liệu. Nếu không tìm thấy khối trong bộ đệm ẩn cơ sở dữ liệu, tiến
trình máy chủ mới đọc các khối từ file dữ liệu và tạo luôn một bản sao
của khối đó vào trong vùng nhớ đệm. Như vậy, với các lần truy xuất tới
khối đó sau này sẽ không cần thiết phải truy xuất vào file dữ liệu
nữa.Tương tự như kích thước của các khối dữ liệu được xác định bởi tham

15


số DB_BLOCK_SIZE, kích thước của vùng đệm trong vùng nhớ đệm
cũng được xác định bởi tham số DB_BLOCK_BUFFERS.

Hình 4. Kiến trúc Redo log buffer

Redo log buffer (Bộ đệm phục hồi): Được sử dụng cho việc dò tìm
lại các thay đổi trong cơ sở dữ liệu và được thực hiện bởi các tiến trình
nền. Kích thước được xác định bởi tham số LOG_BUFFER. Nó lưu trữ
các bản ghi hồi phục mỗi khi có thay đổi dữ liệu. Redo log buffer được sử
dụng một cách thường xuyên và các thay đổi bởi một giao dịch có thể
nằm đan xen với các thay đổi của các giao dịch khác. Bộ đệm được tổ
chức theo kiểu bộ đệm nối vòng tức là dữ liệu thay đổi sẽ tiếp tục được
nạp lên đầu sau khi vùng đệm đã được sử dụng hết.
Các tiến trình nền thực hiện các chức năng thay cho lời gọi tiến trình
xử lý tương ứng. Nó điều khiển vào ra, cung cấp các cơ chế xử lý song
song nâng cao hiệu quả và độ tin cậy. Tùy theo từng cấu hình mà thể hiện
của Oracle có các tiến trình nền như:

Hình 5. Tiến trình DBWn
16


Ghi cơ sở dữ liệu (DBWn): Ghi lại các thay đổi trong bộ nhớ đệm dữ
liệu ra các file dữ liệu.
Ghi lại (LGWR): Ghi lại các thay đổi được đăng ký trong bộ đệm
làm lại vào các file làm lại. Ghi lại là một trong các tiến trình nền có trách
nhiệm quản lý bộ đệ làm lại để ghi lại các thông tin trong Redo log buffer

vào Redo log file.
Giám sát hệ thống (SMON): Tiến trình giám sát hệ thống thực hiện
phục hồi các sự cố ngay tại thời điểm thể hiện của oracle được khởi động,
nếu cần thiết. SMON cũng có trách nhiệm dọn dẹp các phân đoạn tạm
thời không còn được sử dụng nữa trong quản lý từ điển tablespaces.
SMON khôi phục lại các giao dịch bị chết mỗi khi xảy ra sự cố. SMON
đều đặn thực hiện kiểm tra và khắc phục các sự cố khi cần. Trong môi
trường Oracle Parallel Server, tiến trình giám sát hệ thống của một thể
hiện có thể thực hiện khôi phục thể hiện trong trường hợp thể hiện hay
CPU của máy tính đó gặp sự cố.
Giám sát tiến trình (PMON): Giám sát tiến trình thực hiện quá trình
phục hồi mỗi khi có một tiến trình người dùng gặp lỗi. PMON có trách
nhiệm dọn dẹp bộ đệm phục hồi cơ sở dữ liệu và giải phóng tài nguyên
mà tiến trình người dùng đó sử dụng. Ví dụ, nó thiết lập lại trạng thái của
các bảng đang thực hiện trong giao dịch, giải phóng các khóa trên bảng
này, và huỷ bỏ ID tiến trình của nó ra khỏi danh sách các tiến trình hoạt
động. PMON kiểm tra trạng thái của nơi gửi và các server processes, khởi
động lại mỗi khi xảy ra sự cố. PMON cũng còn thực hiện việc đăng ký
các thông tin về thể hiện của oracle và những tiến trình gửi đi với cổng
lắng nghe mạng. Tương tự như SMON, PMON được gọi đến mỗi khi xảy
ra sự cố trong hệ thống.
Tiến trình Checkpoint (CKPT): Cập nhật lại trạng thái của thông tin
trong kiểm soát file và file dữ liệu mỗi khi có thay đổi trong buffer cache.
Khi tất cả các dữ liệu trong database buffers đã bị thay đổi tính cho đến
thời điểm checkpointed sẽ được background process DBWRn ghi lên data
files. Tiến trình Checkpoint cập nhật phần các phần đầu của các file dữ
liệu và các file điều khiển.
2.1.2. Cơ sở dữ liệu Oracle
Cơ sở dữ liệu Oracle được xem xét dưới hai góc độ cấu trúc logic và
cấu trúc vật lý. Cơ sở dữ liệu Oracle được xác định bởi tên một tên duy

nhất và được quy định trong tham số DB_NAME của thông số. Về mặt
vật lý, cơ sở dữ liệu gồm các file điều khiển, redo log file và file dữ liệu.
Datafile: Mỗi một cơ sở dữ liệu Oracle đều có thể có một hay nhiều
datafiles. Các database datafiles chứa toàn bộ dữ liệu trong cơ sở dữ liệu.
17


Các dữ liệu thuộc cấu trúc logic của cơ sở dữ liệu như các bảng hay các
chỉ số đều được lưu trữ dưới dạng vật lý trong các file dữ liệu của cơ sở
dữ liệu.
- Redo log file: Mỗi cở sở dữ liệu Oracle đều có một tập hợp từ hai
redo log files trở lên. Các redo log files trong cơ sở dữ liệu thường được
gọi là database's redo log. Một redo log được tạo thành từ nhiều redo
entries. Chức năng chính của redo log là ghi lại tất cả các thay đổi đổi với
dữ liệu trong cơ sở dữ liệu. Redo log files được sử dụng để bảo vệ cơ sở
dữ liệu khỏi những hỏng hóc do sự cố. Oracle cho phép sử dụng cùng một
lúc nhiều redo log gọi là multiplexed redo log để cùng lưu trữ các bản sao
của redo log trên các ổ đĩa khác nhau. Các thông tin trong redo log file chỉ
được sử dụng để khôi phục lại cơ sở dữ liệu trong trường hợp hệ thống
gặp sự cố và không cho phép viết trực tiếp dữ liệu trong cơ sở dữ liệu lên
các file dữ liệu trong cơ sở dữ liệu.
-File điều khiển (Control file): Mỗi cơ sở dữ liệu Oracle đều có ít
nhất một file điều khiển.File điều khiển chứa các mục thông tin quy
định cấu trúc vật lý của cơ sở dữ liệu như:
+Tên của cơ sở dữ liệu.
+Tên và nơi lưu trữ các file dữ liệu hay redo log files.
+ Mốc thời gian tạo lập cơ sở dữ liệu.

Hình 6. Kiến trúc Database


Mỗi khi nào một thể hiện của cơ sở dữ liệu Oracle được mở, điều khiển
file của nó sẽ được sử dụng để xác định các file dữ liệu và các file redo log
đi kèm. Khi các thành phần vật lý cả cơ sở dữ liệu bị thay đổi, điều khiển
file sẽ được tự động thay đổi tương ứng bởi file điều khiển cũng được sử
dụng đến khi thực hiện khôi phục lại dữ liệu.
18


- Init file: Đây là file tham số khởi động. Có dạng file văn bản được
tạo bởi quá trình cài đặt hoặc do quản trị viên. Tùy thuộc vào hệ điều
hành, tên của file có thể là init <database sid>.ora. Oracle sử dụng nó để
thiết lập các giá trị khởi động cho các tham số khi khởi động cơ sở dữ
liệu. File init chứa các tham số về kích cỡ vùng nhớ SGA, cache, buffer,
tên cơ sở dữ liệu, một số thông tin về file điều khiển, file dữ liệu.
Về mặt logic, cơ sở dữ liệu Oracle bao gồm các tablespaces, schema,
data blocks, extents, và segments. Mỗi database có thể phân chia về mặt
logic thành một hay nhiều tablespace. Mỗi tablespace lại được tạo nên, về
mặt vật lý, bởi một hoặc nhiều datafiles. Kích thước của một tablespace
bằng tổng kích thước của các datafiles của nó hoặc bằng tổng kích thước
của các tablespaces của nó.
- Lược đồ (Schema) và lược đồ đối tượng (schema object): Schema là
tập hợp các đối tượng có trong database. Schema objects là các cấu trúc
logic cho phép tham chiếu trực tiếp tới dữ liệu trong cơ sở dữ liệu.
Schema objects bao gồm các cấu trúc như tables, views, sequences, stored
procedures, synonyms, indexes, clusters, và database links.
- Data Blocks, Extents, and Segments: Oracle điểu khiển không gian lưu
trữ trên đĩa cứng theo các cấu trúc logic bao gồm các data blocks, extents, và
segments. Oracle Data Blocks là mức phân cấp logic thấp nhất, các dữ liệu
của Oracle database được lưu trữ trong các khối dữ liệu. Một khối dữ liệu
tương ứng với một số lượng nhất định các bytes vật lý của cơ sở dữ liệu

trong không gian đĩa cứng. Kích thước của một khối dữ liệu được chỉ ra cho
mỗi cơ sở dữ liệu Oracle ngay khi cơ sở dữ liệu được tạo lập. Cơ sở dữ liệu
sử dụng, cấp phát và giải phóng vùng không gian lưu trữ thông qua các khối
dữ liệu Oracle. Extents là mức phân chia cao hơn về mặt logic các vùng
không gian trong cơ sở dữ liệu. Một extent bao gồm một số khối dữ liệu
liên tiếp nhau, cùng được lưu trữ tại một thiết bị lưu giữ. Extent được sử
dụng để lưu trữ các thông tin có cùng kiểu. Segments là mức phân chia cao
hơn nữa về mặt logic các vùng không gian trong cơ sở dữ liệu. Một segment
là một tập hợp các extents được cấp phát cho một cấu trúc logic. Segment có
thể được phân chia theo nhiều loại khác nhau.
- Data segment, mỗi một non-clustered table có một data segment. Các dữ
liệu trong một bảng được lưu trữ trong các extents thuộc data segment đó.
Với một partitioned table thì mỗi each partition lại tương ứng với một data
segment. Mỗi Cluster tương ứng với một data segment. Dữ liệu của tất cả
các table trong cluster đó đều được lưu trữ trong data segment thuộc Cluster
đó. Index segment, mỗi một index đều có một index segment lưu trữ các dữ
liệu của nó. Trong partitioned index thì mỗi partition cũng lại tương ứng với
một index segment.
- Rollback segment: một hoặc nhiều rollback segments của database được
19


tạo lập bởi người quản trị database để lưu trữ các dữ liệu trung gian phục vụ
cho việc khôi phục dữ liệu. Các thông tin trong Rollback segment được sử
dụng để tạo sự đồng nhất các thông tin đọc được từ cơ sở dữ liệu và sử dụng
trong quá trình khôi phục dữ liệu, phục hồi lại các giao dịch chưa commit đối
với mỗi user.
- Temporary segment: Temporary segments được tự động tạo bởi
Oracle mỗi khi một câu lệnh SQL statement cần đến một vùng nhớ trung
gian để thực hiện các công việc của mình như sắp xếp dữ liệu ( như câu

lệnh Group by, join, hash…). Khi kết thúc câu lệnh đó, các extent thuộc
temporary segment sẽ lại được hoàn trả cho hệ thống.
Oracle thực hiện cấp phát vùng không gian lưu trữ một cách linh hoạt
mỗi khi các extents cấp phát đã sử dụng hết.
- Các cấu trúc vật lý khác: Ngoài ra, Oracle Server còn sử dụng các file
khác để lưu trữ thông tin. Các file đó bao gồm:
+ Parameter file: Parameter file chỉ ra các tham số được sử dụng trong
database. Người quản trị cơ sở dữ liệu có thể sửa đổi một vài thông tin có
trong file này. Các tham số trong parameter file được viết ở dạng văn bản.
+ Password file: Xác định quyền của từng người dùng trong cơ sở dữ
liệu. Cho phép người sử dụng khởi động và tắt một Oracle instance.
+ Archived redo log files: Là bản off line của các redo log files chứa
các thông tin cần thiết để phục hồi dữ liệu.
Các thành phần này lại bao gồm các đối tượng. Các đối tượng là bất kỳ
một entry nào trong từ điển dữ liệu hoặc là được tạo bởi người dùng. Các
đối tượng trong Oracle gồm table, synonym, view, index, stored
procedure, trigger, privilege, role, profile.
2.1.3. Khung nhìn từ điền dữ liệu và khung nhìn hiệu năng động
2.1.3.1. Khung nhìn từ điển dữ liệu
Khung nhìn từ điển dữ liệu hay từ điển dữ liệu hệ thống là phần rất
quan trọng trong cơ sở dữ liệu Oracle, là trái tim của cơ sở dữ liệu oracle,
chứa các thông tin về chính cơ sở dữ liệu. Việc truy nhập trực tiếp vào
bảng từ điển dữ liệu là không thể, nhưng có thể lấy thông tin trong đó qua
các khung nhìn từ điển dữ liệu. Từ điển dữ liệu được tạo bởi file script
sql.bsq trong quá trình tạo cơ sở dữ liệu. Nó gồm các bảng chỉ đọc, cung
cấp thông tin về mọi khía cạnh của cơ sở dữ liệu Oracle, các định nghĩa
về lược đồ đối tượng, không gian lưu trữ, database security, thông tin
audit… Các dữ liệu trên từ điển cơ sở dữ liệu Oracle là chỉ đọc nên chỉ
cho phép các truy vấn select tới các bảng và khung nhìn này. Mọi cố gắng
thay đổi hoặc thao tác trên từ điển dữ liệu Oracle có thể ảnh hưởng tới

tính toàn vẹn của database. Từ điển dữ liệu được máy chủ Oracle tự động
20


cập nhật mỗi khi thực hiện lệnh định nghĩa dữ liệu (Data Definition
Language – DDL). Để biết khung nhìn từ điển dữ liệu mà chúng ta có thể
xem, truy vấn khung nhìn từ điển.
Khung nhìn từ điển dữ liệu đặt trong tablespace SYSTEM do User
SYS quản lý. Khung nhìn từ điển được chia thành 3 nhóm chính: User
view, All view, Dba view.
USER_: Các truy vấn tới view có tiền tố User chỉ trả về thông tin về
database của user đang logon. Nghĩa là bạn chỉ nhìn thấy các thông tin về
các schema mà bạn sở hữu. Ví dụ: USER_TABLES sẽ chứa thông tin về
các bảng dữ liệu của User hiện thời.
ALL_: Các truy vấn tới view với tiền tố All chỉ chứa thông tin về cơ
sở dữ liệu của người dùng đang đăng nhập và các cơ sở dữ liệu mà người
dùng được cấp quyền truy nhập. Ví dụ: ALL_TABLES sẽ chứa thông tin
về các bảng dữ liệu mà người dùng hiện thời có thể truy nhập.
DBA_: Các khung nhìn có tiếp đầu ngữ DBA chứa thông tin về các
đối tượng có trong cơ sở dữ liệu. Các khung nhìn này là cần thiết cho
quản trị viên cơ sở dữ liệu. Một người dùng bất kỳ cũng có thể xem được
thông tin trong các khung nhìn DBA nếu người dùng đó được cấp quyền
SELECT ANY TABLE.

21


Một số data dictionary view:
Tên View


Nội dung

DICTIONARY

Thông tin chung

DICT_COLUMNS
DBA_TABLES

Thông tin liên quan tới các đối tượng
của User như: table, Column,
Constraint,...

DBA_OBJECTS
DBA_LOBS
DBA_TAB_COLUMNS
DBA_CONSTRAINTS
DBA_USERS

Thông tin về mức quyền của User

DBA_SYS_PRIVS
DBA_ROLES
DBA_EXTENTS
DBA_FREE_SPACE

Tình hình cấp phát không gian cho các
đối tượng trong database.

DBA_SEGMENTS

DBA_ROLLBACK_SEGS

Thông tin về cấu trúc database

DBA_DATA_FILES
DBA_TABLESPACES
DBA_AUDIT_TRAIL

Các thông tin kiểm tra

DBA_AUDIT_OBJECTS
DBA_AUDIT_OBJ_OPTS
Bảng 1. Data dictionary view

22


2.1.3.2. Khung nhìn hiệu năng động Oracle
Oracle chứa một tập các khung nhìn được duy trì bởi máy chủ cơ sở dữ
liệu và user SYS có thể truy nhập tới. Đó là các khung nhìn hiệu năng động,
vì chúng thường xuyên được cập nhật trong khi cơ sở dữ liệu mở và hoạt
động, và nội dung của chúng liên quan tới hiệu năng. Mặc dù các khung
nhìn này có vẻ như là các bảng thông thường trong cơ sở dữ liệu, nhưng
thực ra thì không. Các khung nhìn này lấy thông tin trên cấu trúc ổ đĩa bên
trong và bộ nhớ. Có thể lấy thông tin từ chúng nhưng không thể cập nhật
hay thay đổi gì đối với thông tin nguồn. Có thể truy vấn các khung nhìn hiệu
năng động để xuất dữ liệu. Tuy nhiên, chỉ có các truy vấn đơn giản được hỗ
trợ. Nếu cần phải dùng các câu truy vấn như sorts, joins, group by thì nên
sao chép thông tin từ mỗi khung nhìn sang một bảng ( dùng lệnh create table
… as select…) và sau đó truy vấn từ các bảng này. Và bởi vì thông tin trong

các V$ view là động nên việc thống nhất dữ liệu giữa các lần Select là
không đảm bảo.
V$ view: khung nhìn hiệu năng động thực sự được xác định bằng
tiền tố V_$. Các bí danh công khai (public synonym) cho các view này có
tiền tố V$. Các quản trị database và người dùng khác chỉ truy nhập V$,
không truy nhập V_$. Khung nhìn hiệu năng động được sử dụng bởi
Oracle Enterprise Manager, để lấy thông tin về hiệu năng hệ thống. Sau
khi instance được khởi động, chúng ta có thể truy xuất các thông tin về
V$ view mà đọc thông tin từ bộ nhớ. Các khung nhìn đọc thông tin từ ổ
đĩa chỉ truy xuất được khi database mount, hoặc mở cơ sở dữ liệu.
Tùy thuộc vào các tính năng được cài đặt và cấu hình, trong Oracle
10g có tới gần 350 khung nhìn hiệu năng động. Hầu hết các khung nhìn
có tên bắt đầu bằng V$. Một số dynamic performance view:
V$databas
e
V$version
V$option
V$sql
V$session
V$sga
V$process

Chứa thông tin về chính database như tên, thời gian tạo.
Cho biết phiên bản đang cài.
Hiển thị các thành phần tùy chọn được cài trên database.
Hiển thị thông tin về các câu lệnh SQL mà user đã thực
hiện.
Liệt kê thông tin về các session hiện thời.
Thông tin về system global area.
Thông tin về các process đang hoạt động hiện tại.

Bảng 2. Bảng Dynamic performance view

23


Chúng ta có thể phân biệt data dictionary view và dynamic
performance view như sau:
Data Dictionary views
DBA_ view thường có tên dài ( ví
dụ Dba_data_files)
Dba_ view chỉ có mặt khi
database đã open và chạy

Dynamic Performance Views
Tên của V$ view thường gắn liền
(ví dụ V$Datafile)
Một số V$ view có mặt khi
database chưa được open hoàn
toàn
Dữ liệu thường ở dạng chữ hoa
Dữ liệu thường ở dạng chữ
thường
Dữ liệu là tĩnh và không bị xóa
Dữ liệu động và mất mỗi khi
khi db shutdown
database shutdown
Bảng 3. Phân biệt data dictionnary và dynamic performance view
2.3. Quản trị Oracle
2.3.1. Đặc quyền trong Oracle
Đặc quyền là quyền thực hiện một thao tác nhất định đối với cơ sở

dữ liệu. Đặc quyền cho phép người dùng truy nhập vào các đối tượng cơ
sở dữ liệu hoặc thực thi lưu trữ chương trình (thủ tục, hàm, gói) được sở
hữu bởi đối tượng khác. Đặc quyền cũng cho phép người dùng thực hiện
các hoạt động mức hệ thống như kết nối tới cơ sở dữ liệu, tạo bảng, chỉnh
sửa cơ sở dữ liệu. Các đặc quyền có thể được gán cho người dùng, người
dùng đặc biệt như công khai, hoặc cho một role qua lệnh Grant và cũng có
thể được thu hồi qua lệnh Revoke. Người dùng công khai là một lối vào
đặc biệt trong từ điển dữ liệu. Các đặc quyền gán cho public sẽ được dành
cho tất cả người dùng trong hệ thống có quyền Create session. Gán truy
nhập public thường dành cho những bảng chứa các dữ liệu công khai,
hoặc những đối tượng mà việc truy nhập tới chúng không làm ảnh hưởng
cơ sở dữ liệu. Oracle có hai loại quyền chính là: đặc quyền đối tượng, đặc
quyền hệ thống để quản lý truy nhập của người dùng vào dữ liệu và hạn
chế kiểu câu lệnh SQL mà người dùng có thể thực thi.
Đặc quyền đối tượng là các quyền trên các lược đồ đối tượng như
table, view, sequence, procedure, function, package, directories, libraries,
kiểu người dùng định nghĩa, operator, index. Để sử dụng một lược đồ đối
tượng thuộc sở hữu của người dùng khác, cần có đặc quyền trên đối tượng
đó. Xem thông tin về các đặc quyền đối tượng các view
all_tab_privs_made hoặc user_tab_privs_made. Có nhiều kiểu đặc quyền
đối tượng. Một số đặc quyền chỉ áp dụng được với một số schema object
nhất định. Như index privilige chỉ áp dụng trên bảng, đặc quyền truy vấn
chỉ áp dụng cho table, view và sequence. Quyền trên các hàm, thủ tục, gói
và Java: Oracle 10g chỉ cung cấp hai quyền đối tượng đối với các chương
trình PL/SQL được lưu trữ là quyền thực thi và gỡ rối.
24


Đặc quyền hệ thống là quyền cho phép vận hành mức cơ sở dữ liệu,
như kết nối đến cơ sở dữ liệu, tạo người dùng, chỉnh sửa cơ sở dữ liệu, sử

dụng dung lượng của tablespace. Các câu lệnh được thực hiện bởi quyền
hệ thống như là các câu lệnh DDL như Create, alter, drop, hay DML:
alter, delete, insert. Oracle 10g có hơn 170 quyền hệ thống, được liệt kê
trong khung từ điển dữ liệu System_privilige_map. Một số đặc quyền hệ
thống.

Quyền
đối
với
database
Quyền
đối
với
procedure
Quyền đối với role
Quyền
đối
với
sequence
Quyền đối với session
Quyền
đối
với
Synonym
Quyền đối với table

Alter database, alter system, audit system, audit
any
Create, alter, drop, execute
Create, alter, drop, grant.

Create, alter, drop, select
Create, alter.
Create(any), drop(any).
Create(any),
alter(any),
insert(any),
update(any),
lock(any),
flashback(any).
Create, alter, drop, manage.

select(any),
delete(any),

Quyền
đối
với
tablespace
Quyền đối với Triggers
Create, alter (any), drop (any).
Quyền đối với User
Create, alter, drop.
Quyền đối với View
Create (any), drop(any).
Bảng 4. Một số system privilege

Oracle cung cấp hai quyền hệ thống đặc biệt là Sysdba và Sysoper.
Người quản trị phải được gán một trong hai quyền này. Quyền hệ thống
sysdba và sysoper cho phép truy nhập vào database instance ngay cả khi
cơ sở dữ liệu chưa mở. Quyền hệ thống sysdba và sysoper có thể thực

hiện các hoạt động sau:
Quyền
Sysdba

Hoạt động
Startup, shutdown database. Create, drop, database.
Thiết lập các chế độ backup, recover. Tạo spfile. Quyền
restricted session.
Connect tới database với tài khoản sys. Khi kết nối
database với quyền sysdba, schema của user là sys.

25


×