để phân biệt với ứng dụng chạy trên trình duyệt tức web-base trong đó ứngdụng được cài trên từng máy khách một, còn database thì cài trên máy chủ.Kế đến chúng ta có mô hình nhiều líp n-t
Trang 1MỤC LỤC
LỜI GIỚI THIỆU 3
PHẦN I: TÌM HIỂU VỀ ORACLE 5
1.1 Giới thiệu về Oracle 5
1.1.1 Lịch sử phá triển của Oracle5 5
1.1.2 Cài đặt và tạo database trên windows6 6
1.1.3 Cài đặt bộ Oracle9i Developer Suite 12
1.1.4 Khái quát về Oracle Net1 13
1.1.5 Oracle Net1 14
1.1.6 Cấu hình Server Side cho phép kết nối16 16
1.1.7 Cấu hình Client Side để kết nối21 21
1.1.8 Bảo mật database trong việc phát triển ứng dông24 24
1.2 SQL*Plus, PL/SQL, Function, Procedure, Package, Trigger33 33
1.2.1 Sử dụng công cụ SQL*Plus3 33
1.2.2 SQL*Plus Worksheet35 35
1.2.3 SQL*Plus ở command mode36 36
1.2.4 Khai báo biến37 37
1.2.5 PL/SQL39 39
1.2.6 Thủ tục (Procedure)42 42
1.2.7 Hàm (Function)45 45
1.2.8 Bộ chương trình (Package)47 47
1.2.9 Bé kích cơ sở dữ liệu (Trigger)50 50
1.3 Cài đặt Oracle Designer9i Repository55 55
1.4 Kết luận59 59
PHẦN II: PHÂN TÍCH VÀ THIẾT KẾ CƠ SỞ DỮ LIỆU 60
2.1 Một số định nghĩa và khái niệm60 60
2.1.1 Thực thể (Entity)60 60
2.1.2 Thuộc tính (Attribute)60 60
Trang 22.1.4 Khoá dự tuyển60 60
2.1.5 Khoá chính (Primary key)6 60
2.1.6 Khoá ngoại lai (Foreign key)6 60
2.1.7 ChuÈn hoá (Nomalization)61 61
2.1.8 Quan hệ62 62
2.2 Chắt lọc và mã hoá thông tin cần dùng65 65
2.2.1 ChuÈn hoá cơ sở dữ liệu67 67
2.2.2 Thiết kế dữ liệu logic72 72
2.2.3 Xây dựng cơ sở dữ liệu 76
2.2.4 Lược đồ quan hệ80 80
2.3 Kết luận81 81
PHẦN III: THIẾT KẾ GIAO DIỆN NGƯỜI - MÁY 3.1 Mục đích của chương trình 82
3.2 Nội dung chương trình82 82
3.2.1 Thiết kế form82 82
3.2.2 Thiết kế báo cáo84 84
3.3 Kết luận86 86
PHẦN IV: KẾT LUẬN VÀ PHƯƠNG HƯỚNG PHÁT TRIỂN8 87
Tài liệu tham khảo8 88
LỜI GIỚI THIỆU
Tại sao chóng ta chọn Oracle ?
Trang 3Nhiều người cho rằng Oracle chỉ sử dông cho những Doanh Nghiệp lớn nênkhông thích hợp ở Việt Nam.
Điều này, theo tôi là hoàn toàn sai lầm Oracle không chỉ nhắm tới nhữngDoanh Nghiệp lớn mà còn nhắm tới những Doanh Nghiệp trung bình và cho cảnhững Doanh Nghiệp nhỏ Cụ thể là Oracle Server có đủ các phiên bản thươngmại từ Personal, Standard đến Enterprise (Ngoài ra còn có Oracle lite nữa)
Về phía các Doanh Nghiệp: Oracle tá ra rất có ưu điểm nh tính bảo mật cao,tính an toàn Dữ Liệu cao, dễ dàng bảo trì-nâng cấp, cơ chế quyền hạn rõ ràng,
ổn định,……
Oracle cũng không quá đắt nh các bạn nghĩ, nếu Doanh Nghiệp đã từng mualisence của MSSQLServer thì sẽ thấy giá của Oracle cũng không chênh lệch làbao nhiêu, thậm trí còn rẻ hơn, nhưng lợi Ých có được lại rất lớn
Về phía nhà phát triển: Oracle cũng tỏ ra rất có ưu điểm nh dễ cài đặt, dễtriển khai và dễ nâng cấp lên phiên bản mới
Hơn nữa Oracle còn tích hợp thêm PL/SQL, là một ngôn ngữ lập trình có cấutrúc – Structure Language Tạo thuận lợi cho các lập trình viên viết các Trigger,StoreProcedure, Package Đây là điểm rất mạnh so với các CSDL hiện có trên thịtrường
Oracle, ngoài các kiểu dữ liệu thông thường, còn có các kiểu dữ liệu đặc biệtkhác, góp phần mang lại sức mạnh cho Oracle nh blob, clob, bfile,…
Nếu bạn chỉ chạy thử, bạn cũng không cần lo đến vấn đề lisence vì có thểdownload từ trang của Oracle (technet.oracle.com)
Ngoài ra, bạn có thể triển khai Oracle trên nhiều hệ điều hành khác nhau(Windows, Solaris, Linux,…) mà không cần phải viết lại PL/SQL code
Có thể import mét dumpFile (backupFile) từ một máy chạy hệ điều hành nàysang một máy chạy hệ điều hành khác, hoặc từ một version thấp lên một versioncao hơn mà không gặp bất cứ trở ngại nào (việc ngược lại cũng có thể thực hiệnđược nếu như bạn không xài các tính năng mới so với version trước đó)
Trang 4Mỗi người sẽ có sự lùa chọn riêng phù hợp với yêu cầu của mình, nhưng theotôi, bạn sẽ không bao giê phải hối hận khi đã chọn Oracle.
Vậy mục tiêu và nhiệm vụ nghiên cứu trong đồ án này là: phần chính là tìmhiểu công nghệ Oracle9i, sau đó bằng những kiến thức đã đạt được, tôi áp dôngkiến thức Oracle vào trong bài toán quản lý sách ở một số cửa hàng sách tại ViệtNam
Phần I
TÌM HIỂU VỀ ORACLE1.1 GIỚI THIỆU VỀ ORACLE
1.1.1 Lịch sử phát triển của Oracle
Trang 5Vào năm 1977, Larry Ellison,Bob Miner, và Ed Oates thành lập một công
ty và đặt tên là Relational Software Incorporated (RSI) Công ty này xây dựngmột hệ quản trị CSDL gọi là Oracle
1978 phiên bản Oracle v1 đầu tiên, chạy trên hệ điều hành PDP-11 của máyRSX (dòng của hãng DEC) Khả năng sử dụng bộ nhớ tối đa là 128kb Viếtbằng ngôn ngữ Assemply Oracle v1 chỉ được sử dụng trong nội bộ công ty,không được phát hành ra bên ngoài
1980 Phát hành phiên bản Oracle v2 - đây cũng là hệ cơ sở dữ liệu thươngmại đầu tiên sử dụng ngôn ngữ SQL Phiên bản này vẫn được viết bằngAssemply cho PDP-11, tuy nhiên, nó còn chạy được trên Vax/VMS
1982 Phát hành phiên bản Oracle v3 released, Oracle trở thành DBMS đầutiên chạy trên máy tính mainframes, minicomputers, và PC’s (portablecodebase) Phiên bản Oracle đầu tiên thể làm việc theo “transactional” Oracleđược viết bằng C
1983 Relational Software INC đổi tên thành Oracle Corporation
1984 Phát hành Oracle v4, giới thiệu tính năng “read consistency”, có thểchạy trên nhiều hệ điều hành, và cũng là phiên bản đầu tiên chạy theo mô hình
1989 Phát hành Oracle v6.2 với tính năng chạy song song – Oracle ParallelServer
1992 Phát hành Oracle v7 chạy trên UNIX
1993 Phát hành bộ công cụ phát triển ứng dụng – Oracle’s CooperativeDevelopment Environment (CDE) Giới thiệu “Oracle Industries” và “OracleMedia Server”
Trang 61994 Phát hành Oracle v7.1 và Oracle v7 trên máy PC.
1997 Phát hành Oracle8, giới thiệu Cơ Sở Dữ Liệu Hướng Đối Tượng –object relational
1998 Phát hành phiên bản trên Intel Linux
1999 Phát hành Oracle8i (i= internet), tích hợp với máy ảo Java – JVM
2000 phát hành Oracle8i Release 2
2001 Phát hành Oracle9i Release 1 với tính năng Cluster (RAC) vàAdvanced Analytic Service
2002 Phát hành Oracle9i Release 2
2004 Phát hành Oracle10g Release 1 (g= grid: mạng lưới)
1.1.2 Cài đặt và tạo Database trên windows
- Oracle9i: phần Database chứa trong 3 CD
- Phần Deverloper suite9i chứa trong 2 CD
c Cài đặt Oracle9i database
- Login vào Windows bằng Administrator hoặc một user thuộc groupAdminstrator
Trước khi cài đặt bạn phải đặt địa chỉ ip cho máy của ban muốn cài sauđã
- Đưa đĩa 1 vào và chạy file Setup.exe để mở trình Oracle UniversalInstaller và bắt đầu việc cài đặt cơ sở dữ liệu
Trang 7- Khi trình Oracle Universal Installer khởi động, bạn sẽ thấy một trang hỏibạn muốn cài đặt, gỡ bỏ hoặc xem Chọn tuỳ chọn Install/Deinstall OracleUniversal Installer sẽ trình bay trang Welcome Click nót Next.
- Trang file location được trình bày như hình sau:
- Click nót Next Trang Availble Products xuất hiện Bạn chọn Oracle9idatabase 9.2.0.1
- Click nót next trang Installation Types xuất hiện và chọn Enterpriseedition và click nót next
- Trang database configuration được trình bày, chọn General purpose vàclick nót next
- Trang Oracle services for Microsoft Transaction Server được trình bày,chấp nhận cổng mặc định và click nót next
- Trang database identification được trình bày như hình sau:
Trang 8đối với mục Global database Name Nhập tên cơ sở dữ liệu vào mục nàynhng không quá 8 ký tù ở đây tôi đặt tên là “ittc” Mục SID được tự động điềnnội dung giống nh phần Global database Name click nót next
- Trang database character set được trình bày chấp nhận mặc định
- Click nót next trang summary được trình bày như hình sau:
Trang 9- Click nót install việc cài đặt bắt đầu
- Trong quá trình cài đặt bạn được nhắc nhở nhập vào mật khẩu cho sys
và system như hình sau:
Trang 10Đây là các id chính của Oracle ở đây tôi chọn
sys password: sys
system password: system
- Khi việc cài đặt hoàn tất, trang End of installation được trình bày clicknót exit để đóng trình Oracle Universal Installer Ngay lập tức cửa sổ OracleEnterpise Manager trình bày đóng cửa sổ lại hoàn tất quá trình cài đặt
Để chắc chắn rằng Database của chúng ta đã được tạo, hãy vào ControlpanelAdminstrative ToolsServices
Xem các Oracle service nh trong hình dưới, và xem trạng thái của chúngđều started
Trang 11Connect vào Oracle Database từ SQL*Plus bằng user system, password:system với host String: ittc
Nếu thành công sẽ nh sau:
Trang 12Nh vậy chúng ta đã cài đặt và tạo được Database trên Oracle9i
1.1.3 Cài đặt bộ Oracle9i Developer Suite
Đặt đĩa thứ nhất của bộ Oracle9i Developer Suite vào máy, màn hình đầutiên Welcome sẽ xuất hiện Nhấn nót Next, trang File location xuất hiện
Ở đây tôi chọn
Trang 13Destination Name: OraHome92a : khác với của database là OraHome92 đểtránh xung đột.
Destination Path: c:\oracle_tools
- Click nót next, màn hình Install Type xuất hiện chọn mục complete
- Click nót next, trang summary thể hiện nh hình sau:
- Click nót Install để bắt đầu cài đặt
- Trong quá trình cài đặt hộp thoại Oracle Net configuration Assistant chophép bạn configuration tới database sử dụng giao thức TCP/IP
- Nếu bạn configuration thành công thì màn hình End of Installation đượctrình bày đến đây bạn đã hoàn tất việc cài đặt bộ Oracle9i Developer Suite.Click nut Exit để đóng màn hình Oracle Universal installer
1.1.4 Khái quát về Oracle Net
Nh các bạn đã biết, chúng ta có thể cấu hình một mạng đơn giản thườngđược gọi là mạng máy khách và máy chủ (Client-Server network) Mô hình
Trang 14để phân biệt với ứng dụng chạy trên trình duyệt tức web-base) trong đó ứngdụng được cài trên từng máy khách một, còn database thì cài trên máy chủ.
Kế đến chúng ta có mô hình nhiều líp (n-tier network), một mô hình rấtthích hợp cho các ứng dụng web Trong mô hình này có Ýt nhất 2 máy chủ, mộtmáy chủ chạy các application server và web server và cho phép máy khách kếtnối qua internet, còn máy chủ kia chứa database Phức tạp hơn nữa là mạngphức hợp (complex network) tức có sự kết nối trao đổi giữa các máy chủ và chophép máy khách chạy trên các hệ điều hành khác nhau, sử dụng các giao thứckhác nhau kết nối trao đổi dữ liệu
Oracle cung cấp rất đầy đủ các công cụ và phương thức để cấu hình các môhình mạng kể trên, tuy nhiên, không phải tất cả các sản phẩm đều được cài mặcđịnh trong một tuỳ chọn
1.1.5 Oracle Net?
Là líp ứng dụng cần được cài trên cả máy khách và máy chủ chứa mộtdatabase Oracle (Oracle database server) có nhiệm vụ thiết lập và duy trỳ kếtnối, trao đổi giữa ứng dụng (Client application) và database server Oracle Netgồm 2 thành phần là Oracle Net foundation và Oracle protocol support
a Oracle Net foundation layer:
Oracle Net on the client -ứng dụng sẽ giao tiếp với Oracle Net foundation
Trang 15để thiết lập và duy trỳ kết nối-Tiếp theo các líp Oracle Net foundation sử dụngOracle protocol support để giao tiếp với Oracledatabase server.
-Mòi tên chỉ cả hai chiều gửi yêu cầu (requests)
và nhận phản hồi (responses)
Oracle Net on the server -Líp Oracle protocol support nhận Requests từ líp
network protocol rồi gửi tiếp thông tin đó đến lípOracle Net foundation
-Tiếp theo, líp Oracle Net foundation giao tiếpvới Oracle database server để xử lý yêu cầu củaclient
-Mòi tên chỉ cả hai chiều gửi responses và nhậnrequests
b Oracle protocol support:
Oracle protocol support cã nhiệm vụ là map chức năng của líp Oracle Netfoundation với líp network protocol trong kết nối client-server
c Cấu hình để kết nối:
ĐÓ mét Oracle database server sẵn sàng phục vụ cần phải cấu hình vàstart một tiến trình (service trên windows hay process trên các hệ điều hànhkhác) phục vụ các yêu cầu kết nối từ client gọi là Oracle Net Listener (thườngđược gọi vắn tắt là listener) Về phía client chóng ta cũng phải khai báo kết nốiđến máy chủ nào, tên database là gì và cổng bao nhiêu,…
d Công cụ hỗ trợ cấu hình:
Trang 16Các công cụ hỗ trợ này được cài mặc định khi các bạn cài đặt Oracleserver hoặc Oracle client Sau khi cài được Oracle Application, các bạn sẽ tìmthấy công cụ này trong menu: Start-> programs ->Oracle-Oracle Home92->Configuration and Migration Tools.
-Net Configuration Assistant: Cho phép cấu hình với các thông số tốithiểu phải có
-Net Manager: Cho phép cấu hình đầy đủ hơn các thông số, tuy nhiênkhông phải là tất cả Một số thường được cấu hình bằng tay, bằng cách chỉnhsửa trực tiếp vào file cấu hình, và đây là cách nhanh hơn
1.1.6 Cấu hình Server side cho phép kết nối
a Listener?
Listener là một tiến trình chạy trên một máy ( có thể độc lập với Oracleserver) làm nhiệm vụ nhận yêu cầu kết nối từ client thay cho một hoặc nhiềudatabase Khi mét client yêu cầu kết nối listener sẽ nhận và giao lại yêu cầu đócho Oracle server, và khi kết nối được thiết lập, client và Oracle server sẽ giaotiếp trực tiếp với nhau Nôm na chóng ta có thể hiểu listener là lỗ tai của mộtdatabase
b Mét số đặc điểm của listener:
- Mét listener có thể lắng nghe thay cho một hoặc nhiều database, ngượclại một database cũng có thể có nhiều listener (tuy nhiên không phải là luônluôn)
-Khi start nhiều listener trên một máy, các listener không thể trùng tênhoặc lắng nghe trên cùng một cổng (port) Default port là: 1521
Trang 17- Listener có thể lắng nghe cho nhiều giao thức khác nhau (multipleprotocols).
-Tên mặc định là LISTENER
-Thông tin cấu hình của tất cả các listener được lưu trong mét file duynhất là “C:\oracle\ora92\network\admin\listener.ora”
c Khai báo và tạo một listener:
Khi kết configuration thành công, chúng ta có được một dịch vụ (service)listener đã được startup Tuy nhiên, các bạn để ý, nó không hỏi listener này lắng
Trang 18nghe cho database nào, do vậy nó chưa thực sự chạy được Cách khác bạn có thể
sử dụng công cụ Net Manager hoặc sửa file cấu hình bằng tay
d Các mục chính để cấu hình listener trong Net Manager:
-General Parameters: các thông số về log file, password,…
-Listening Location: chỉ ra listener chạy trên máy chủ nào (hostname hoặcIP), port và giao thức
-Database Services: chỉ ra những database được listener lắng nghe thấy.Giá trị cho thông số này phải đúng với những giá trị của những thông số các bạntạo database
+global database name= db_name[.db_domain]
Trang 19# LISTENER.ORA Network Configuration File:
Trang 20Giải thích:
-Tên của listener là LISTENER (đây là tên mặc định)
- listener này chạy trên máy có host_name là “pd”, port là 1521 và giaothức TCP/IP
-Phục vô cho mét database là: ITTC có db_name là ITTC, db_name=rỗng, instance_name=ITTC
e Startup listener
- Auto: để startup listener một cách tự động, các bạn chỉnh tuỳ chọn
“startup type” của service là automatic Khi đó mỗi lần khởi động máy nó sẽ tựđộng startup luôn listener
- Manua: cách khác chúng ta có thể sử dụng tiện Ých LSNRCTL đểstartup listener bằng lệnh START trên môi trường giả lập dos của Windows
-stop [listener_name]: để stop mét listener Nếu không có thông sốlistener_name thì lệnh này sẽ stop listener có tên là listener hoặc listener hiệnhành chỉ ra ở lệnh SET
-set current_listener listener_name: chỉ ra mét listener là hiện hành khi têncủa listener khác tên mặc dịnh hoặc có nhiều listener
-status: kiểm tra trạng thái của listener
-services: xem thông tin về các service (database) mà listener đang lắngnghe
-quit/exit: thoát khỏi tiện Ých LSNRCTL
g Stop listener:
Trang 21Bằng cách stop service hoặc đánh lệnh stop trong tiện Ých LSNRCTL.
1.1.7 Cấu hình client side để kết nối
a Mét số khái niệm cần biết:
- Database Service: đối với client thì database là một dịch vụ (service), nóthực thi công việc thay cho client ở đây dịch vụ mà database cung cấp choclient chính là lưu trữ dữ liệu và gọi lại dữ liệu khi cần Khi kết nối client nhậnbiết database qua tên dịch vụ (service name) mặc định là bằng global database
- Naming Methods: Khi yêu cầu kết nối với Oracle database user phảicung cấp một chuỗi kết nối (Connect string) gồm username, passwork và tên kếtnối (connect identifier) connect identifier có thể là một chuỗi mô tả chi tiếtthông tin để kết nối với database (gọi là connect descriptor) hoặc databaseservice name hay một cái tên thay thế connect descriptor
Naming method là phương pháp mà Oracle Net client sử dụng để chuyểnmột connect identifier thành connect descriptor khi thực hiện kết nối vớidatabase Cùng lúc, client có thể chọn sử dụng nhiều naming method khác nhau
Oracle Net cung cấp các naming method sau:
-Local Naming: xác định địa chỉ mạng bằng cách sử dụng thông tin cấuhình (service names và các connect descriptors) lưu trong mét file tại mỗi clienttên là “tnsnames.ora”
-Directory Naming: lưu trữ các connect identifier tập trung trong métLDAP – compliant directory server dùng để truy cập đến database service
-Oracle Names: sử dụng chính database Oracle để lưu tên và địa chỉ củacác database Client muốn kết nối với database phải kết nối đến Oracle Namesserver, sau đó tuỳ theo tên mà client cung cấp, Oracle Names server sẽ trả lạithông tin địa chỉ mạng của database server cho client
-Host Naming: cho phép Client sử dụng bí danh (host name alias) để kếtnối với Oracle database server Tên máy (host name) ánh xạ đến service_namescủa database server trog Domain Name System (DNS), Network Information
Trang 22Service (NIS), hoặc trong file hosts ở thư mục /etc đối với hệ điều hành Linux,Unix hay %winsy%/drivers/ect với Windows.
-External Naming: sử dụng dịch vụ tên miền của hãng thứ ba (third –party naming service)
Trang 23Điều kiện bắt buộc đối với host naming:
- Client phải cài phần mềm Oracle Net Services Client
- Client và Server kết nối qua giao thức TCP/IP
c Cấu hình TNSNAME
Hay còn gọi là local name Phương thức này đòi hỏi service name đượclưu trong file tnsnames.ora tại client Nh vậy, client sẽ cấu hình file sqlnet.orachọn sử dụng phương thức local naming và tạo file tnsnames.ora Các bạn có thể
sử dụng công cụ Oracle Net Configuration Assistant Đây là công cụ cho phép
bạn chọn cục bộ, máy chủ tên hoặc các tuỳ chọn quản lý thư mục để cấu hìnhkết nối Client Công cụ này hầu hết được dùng để cấu hình các thành phần mạngtrong quá trình cài đặt Nó rất dễ dàng cho phép bạn kết nối cấu hình kết nốiClient dưới bất kỳ phương pháp đặt tên nào Bạn có thể chạy công cụ này từ:Start >Program>ORACLE-ORACLE_HOME> Configuration and MigrationTool> Net Configuration Assistant
Khi configuration thành công nó sẽ tạo mới file tnsnames.ora lưu lại cácthông số khai báo hoặc sẽ lưu nối thêm vào một file có sẵn Ví dụ bên dưới lànội dung file tnsnames.ora với net service name là ITTC
# TNSNAMES.ORA Network Configuration File:
Trang 241.1.8.Bảo mật database trong việc phát triển ứng dụng
Bảo mật là một trong những vấn đề mà bất kỳ người sử dụng database đềuquan tâm, vấn đề bảo mật trong database là một trong những ưu tiên hàng đầucủa những người phát triển ứng dông, nhng đa số các chương trình ứng dụnghiện nay lại Ýt quan tâm đến vấn đề này
a Cân nhắc việc sử dụng bảo mật cho ứng dụng
khi phát triển một ứng dụng, lúc nào người phát triển ứng dụng cũng luônquan tâm đến vấn đề bảo mật hệ thống, để làm một hệ thống bảo mật thì yêu cầutối thiểu là quản lý các user và các quyền hạn trên chức năng, cũng như các đốitượng trên ứng dụng Hiện nay đa số mọi người phát triển ứng dụng chủ yếuquản lý user theo 2 cách sau:
- Dùng Database User làm user cho ứng dụng
- Dùng Application User làm user cho ứng dụng
Trang 25Hiệ tại thì đa số chọn phương án thứ 2, khi sử dụng phương án này ngườiphát triển phải làm thêm một chương trình để quản lý thông tin về User, cũngnhư quyền hạn trên đó, về mặt kết nối database thì dùng một user để kết nối vàuser này thường có quyền rất cao trong database (nhiều người cho luôn nó làuser quản trị hệ thống để khỏi phải mất công phân quyền), Oracle gọi đó là môhình “One Big Application User”.
Đối với mô hình “One Big Application User” có một số giới hạn, ví dụnhư một nguyên tắc căn bản của bảo mật là ghi nhận lại thông tin về việc thayđổi dữ liệu trong database (auditing) Nếu sử dụng trong mô hình “One BigApplication User”, thì việc auditing không thể xác định được chính xác là usernào đã thao tác trên dữ liệu đã thay đổi đó ứng dụng phải thực hiện một cơ chếauditing riêng, bắt lại các sự kiện thao tác của user Mô hình “One BigApplication User” bạn không thể tận dụng được cơ chế bảo mật của OracleSecurity, bạn phải xây dựng mọi thứ trong khi Oracle đã làm cho bạn đầy đủ
Vậy lùa chọn mô hình nào là thích hợp (Database User hay ApplicationUser)? Những ứng dụng mà user cũng là user trong cơ sở dữ liệu cũng là userứng dụng có thể tận dụng được nhiều cơ chế mà cơ sở dữ liệu mang lại nh quyềnhạn trên các đối tượng, hay việc chia nhỏ quyền hạn theo từng hàng (row) haycột (column) trong table, ngoài ra còn có thể sử dụng role và các quyền hạn trênstore procedure cũng như sử dụng auditing do database cung cấp Oracle khuyênbạn nên sử dụng user trong database làm user cho ứng dụng, khi đó ứng dụng cóthể lợi dụng những cơ chế bảo mật và quyền hạn của database cung cấp Khi sửdụng mô hình này thì user không thể dùng bất cứ hình thức nào truy cập vàodatabase mà không được kiểm soát quyền
Khi ứng dụng sử dụng mô hình “One Big Application User” thì ứng dụng
đó phải có riêng chức năng quản lý quyền hạn trên từng user và nó còn phải đảmnhận luôn việc kiểm tra việc truy cập dữ liệu từ user mà nó quản lý Với cách
Trang 26tiếp cận này thì mỗi ứng dụng khi truy cập vào database phải thực hiện lại việcbảo mật Việc bảo mật trở lên tốn quá nhiều chi phí (không phải tiền bạc mà là
sự nặng nề cho hệ thống) bởi vì nó phải thực hiện cùng 1 cơ chế bảo mật chonhiều ứng dụng
b Quản lý quyền hạn trong ứng dụng
Hầu hết ứng dụng database đều đòi hỏi những quyền khác nhau trên cácđối tượng của database, vì thế khi muốn các user có thể thao tác trên ứng dụngthì phải được phân quyền trên các đối tượng đó Đối với những ứng dụng lớn thìđối tượng có thể lên đến vài trăm là it và user cũng nhiều, nên việc phân quyền
là khá phức tạp
Để đơn giản cho việc quản lý quyền hạn, bạn có thể tạo ra những role(được hiểu nh là một nhóm những vai trò trung gian giữ lấy những quyền hạn)cho ứng dụng, những role này sẽ được gán cho tập hợp những quyền hạn, sau đóbạn có thể gán những role này cho user
Việc gán quyền thông qua role cũng có nhiều thuận lợi:
-Role được gán nhiều quyền, user được gán đến role Khi user thay đổicông việc thì bạn có thể chỉ gán hay huỷ bỏ quyền cho user với role
-Bạn có thể thay đổi quyền liên quan đến những ứng dụng bằng cách thayđổi quyền đến role mà không quan tâm đến những user trong ứng dụng
c Tạo role cho ứng dụng (Secure Application Roles)
Phân quyền theo role là một phương pháp rất hữu dụng trong việc quản lýquyền hạn của Oracle Database Role có thể được gán cho các user hay nhữngrole khác Mỗi khi gán role cho user, thì mặc định role sẽ được thiết lập làdefault role (role có hiệu không cần kích hoạt), vì thế mà các quyền hạn liên kếtvới nó sẽ có hiệu lực và user được xác minh các quyền hạn đó khi truy cậpdatabase Nếu bạn thiết đặt lại cho nó không là default, lúc đó muốn role có hiệulực thì user phải ra lệnh “set_role”
Có hai phương pháp để tạo role
-Tạo role không có chỉ định cách xác minh
Trang 27-Tạo role có xác minh khi sử dụng
Khi tạo role có xác minh, muốn sử dụng nó bạn có 4 phương pháp chọnlùa tuỳ theo yêu cầu lệnh lúc tạo role:
-Sử dụng mật khẩu để xác minh
-Sử dụng thủ tục hay package để xác minh
-Sử dụng dịch vụ bên ngoài để xác minh (nh hệ điều hành chẳng hạn)-Sử dụng dịch vụ Directory
Trong phần này tôi muốn giới thiệu với các bạn về cách bảo vệ role bằngcách sử dụng “Secure Application Roles”, tức là dùng thủ tục hay package đểxác minh và làm cho role có hiệu lực tại lúc runtime
SQL> CREATE ROLE role IDENTIFIED USING schema.package;Role created
SQL>
Trang 28Khi sử dụng câu lệnh trên để tạo role tức là bạn đang sử dụng phươngpháp kích hoạt role bằng thủ tục hay package Thủ tục hay package này phảiđược gán quyền execute cho user, để user này kích hoạt role (user không thể tựkích hoạt role bằng lệnh SET_ROLE trong trường hợp này) Trong thủ tục haypackage bạn có thể kiểm tra tuỳ theo tình huống hay ngữ cảnh mà bạn kích hoạtrole, đây là một lợi Ých rất lớn khi mà quyền hạn truy cập của user động theotừng trường hợp cụ thể.
Sau đây là một ví dụ cho việc sử dụng “Secure Application Roles”
Ví dụ này cho bạn tạo role dùa vào 1 thủ tục để kích hoạt role, nội dungthủ tục là nếu user kết nối vào hệ thống có JOB là MANAGER thì nó sẽ kíchhoạt role, role này cho phép user select được table DEPT
Để chuẩn bị cho ví dụ bạn phải có user SCOTT
Bây giê bạn connect vào system và tạo 2 user user1 và user2
SQL> create user jones
Gán quyền connect đến user “jones” và “adams”
SQL> grant create session to jones;
Trang 29Grant succeeded.
SQL> grant create session to adams;
Grant succeeded
SQL>
Tạo role ots_role với việc chỉ định 1 thủ tục để kích hoạt
SQL> create role ots_role identified using sec_roles;
Role created
SQL>
Tạo thủ tục kích hoạt role:
SQL> CREATE OR REPLACE PROCEDURE sec_roles
2 AUTHID CURRENT_USER as
3 v_user varchar2(50);
4 v_job scott.emp.job%type;
5 BEGIN
6 v_user := (sys_context ('userenv', 'session_user'));
7 select job into v_job
Trang 30Gán quyền execute thủ tục cho “jones” và “adams”
Grant execute on sec_roles to jones;
Grant execute on sec_roles to adams;
Connect vào scott và gán quyền select table emp cho role ots_role
SQL> grant select on dept to ots_role;
Grant succeeded
SQL>
Connect vào system gán role ots_role cho “jones” và “adams”
SQL> Grant ots_role to jones;
Grant succeeded
SQL> Grant ots_role to adams;
Grant succeeded
Trang 31Thiết lập role không là default
SQL> Alter user jones default role none;
User altered
SQL> Alter user adams default role none;
User altered
SQL>
Bây giê bạn connect vào user “jones” và “adams” rồi select table dept b¹n
sẽ nhận được thông báo lỗi, vì role ots_role chưa được kích hoạt
SQL> conn jones /jones @ittc
Connected
SQL> select * from scott.dept;
select * from scott.dept
PL/SQL procedure successfully completed
SQL> select * from scott.dept;
Trang 32DEPTNO DNAME LOC
Connected
SQL> select * from scott.dept;
select * from scott.dept
*
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> exec system.sec_roles
PL/SQL procedure successfully completed
SQL> select * from scott.dept;
select * from scott.dept
Trang 331.2.1 sử dụng công cụ SQL*Plus
Đây là một trong những công cụ giúp thao tác với Oracle database, mặcđịnh nã được cài cùng với tiện Ých khác khi các bạn cài Oracle server hoặcclient
a SQL*Plus với giao diện windows
Click chọn: Start/Program/Oracle-OraHome92/Application Development/SQL Plus
-Kết nối: Có thể nhập đầy đủ connect string trong trường username hoặctừng giá trị vào trường tương ứng trong hộp thoại logon
Trang 34Khi kết nối thành công, bạn sẽ vào được cửa sổ chính với con trỏ ở dấunhắc SQL> Từ đây, các bạn có thể thực thi các lệnh SQL để truy cập dữ liệu vàkết nối đến nhiều database khác Trên một máy có thể run nhiều cửa sổSQL*Plus kết nối cùng một user hoặc khác user đến một hoặc nhiều databasekhác nhau.
Bất tiện của công cụ này là bạn không di chuyển phím mòi tên ngược lại
để sửa lỗi những từ phía trước được
Trang 35- Định biến môi trường: các bạn có thể định cách hiển thị trên SQL*Plusbằng các biến môi trường Các bạn chọn options/environment hoặc set trong fileorale_home/sqlplus/admin/glogin.sql
1.2.2 SQL*Plus Worksheet:
Click chọn: Start/programs/orcle_home/application development/SQL*Plus Worksheet
Trang 36Với công cụ này bạn có thể soạn thảo các câu lệnh truy vấn Phần trên nh làeditor, các bạn có thể gõ nhiều lệnh cùng lúc cách nhau bằng dấu chấm phẩy, và
di chuyể tới lui dễ dàng khi cần chỉnh sửa
Click nót “Execute” trên toolbar hoặc Ên phím F5 để thực thi Tất cả cáccâu lệnh đã thực thi được lưu lại trong history giúp thực thi lại dễ dàng clickWorksheet/Commands History để xem lại những câu lệnh đã thực thi
1.2.3 SQL*Plus ở command mode:
Trang 37Các bạn có thể cung cấp chuỗi kết nối nh thông số truyền (ví dụ: sqlplusscott/tiger@ittc) hoặc với option “/nolog” nh hình trên, để chạy tiện Ých sqlplusnhưng chưa kết nối với database Nếu chỉ gõ sqlplus ở cửa sổ command, nó sẽrun interactive, tức bạn phải cung cấp username, password từng bước.
1.2.4 Khai báo biến
Các bạn có thể khai báo biến để lưu dữ liệu tạm thời hoặc để truyền giá trịcho các câu lệnh truy vấn trong môi trường SQL*Plus
a Lệnh DEFINE:
Với lệnh này bạn có thể khai báo một biến mới hoặc xem tất cả các biếnmôi trường hiện có Biến được khai báo sẽ tồn tại cho đến khi bạn thoát khỏiSQL*Plus
Vd:
SQL> define – xem tất cả các biến môi trường hiện có
SQL> define fname=scott –Khai báo biến FNAME mang giá trị là ‘scott’SQL> select * from emp where ename=’&fname’; nó sẽ thay giá trị
‘scott’ vào vị trí tên biến khi thực thi, các bạn sẽ thấy
old 1: select * from emp where ename=’&fname’
new 1: select * from emp where ename=’scott’
lưu ý: kiểu dữ liệu của biến khai báo bằng lệnh DEFINE chỉ duy nhất làkiểu CHAR
b Lệnh ACCEPT:
Lệnh này sẽ đọc user input rồi gán cho biến ACCEPT các bạn có thể chỉ
ra kiểu dữ liệu cho biến khai báo là NUMBER, DATE hoặc CHAR (độ dài tối
đa cho biến kiểu CHAR là 240 byte)
Cú pháp: ACCEPT variable [datatype] [format format_string] [prompttext] [hide]
Vd:
SQL>accept fname prompt ‘nhap ten nhan vien can tim: ‘—nó sẽ dừngchờ bạn nhập giá trị cho biến
Trang 38SQL> select * from emp where ename=’&fname’:
SQL> accept password char prompt ‘nhap password: ‘ hide – với optionHIDE khi bạn nhập nó sẽ hiện các dấu ‘*’
c Sử dụng dấu ‘&’ (biến thay thế).
Nếu có nhu cầu truyền giá trị cho các câu lệnh SQL thực thi một lần cácbạn có thể sử dụng biến thay thê Dấu ‘&’ là ký tự mặc định cho phép ngườidùng nhập một giá trị thay nhng không khai báo biến trước bằng lệnh DEFINE
và ACCEPT Bạn có thể sử dụng biến thay thế bất kỳ đâu trong câu lệnh SQL vàtrong các lệnh của SQL*Plus Hai dấu ‘&’ thì tương đương với lệnh DEFINE
- CONNECT connection_string: kết nối với database
- DISCONNECT: kết thúc một session và ngưng kết nối
- EDIT: hiệu chỉnh câu lệnh SQL thực thi ngay trước đó
- COLUMN [column[option]]: kiểm soát hiển thị của một cột
Vd:
SQL> COLUMN ename HEADING ‘Ten’ FORMAT A15 hiển thị tiêu
đề cột là Ten độ rộng cột là 15 ký tù
SQL> COLUMN sal JUSTIFY LEFT FORMAT $999,990.00 NULL
‘0.0’ hiển thị giá trị cột bên lề trái có dấu ‘$’ và dấu phân cách hàng ngàn,hàng đơn vị, thay giá trị NULL bằng 0.0
SQL> COLUMN ename CLEAR bá định dạng trên cột ename
- SET VERIFY on/off: bật, tắt việc hiển thị thay thế giá trị cho biến
Trang 39- SET PAGESIZE value: định số dòng hiển thị kết quả trước khi lập lạitiêu đề cột.
- SET LINESIZE value: định số ký tự trên một dòng
- SET LONG value: định độ rộng tối đa để hiển thị giá trị kiểu LONG
- UNDEFINE: loại bỏ biến được khai báo bằng lệnh DEFINE hoặcACCEPT
- START filename: chạy một script file Có thể dùng dấu ‘@’ thay lệnhSTART
- SPOOL filename: ghi kết quả của các câu lệnh thực thi ra file
- SPOOL OFF: ngưng việc ghi ra file
- EXIT: thoát SQL*Plus
1.2.5 Pl/sql
a Tổng quan về pl/sql
PL/SQL có nhiều ưu điểm so với các ngôn ngữ lập trình khác về mặt quản
lý logic và hỗ trợ các quy luật hoạt động của các ứng dụng cơ sở dữ liệu đó làmột ngôn ngữ dễ hiểu với các cấu trúc logic chung, kết hợp với các ngôn ngữlập trình và nhiều mặt khác mà các ngôn ngữ khác không có như trình quản lýlỗi rất mạnh và sự module hoá các khối mã lệnh Mã PL/SQL được sử dụng đểgiao tiếp với CSDL cũng được lưu trữ trực tiếp trong CSDL Oracle, và là ngônngữ lập trình duy nhất giao tiếp với CSDL Oracle một cách tự nhiên bên trongmôi trường CSDL
b Sử dụng pl/sql để truy xuất Oracle
Nhiều ứng dụng sử dụng kiến trúc Client/Server có một điểm chung: Đó
là việc khó duy trì các quy luật hoạt động trong một ứng dụng, nhà phát triểnứng dụng cần phải thay đổi toàn bộ ứng dụng và việc kiểm tra hệ thống sẽ xácđịnh các thay đổi có thành công hay không Tuy nhiên, trong những tình huống
kế hoạch làm việc quá hạn hẹp, phần việc bị bỏ qua đầu tiên luôn luôn là test Sùthay đổi thiết kế logic nên cài đặt trong trường hợp này là tập trung logic trongứng dụng để quản lý sù thay đổi dễ dàng hơn Trong các hệ thống sử dụng
Trang 40CSDL Oracle, một “lớp giữa” của logic ứng dụng có thể được thiết kế vớiPL/SQL Các lợi Ých có được nh sau:
+ PL/SQL được quản lý tập trung trong CSDL Oracle DBA quản lý mãnguồn và đặc quyền thực hiện với cú pháp tương tự khi quản lý các đối tượngCSDL khác
+ PL/SQL giao tiếp tự nhiên với các đối tượng CSDL khác
+ PL/SQL dễ đọc và có nhiều đặc trưng module hoá mã lệnh và quản lýlỗi
Các đặc trưng quản lý mã lệnh tập trung của PL/SQL khiến PL/SQL là sựchọn lùa logic của các ứng dụng Client/Server CSDL, tập chung sử dụng storedprocedure cho các logic hoạt động và cho phép nhà phát triển ứng dụng phíaClient tập trung chủ yếu vào giao diện người dùng Việc lưu trữ ứng dụng tậptrung logic có nghĩa là chỉ phảI biên dịch một thay đổi một lần, và sau đó nó cóthể được truy xuất ngay lập tức bởi các user của ứng dụng Với logic hoạt độnglưu trữ trong ứng dụng Client, việc nỗ lực phân phối mã lệnh bao gồm việc biêndịch lại ứng dụng Client( rất hoa tổn công sức ứng với một số hệ nền) sẽ cóthêm chi phí phân phối để thay phiên bản mới của Client trên mọi máy để bàncủa user, cũng như chi phí giao tiếp và hỗ trợ để đảm bảo tất cả các user của ứngdụng đều có phiên bản đúng Việc tính toán không tập trung tăng năng suất của
tổ chức để cung cấp các ứng dụng nhanh và dễ sử dụng cho khách hàng của họ.Nhng sự tập trung cải thiện công việc thậm trí sâu hơn khi cho phép các công typhát triển ứng dụng khả năng loại trừ các kênh phân phối, do thay đổi logic hoạtđộng và tập trung phát triển các ứng dụng phía Client