Programming HandBook part 116 pptx

6 211 0
Programming HandBook part 116 pptx

Đang tải... (xem toàn văn)

Thông tin tài liệu

SQL CREATE VIEW Statement Một view có thể coi như là một "bảng ảo" có nội dụng được xác định từ một truy vẫn. Một truy vấn (query) chỉ là một tập hợp các chỉ dẫn (intruction) nhằm truy vẫn và hiển thị dữ liệu từ các bảng CSDL . Các truy vấn được thực hiện bằng các sử dụng câu lệnh SELECT. Using VIEW : Một VIEW (khung nhìn) trông giống như một bảng với một tập hợp các tên cột và các dòng dữ liệu.Tuy nhiên ,khung nhìn ko tồn tại như là một cấu trúc lưu trữ dữ liệu trong CSDL. Dữ liệu bên trong khung nhìn thực chất là dữ liệu được xác định từ một hay nhiều bảng cơ sở và do đó phụ thuộc vào các bảng cơ sở. Các VIEW được sử dụng trong CSDL nhằm các mục đích sau : - Sử dụng khung nhìn để tập trung trên dữ liệu xác định - Sử dụng khung nhìn để đơn giản hoá thao tác dữ liệu - Sử dụng khung nhìn để tuỳ biến dữ liệu - Sử dụng khung nhìn để xuất dữ liệu - Sử dụng khung nhìn để bảo mật dữ liệu Cú pháp : Trích: CREATE VIEW view_name AS SELECT column_name(s) FROM table_name WHERE condition Ví dụ sau về cách tạo 1 VIEW tên [Current Product List] với dữ liệu trong 2 cột ProductID,ProductName của table Products . Trích: CREATE VIEW [Current Product List] AS SELECT ProductID,ProductName FROM Products WHERE Discontinued=No Chúng ta có thể truy vấn VIEW bằng câu lệnh sau : Trích: SELECT * FROM [Current Product List] Một số ví dụ khác về VIEW : Tạo một VIEW với tên [Products Above Average Price] có chứa data của 2 cột ProductName,UnitPrice trong table Products mà giá trị UnitPrice lớn hơn số lượng trung bình trong Products . Trích: CREATE VIEW [Products Above Average Price] AS SELECT ProductName,UnitPrice FROM Products WHERE UnitPrice>(SELECT AVG(UnitPrice) FROM Products) Query view trên : Trích: SELECT * FROM [Products Above Average Price] Ví dụ sau view trong database tên Northwind và tính tổng số sản phẩm được bán năm 1997 : Trích: CREATE VIEW [Category Sales For 1997] AS SELECT DISTINCT CategoryName,Sum(ProductSales) AS CategorySales FROM [Product Sales for 1997] GROUP BY CategoryName Query VIEW : Trích: SELECT * FROM [Category Sales For 1997] Bạn cũng có thể thêm điều kiện và câu truy vấn .Ví dụ như ở đây là view trong CategoryName='Beverages' : Trích: SELECT * FROM [Category Sales For 1997] WHERE CategoryName='Beverages' Link của phần index giúp bạn tổng hợp những kiến thức cơ bản : http://www.w3schools.com/sql/sql_quickref.asp dondoc (vniss) Phần 2 SQL Advanced (bài 15) Với một số kiến thức cơ bản về SQL ở trên bạn có thể làm gì nào ? Bây giờ ta sẽ thử xét với phương diện của người lập trình web : Tạo 1 database tên hacker với các trường như sau : Trích: create database hacker use hacker Create table admin( [id] numeric not null, username nvarchar(10) not null, [password] nvarchar(10) not null, address nvarchar(30), phone numeric(10) ) select * from admin Insert vào một số data : Trích: insert into admin ([id],username,[password],address,phone) values (1,'admin',12345,'Ha Noi',048324245) go insert into admin ([id],username,[password],address,phone) values (2,'Neo',12345,'Ha Noi',048324245) Rồi okie ta thấy table admin như sau : Giờ muốn select những username trong table admin mà có address tại Hà Nội thì câu query sẽ như sau : (tất cả những giá trị là character thì phải được bao trong dấu quote ') Trích: select username from admin where address='Ha Noi' Vậy nếu ta viết thế này thì sẽ có chuyện gì xảy ra nhỉ Trích: select username from admin where address=''or 1=1 ' Kết quả cũng show ra như trên. Như trên ta thấy đáng lẽ ra address mang giá trị là Ha Noi nhưng nếu ta thay giá trị đó bằng 'or 1=1 thì dấu quote đằng trước sẽ là 2 dấu '' có nghĩa giá trị trong đó rỗng . Và sau nó là or 1=1 , như ta đã biết or là câu lệnh điều kiện và ở đây có nghĩa là hoặc. Mà giá trị đằng trước là rỗng nên SQL sẽ chạy tiếp theo gặp điều kiện or thì tất nhiên sẽ thực thi lệnh này mà or 1=1 , 1=1 thì luôn đúng , còn dấu sẽ biến tất cả những thứ đằng sau thành chú thích (trong SQL quy định sau dấu là câu chú thích). Như vậy câu truy vấn hoàn toàn hợp lệ và ko có lỗi gì cả và nó sẽ show cho ta toàn bộ username của admin , đến đây chắc bạn đã hiểu rồi chứ Còn về câu lệnh UNION : Như đã biết câu lệnh UNION dùng để gộp chuỗi lại với nhau và các giá trị trong 2 chuỗi đó phải là tương ứng . Ví dụ : Trích: select username from admin UNION select [password] from admin Câu lệnh trên sẽ show cho ta thấy các username và password trong table admin. Khi tạo table bạn để ý thấy username ta gán thuộc tính là nvarchar , vậy nếu khi truy vấn bằng UNION , dòng thứ 2 bạn thay [password] thành số bất kì (ví dụ 1) thì sẽ báo lỗi sau : Câu truy vấn : Trích: select username from admin UNION select 1 from admin Error : Trích: Syntax error converting the nvarchar value 'admin' to a column of data type int. Hô hô error báo sai cú pháp ,ko thể chuyển từ kiểu dữ liệu nvarchar (chuỗi) sang int (số) được vì dòng thứ 2 ta thay thế giá trị là kiểu int > ko cùng loại dữ liệu >error và show ra cái table admin . Còn khi áp dụng trên web thì đây là dấu hiệu cho thấy table admin là có tồn tại . Đây chỉ là một số ví dụ để các bạn có thể hiểu về SQL injection ,mong giúp được

Ngày đăng: 03/07/2014, 09:20

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan