Cơ sở dữ liệu SQL Thiết kết cơ sở dữ liệu cho người mới bắt đầu

34 2 0
Cơ sở dữ liệu SQL  Thiết kết cơ sở dữ liệu cho người mới bắt đầu

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Cơ sở dữ liệu SQL 1 Tạo CSDL (Câu lệnh CREATE DATABASE) 2 2 Câu lệnh SQL DROP DATABASE 2 3 Câu lệnh BACKUP DATABASE cho SQL Server 2 4 Câu lệnh CREATE TABLE 3 5 Câu lệnh SQL DROP TABLE 5 6 Câu lệnh AL.

Cơ sở liệu SQL Tạo CSDL (Câu lệnh CREATE DATABASE) .2 Câu lệnh SQL DROP DATABASE Câu lệnh BACKUP DATABASE cho SQL Server Câu lệnh CREATE TABLE Câu lệnh SQL: DROP TABLE .5 Câu lệnh ALTER TABLE .5 Các ràng buộc SQL .8 Ràng buộc NOT NULL 9 Ràng buộc UNIQUE SQL 10 10 Ràng buộc chính: PRIMARY KEY 11 11 Ràng buộc FOREIGN KEY 13 12 Ràng buộc CHECK 16 13 Ràng buộc SQL: DEFAULT 18 14 Câu lệnh SQL: CREATE INDEX 20 15 Trường SQL AUTO INCREMENT .21 16 Câu lệnh với DATE 24 17 SQL Views 26 18 SQL INJECTION 28 Cơ sở liệu SQL Tạo CSDL (Câu lệnh CREATE DATABASE) Câu CREATE DATABASElệnh sử dụng để tạo sở liệu SQL Cú pháp: CREATE DATABASE databasename; o Ví dụ: tạo sở liệu CREATE DATABASE testDB; Mẹo: Đảm bảo bạn có đặc quyền quản trị viên trước tạo sở liệu Sau sở liệu tạo, bạn kiểm tra danh sách sở liệu lệnh SQL sau SHOW DATABASES Câu lệnh SQL DROP DATABASE Câu DROP DATABASElệnh sử dụng để loại bỏ sở liệu SQL có Cú pháp: DROP DATABASE databasename; Lưu ý: Hãy cẩn thận trước đánh rơi sở liệu Xóa sở liệu làm thông tin đầy đủ lưu trữ sở liệu! o Ví dụ DROP DATABASE DROP DATABASE testDB; Mẹo: Đảm bảo bạn có đặc quyền quản trị viên trước bỏ sở liệu Sau sở liệu bị loại bỏ, bạn kiểm tra danh sách sở liệu lệnh SQL sau SHOW DATABASES:; Câu lệnh BACKUP DATABASE cho SQL Server Câu lệnh BACKUP DATABASE sử dụng SQL Server để tạo lưu đầy đủ sở liệu SQL có Câu lệnh BACKUP DATABASE với DIFFERENTIAL Một lưu khác biệt lưu phần sở liệu thay đổi kể từ lần lưu sở liệu đầy đủ cuối Cú pháp: BACKUP DATABASE databasename TO DISK = 'filepath' WITH DIFFERENTIAL; o Ví dụ BACKUP DATABASE Câu lệnh SQL sau tạo lưu đầy đủ sở liệu có "testDB" vào đĩa D: BACKUP DATABASE testDB TO DISK = 'D:\backups\testDB.bak'; Mẹo: Luôn lưu sở liệu vào ổ đĩa khác với sở liệu thực Sau đó, bạn gặp cố đĩa, bạn không bị tệp lưu với sở liệu o Ví dụ BACKUP DATABASE DIFFERENTIAL Câu lệnh SQL sau tạo lưu khác biệt sở liệu "testDB": BACKUP DATABASE testDB TO DISK = 'D:\backups\testDB.bak' WITH DIFFERENTIAL; Mẹo: Sao lưu chênh lệch làm giảm thời gian lưu (vì thay đổi lưu) Câu lệnh CREATE TABLE Câu CREATE TABLE lệnh sử dụng để tạo bảng sở liệu Cú pháp: CREATE TABLE table_name ( column1 datatype, column2 datatype, column3 datatype, ); Các tham số cột định tên cột bảng Tham số kiểu liệu định kiểu liệu mà cột giữ (ví dụ: varchar, số ngun, ngày tháng, v.v.) Mẹo: Để có nhìn tổng quan kiểu liệu có sẵn, chuyển đến phần Tham khảo đầy đủ kiểu liệu o Ví dụ SQL CREATE TABLE o Ví dụ sau tạo bảng có tên "Người" chứa năm cột: PersonID, LastName, FirstName, Address City: CREATE TABLE Persons ( PersonID int, LastName varchar(255), FirstName varchar(255), Address varchar(255), City varchar(255) ); Cột PersonID có kiểu int chứa số nguyên Các cột LastName, FirstName, Address City thuộc loại varchar chứa ký tự độ dài tối đa cho trường 255 ký tự Bảng " Persons" trống trông này: Mẹo: Bảng " Persons" trống lấp đầy liệu câu lệnh SQL INSERT INTO Tạo bảng bảng khác Bản bảng có tạo cách sử dụng CREATE TABLE Bảng có định nghĩa cột giống Tất cột cột cụ thể chọn Nếu bạn tạo bảng cách sử dụng bảng có, bảng lấp đầy giá trị có từ bảng cũ Cú pháp: CREATE TABLE new_table_name AS SELECT column1, column2, FROM existing_table_name WHERE ; SQL sau tạo bảng có tên "TestTables" (là bảng "Khách hàng"): o Ví dụ: CREATE TABLE TestTable AS SELECT customername, contactname FROM customers; Câu lệnh SQL: DROP TABLE Câu lệnh DROP TABLE sử dụng để loại bỏ bảng có sở liệu Cú pháp: DROP TABLE table_name; Lưu ý : Hãy cẩn thận trước xóa bàng Xóa bảng làm thơng tin đầy đủ lưu trữ bảng! o Ví dụ SQL DROP TABLE Câu lệnh SQL sau loại bỏ bảng có " Shippers": DROP TABLE Shippers; BẢNG TRUNCATE SQL Câu lệnh TRUNCATE TABLE sử dụng để xóa liệu bên bảng, khơng xóa bảng Cú pháp: TRUNCATE TABLE table_name; Câu lệnh ALTER TABLE Câu ALTER TABLElệnh sử dụng để thêm, xóa sửa đổi cột bảng có Câu ALTER TABLElệnh sử dụng để thêm bỏ ràng buộc khác bảng có ALTER TABLE - THÊM cột Để thêm cột bảng, sử dụng cú pháp sau: ALTER TABLE table_name ADD column_name datatype; SQL sau thêm cột "Email" vào bảng "Khách hàng": ALTER TABLE Customers ADD Email varchar(255); ALTER TABLE - DROP COLUMN Để xóa cột bảng, sử dụng cú pháp sau (lưu ý số hệ thống sở liệu khơng cho phép xóa cột): ALTER TABLE table_name DROP COLUMN column_name; SQL sau xóa cột "Email" khỏi bảng "Khách hàng": o Ví dụ ALTER TABLE Customers DROP COLUMN Email; ALTER TABLE - ALTER / MODIFY COLUMN Để thay đổi kiểu liệu cột bảng, sử dụng cú pháp sau: SQL Server / MS Access: ALTER TABLE table_name ALTER COLUMN column_name datatype; SQL / Oracle (phiên trước 10G): ALTER TABLE table_name MODIFY COLUMN column_name datatype; Oracle 10G trở lên: ALTER TABLE table_name MODIFY column_name datatype; o Ví dụ ALTER TABLE -SQL Nhìn vào bảng " Persons ": Bây muốn thêm cột có tên "DateOfBirth" bảng " Persons" Chúng sử dụng câu lệnh SQL sau: ALTER TABLE Persons ADD DateOfBirth date; Lưu ý cột mới, "DateOfBirth", thuộc loại ngày tháng chứa ngày tháng Kiểu liệu định loại liệu mà cột chứa Để có tài liệu tham khảo đầy đủ tất kiểu liệu có sẵn MS Access, MySQL SQL Server, truy cập tài liệu tham khảo Kiểu liệu đầy đủ Bảng " Persons " trông này: o Ví dụ thay đổi kiểu liệu Bây muốn thay đổi kiểu liệu cột có tên "DateOfBirth" bảng " Persons " Chúng sử dụng câu lệnh SQL sau: ALTER TABLE Persons ALTER COLUMN DateOfBirth year; Lưu ý: cột "DateOfBirth" thuộc loại năm chứa năm định dạng hai bốn chữ số o Ví dụ DROP COLUMN Tiếp theo, chúng tơi muốn xóa cột có tên "DateOfBirth" bảng "Người" Chúng tơi sử dụng câu lệnh SQL sau: ALTER TABLE Persons DROP COLUMN DateOfBirth; Bảng " Persons " trông này: Các ràng buộc SQL Các ràng buộc SQL sử dụng để định quy tắc cho liệu bảng SQL tạo ràng buộc Các ràng buộc định bảng tạo CREATE TABLEcâu lệnh sau bảng tạo ALTER TABLEcâu lệnh Cú pháp CREATE TABLE table_name ( column1 datatype constraint, column2 datatype constraint, column3 datatype constraint, ); Các ràng buộc SQL Các ràng buộc SQL sử dụng để định quy tắc cho liệu bảng Các ràng buộc sử dụng để giới hạn loại liệu vào bảng Điều đảm bảo tính xác độ tin cậy liệu bảng Nếu có vi phạm ràng buộc hành động liệu, hành động bị hủy bỏ Ràng buộc cấp cột cấp bảng Các ràng buộc mức cột áp dụng cho cột ràng buộc mức bảng áp dụng cho toàn bảng Các ràng buộc sau thường sử dụng SQL:  NOT NULL- Đảm bảo cột khơng có giá trị NULL  UNIQUE- Đảm bảo tất giá trị cột khác  PRIMARY KEY- Sự kết hợp a NOT NULLvà UNIQUE Xác định hàng bảng  FOREIGN KEY - Ngăn chặn hành động phá hủy liên kết bảng  CHECK- Đảm bảo giá trị cột thỏa mãn điều kiện cụ thể  DEFAULT- Đặt giá trị mặc định cho cột khơng có giá trị định  CREATE INDEX- Dùng để tạo lấy liệu từ sở liệu nhanh chóng Ràng buộc NOT NULL Theo mặc định, cột chứa giá trị NULL Ràng NOT NULLbuộc buộc cột KHÔNG chấp nhận giá trị NULL Điều buộc trường phải chứa giá trị, có nghĩa bạn khơng thể chèn ghi cập nhật ghi mà không thêm giá trị vào trường SQL NOT NULL CREATE TABLE SQL sau đảm bảo cột "ID", "LastName" "FirstName" KHÔNG chấp nhận giá trị NULL bảng " Persons " tạo: o Ví dụ CREATE TABLE Persons ( ID int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255) NOT NULL, Age int ); SQL NOT NULL ALTER TABLE Để tạo NOT NULL ràng buộc cột "Tuổi" bảng "Người" tạo, sử dụng SQL sau: ALTER TABLE Persons MODIFY Age int NOT NULL; Ràng buộc UNIQUE SQL Ràng buộc UNIQUE đảm bảo tất giá trị cột khác Cả ràng buộc UNIQUEvà PRIMARY KEYràng buộc đảm bảo tính cho cột tập hợp cột Một PRIMARY KEYràng buộc tự động có UNIQUEràng buộc Tuy nhiên, bạn có nhiều UNIQUEràng buộc bảng, có PRIMARY KEYràng buộc cho bảng Ràng buộc DUY NHẤT SQL TẠO BẢNG SQL sau tạo UNIQUEràng buộc cột "ID" bảng "Người" tạo: SQL Server / Oracle / MS Access: CREATE TABLE Persons ( ID int NOT NULL UNIQUE, LastName varchar(255) NOT NULL, FirstName varchar(255), Age int ); MySQL: CREATE TABLE Persons ( ID int NOT NULL, LastName varchar(255) NOT NULL, 10 Để loại bỏ ràng buộc DEFAULT, sử dụng SQL sau: MySQL: ALTER TABLE Persons ALTER City DROP DEFAULT; SQL Server / Oracle / MS Access: ALTER TABLE Persons ALTER COLUMN City DROP DEFAULT; 14 Câu lệnh SQL: CREATE INDEX Câu lệnh CREATE INDEX sử dụng để tạo mục bảng Các mục sử dụng để lấy liệu từ sở liệu nhanh so với mục khác Người dùng khơng thể nhìn thấy mục, chúng sử dụng để tăng tốc độ tìm kiếm / truy vấn Lưu ý: Cập nhật bảng có mục nhiều thời gian cập nhật bảng khơng có mục (vì mục cần cập nhật) Vì vậy, tạo mục cột thường xuyên tìm kiếm Cú pháp CREATE INDEX Tạo mục bảng Các giá trị trùng lặp phép: CREATE INDEX index_name ON table_name (column1, column2, ); TẠO Cú pháp INDEX DUY NHẤT Tạo mục bảng Các giá trị trùng lặp không phép: CREATE UNIQUE INDEX index_name ON table_name (column1, column2, ); Lưu ý: Cú pháp để tạo mục khác sở liệu khác Do đó: Kiểm tra cú pháp để tạo mục sở liệu bạn o Ví dụ CREATE INDEX 20 Câu lệnh SQL bên tạo mục có tên "idx_lastname" cột "LastName" bảng "Người": CREATE INDEX idx_lastname ON Persons (LastName); Nếu bạn muốn tạo mục tổ hợp cột, bạn liệt kê tên cột dấu ngoặc đơn, phân tách dấu phẩy: CREATE INDEX idx_pname ON Persons (LastName, FirstName); DROP INDEX Câu lệnh DROP INDEX sử dụng để xóa mục bảng Truy cập MS: DROP INDEX index_name ON table_name; Máy chủ SQL: DROP INDEX table_name.index_name; DB2 / Oracle: DROP INDEX index_name; MySQL: ALTER TABLE table_name DROP INDEX index_name; 15 Trường SQL AUTO INCREMENT Tự động tăng cho phép số tạo tự động ghi chèn vào bảng Thường trường khóa mà muốn tạo tự động ghi chèn vào Cú pháp cho MySQL 21 Câu lệnh SQL sau xác định cột "Personid" trường khóa tự động tăng bảng "Người": CREATE TABLE Persons ( Personid int NOT NULL AUTO_INCREMENT, LastName varchar(255) NOT NULL, FirstName varchar(255), Age int, PRIMARY KEY (Personid) ); MySQL sử dụng từ khóa AUTO_INCREMENT để thực tính tự động tăng Theo mặc định, giá trị bắt đầu cho AUTO_INCREMENT tăng lên cho ghi Để cho phép AUTO_INCREMENT chuỗi bắt đầu giá trị khác, sử dụng câu lệnh SQL sau: ALTER TABLE Persons AUTO_INCREMENT=100; Để chèn ghi vào bảng "Người", chúng tơi KHƠNG phải định giá trị cho cột "Personid" (một giá trị thêm tự động): INSERT INTO Persons (FirstName,LastName) VALUES ('Lars','Monsen'); Câu lệnh SQL chèn ghi vào bảng "Người" Cột "Personid" định giá trị Cột "FirstName" đặt thành "Lars" cột "LastName" đặt thành "Monsen" Cú pháp cho SQL Server Câu lệnh SQL sau xác định cột "Personid" trường khóa tự động tăng bảng "Người": CREATE TABLE Persons ( Personid int IDENTITY(1,1) PRIMARY KEY, LastName varchar(255) NOT NULL, FirstName varchar(255), Age int ); 22 MS SQL Server sử dụng IDENTITYtừ khóa để thực tính tự động tăng Trong ví dụ trên, giá trị bắt đầu cho IDENTITYlà tăng lên cho ghi Mẹo: Để định cột "Personid" phải bắt đầu giá trị 10 tăng lên 5, thay đổi thành IDENTITY(10,5) Để chèn ghi vào bảng "Người", chúng tơi KHƠNG phải định giá trị cho cột "Personid" (một giá trị thêm tự động): INSERT INTO Persons (FirstName,LastName) VALUES ('Lars','Monsen'); Câu lệnh SQL chèn ghi vào bảng "Người" Cột "Personid" định giá trị Cột "FirstName" đặt thành "Lars" cột "LastName" đặt thành "Monsen" Cú pháp truy cập Câu lệnh SQL sau xác định cột "Personid" trường khóa tự động tăng bảng "Người": CREATE TABLE Persons ( Personid AUTOINCREMENT PRIMARY KEY, LastName varchar(255) NOT NULL, FirstName varchar(255), Age int ); MS Access sử dụng AUTOINCREMENTtừ khóa để thực tính tự động tăng Theo mặc định, giá trị bắt đầu cho AUTOINCREMENTlà tăng lên cho ghi Mẹo: Để định cột "Personid" phải bắt đầu giá trị 10 tăng lên 5, thay đổi tự động tăng thành AUTOINCREMENT(10,5) Để chèn ghi vào bảng "Người", KHÔNG phải định giá trị cho cột "Personid" (một giá trị thêm tự động): INSERT INTO Persons (FirstName,LastName) VALUES ('Lars','Monsen'); 23 Câu lệnh SQL chèn ghi vào bảng "Người" Cột "Personid" định giá trị Cột "FirstName" đặt thành "Lars" cột "LastName" đặt thành "Monsen" Cú pháp cho Oracle Trong Oracle, mã phức tạp chút Bạn phải tạo trường tăng tự động với đối tượng chuỗi (đối tượng tạo chuỗi số) Sử dụng CREATE SEQUENCE cú pháp sau: CREATE SEQUENCE seq_person MINVALUE START WITH INCREMENT BY CACHE 10; Đoạn mã tạo đối tượng trình tự gọi seq_woman, bắt đầu tăng lên Nó lưu vào đệm tối đa 10 giá trị cho hiệu suất Tùy chọn đệm định số lượng giá trị trình tự lưu trữ nhớ để truy cập nhanh Để chèn ghi vào bảng "Người", phải sử dụng hàm (hàm lấy giá trị từ chuỗi seq_ person): INSERT INTO Persons (Personid,FirstName,LastName) VALUES (seq_person.nextval,'Lars','Monsen'); Câu lệnh SQL chèn ghi vào bảng "Người" Cột "Personid" gán số từ chuỗi seq_ person Cột "FirstName" đặt thành "Lars" cột "LastName" đặt thành "Monsen" 16 Câu lệnh với DATE Phần khó làm việc với ngày tháng đảm bảo định dạng ngày bạn cố gắng chèn khớp với định dạng cột ngày tháng sở liệu Miễn liệu bạn chứa phần ngày tháng, truy vấn bạn hoạt động mong đợi Tuy nhiên, liên quan đến phần thời gian, phức tạp Các kiểu liệu ngày SQL 24 MySQL kèm với kiểu liệu sau để lưu trữ ngày giá trị ngày / sở liệu:  DATE- định dạng YYYY-MM-DD  DATETIME- định dạng: YYYY-MM-DD HH: MI: SS  TIMESTAMP- định dạng: YYYY-MM-DD HH: MI: SS  YEAR- định dạng YYYY YY SQL Server kèm với kiểu liệu sau để lưu trữ ngày giá trị ngày / sở liệu:  DATE- định dạng YYYY-MM-DD  DATETIME- định dạng: YYYY-MM-DD HH: MI: SS  SMALLDATETIME- định dạng: YYYY-MM-DD HH: MI: SS  TIMESTAMP- định dạng: số Lưu ý: Loại ngày chọn cho cột bạn tạo bảng sở liệu mình! SQL làm việc với DATE Nhìn vào bảng sau: Bảng đơn hàng Bây muốn chọn ghi có OrderDate "2008-11-11" từ bảng 25 Chúng sử dụng SELECTcâu lệnh sau: SELECT * FROM Orders WHERE OrderDate='2008-11-11' Tập hợp kết giống sau: Lưu ý: Có thể dễ dàng so sánh hai ngày khơng có thành phần thời gian liên quan! Bây giờ, giả sử bảng "Đơn hàng" trông giống (lưu ý thành phần thời gian thêm vào cột "Ngày đặt hàng"): Nếu sử dụng SELECTcâu lệnh tương tự trên: SELECT * FROM Orders WHERE OrderDate='2008-11-11' không nhận kết quả! Điều truy vấn tìm kiếm ngày khơng có phần thời gian Mẹo: Để giữ cho truy vấn bạn đơn giản dễ trì, khơng sử dụng thành phần thời gian ngày tháng bạn, trừ bạn phải làm vậy! 17 SQL Views Câu lệnh SQL CREATE VIEW Trong SQL, dạng xem bảng ảo dựa tập kết câu lệnh SQL 26 Một dạng xem chứa hàng cột, giống bảng thực Các trường dạng xem trường từ nhiều bảng thực sở liệu Bạn thêm câu lệnh hàm SQL vào dạng xem trình bày liệu thể liệu đến từ bảng Một khung nhìn tạo CREATE VIEW câu lệnh Cú pháp CREATE VIEW CREATE VIEW view_name AS SELECT column1, column2, FROM table_name WHERE condition; Lưu ý: Chế độ xem hiển thị liệu cập nhật! Cơ sở liệu tạo lại dạng xem, người dùng truy vấn o Ví dụ chế độ xem tạo SQL SQL sau tạo dạng xem hiển thị tất khách hàng từ Brazil: o Ví dụ CREATE VIEW [Brazil Customers] AS SELECT CustomerName, ContactName FROM Customers WHERE Country = 'Brazil'; Chúng ta truy vấn chế độ xem sau: SELECT * FROM [Brazil Customers]; SQL sau tạo dạng xem chọn sản phẩm bảng "Sản phẩm" có giá cao giá trung bình: o Ví dụ CREATE VIEW [Products Above Average Price] AS SELECT ProductName, Price 27 FROM Products WHERE Price > (SELECT AVG(Price) FROM Products); Chúng ta truy vấn chế độ xem sau: o Ví dụ SELECT * FROM [Products Above Average Price]; SQL Updating a View Một chế độ xem cập nhật với CREATE OR REPLACE VIEW Cú pháp CREATE OR REPLACE VIEW – SQL (tạo thay thế) CREATE OR REPLACE VIEW view_name AS SELECT column1, column2, FROM table_name WHERE condition; SQL sau thêm cột "Thành phố" vào chế độ xem "Khách hàng Brazil": o Ví dụ CREATE OR REPLACE VIEW [Brazil Customers] AS SELECT CustomerName, ContactName, City FROM Customers WHERE Country = 'Brazil'; SQL Dropping a View Một chế độ xem bị xóa với DROP VIEW câu lệnh Cú pháp DROP VIEW SQL DROP VIEW view_name; SQL sau loại bỏ chế độ xem "Khách hàng Brazil": o Ví dụ DROP VIEW [Brazil Customers]; 18 SQL INJECTION SQL injection kỹ thuật chèn mã phá hủy sở liệu bạn 28 SQL injection kỹ thuật hack web phổ biến SQL injection vị trí mã độc hại câu lệnh SQL, thông qua đầu vào trang web SQL trang web Việc chèn SQL thường xảy bạn yêu cầu người dùng nhập vào, tên người dùng / userrid họ thay tên / id, người dùng cung cấp cho bạn câu lệnh SQL mà bạn vơ tình chạy sở liệu Hãy xem ví dụ sau tạo SELECTcâu lệnh cách thêm biến (txtUserId) vào chuỗi chọn Biến tìm nạp từ đầu vào người dùng (getRequestString): o Ví dụ txtUserId = getRequestString("UserId"); txtSQL = "SELECT * FROM Users WHERE UserId = " + txtUserId; Phần cịn lại chương mơ tả nguy tiềm ẩn sử dụng đầu vào người dùng câu lệnh SQL SQL Injection dựa = ln Nhìn lại ví dụ Mục đích ban đầu mã tạo câu lệnh SQL để chọn người dùng, với id người dùng định Nếu khơng có ngăn người dùng nhập "sai" đầu vào, người dùng nhập số đầu vào "thông minh" sau: 105 OR 1=1 Tên người dùng: Sau đó, câu lệnh SQL giống sau: Sau đó, câu lệnh SQL giống sau: SELECT * FROM Users WHERE UserId = 105 OR 1=1; SQL hợp lệ trả TẤT CẢ hàng từ bảng "Người dùng", OR = ln TRUE 29 Ví dụ có nguy hiểm khơng? Điều xảy bảng "Người dùng" chứa tên mật khẩu? Câu lệnh SQL giống sau: SELECT UserId, Name, Password FROM Users WHERE UserId = 105 or 1=1; Một tin tặc có quyền truy cập vào tất tên người dùng mật sở liệu, cách cần chèn 105 OR = vào trường đầu vào SQL Injection dựa "" = "" ln Đây ví dụ đăng nhập người dùng trang web: o Ví dụ uName = getRequestString("username"); uPass = getRequestString("userpassword"); sql = 'SELECT * FROM Users WHERE Name ="' + uName + '" AND Pass ="' + uPass + '"' Kết SELECT * FROM Users WHERE Name ="John Doe" AND Pass ="myPass" Một tin tặc có quyền truy cập vào tên người dùng mật sở liệu cách cần chèn "HOẶC" "=" vào hộp văn tên người dùng mật khẩu: 30 Mã máy chủ tạo câu lệnh SQL hợp lệ sau: Kết SELECT * FROM Users WHERE Name ="" or ""="" AND Pass ="" or ""="" SQL hợp lệ trả tất hàng từ bảng "Người dùng", HOẶC "" = "" TRUE SQL Injection dựa câu lệnh SQL theo lô Hầu hết sở liệu hỗ trợ câu lệnh SQL theo lơ Một loạt câu lệnh SQL nhóm gồm hai nhiều câu lệnh SQL, phân tách dấu chấm phẩy Câu lệnh SQL bên trả tất hàng từ bảng "Người dùng", sau xóa bảng "Nhà cung cấp" o Ví dụ SELECT * FROM Users; DROP TABLE Suppliers Hãy xem ví dụ sau: o Ví dụ txtUserId = getRequestString("UserId"); txtSQL = "SELECT * FROM Users WHERE UserId = " + txtUserId; Và đầu vào sau: 31 Câu lệnh SQL hợp lệ trông giống sau: Kết SELECT * FROM Users WHERE UserId = 105; DROP TABLE Suppliers; Sử dụng tham số SQL để bảo vệ Để bảo vệ trang web khỏi SQL injection, bạn sử dụng tham số SQL Tham số SQL giá trị thêm vào truy vấn SQL thời điểm thực thi, theo cách kiểm sốt o Ví dụ ASP.NET Razor txtUserId = getRequestString("UserId"); txtSQL = "SELECT * FROM Users WHERE UserId = @0"; db.Execute(txtSQL,txtUserId); Lưu ý tham số biểu diễn câu lệnh SQL dấu @ Công cụ SQL kiểm tra tham số để đảm bảo với cột xử lý theo nghĩa đen, khơng phải phần SQL thực thi o Một vi dụ khác txtNam = getRequestString("CustomerName"); txtAdd = getRequestString("Address"); txtCit = getRequestString("City"); txtSQL = "INSERT INTO Customers (CustomerName,Address,City) Values(@0,@1,@2)"; db.Execute(txtSQL,txtNam,txtAdd,txtCit); o Các ví dụ Các ví dụ sau cho thấy cách xây dựng truy vấn tham số hóa số ngơn ngữ web phổ biến  CHỌN BÁO CÁO TRONG ASP.NET: txtUserId = getRequestString("UserId"); sql = "SELECT * FROM Customers WHERE CustomerId = @0"; command = new SqlCommand(sql); 32 command.Parameters.AddWithValue("@0",txtUserId); command.ExecuteReader();  CHÈN VÀO BÁO CÁO TRONG ASP.NET: txtNam = getRequestString("CustomerName"); txtAdd = getRequestString("Address"); txtCit = getRequestString("City"); txtSQL = "INSERT INTO Customers (CustomerName,Address,City) Values(@0,@1,@2)"; command = new SqlCommand(txtSQL); command.Parameters.AddWithValue("@0",txtNam); command.Parameters.AddWithValue("@1",txtAdd); command.Parameters.AddWithValue("@2",txtCit); command.ExecuteNonQuery();  CHÈN VÀO BÁO CÁO TRONG PHP: $stmt = $dbh->prepare("INSERT INTO Customers (CustomerName,Address,City) VALUES (:nam, :add, :cit)"); $stmt->bindParam(':nam', $txtNam); $stmt->bindParam(':add', $txtAdd); $stmt->bindParam(':cit', $txtCit); $stmt->execute(); 17 SQL Hosting Lưu trữ SQL Nếu bạn muốn trang web lưu trữ truy xuất liệu từ sở liệu, máy chủ web bạn phải có quyền truy cập vào hệ thống sở liệu sử dụng ngôn ngữ SQL Nếu máy chủ web bạn lưu trữ Nhà cung cấp dịch vụ Internet (ISP), bạn phải tìm kiếm gói lưu trữ SQL Cơ sở liệu lưu trữ SQL phổ biến MS SQL Server, Oracle, MySQL MS Access 33 Máy chủ MS SQL SQL Server Microsoft phần mềm sở liệu phổ biến cho trang web hướng sở liệu với lưu lượng truy cập cao SQL Server hệ thống sở liệu SQL mạnh mẽ, mạnh mẽ đầy đủ tính Oracle Oracle phần mềm sở liệu phổ biến cho trang web hướng sở liệu với lưu lượng truy cập cao Oracle hệ thống sở liệu SQL mạnh mẽ, mạnh mẽ đầy đủ tính MySQL MySQL phần mềm sở liệu phổ biến cho trang web MySQL hệ thống sở liệu SQL mạnh mẽ, mạnh mẽ đầy đủ tính MySQL giải pháp thay rẻ tiền cho giải pháp đắt tiền Microsoft Oracle Truy cập MS Khi trang web yêu cầu sở liệu đơn giản, Microsoft Access giải pháp MS Access không phù hợp với lưu lượng truy cập cao không mạnh MySQL, SQL Server Oracle 34 ... kiếm gói lưu trữ SQL Cơ sở liệu lưu trữ SQL phổ biến MS SQL Server, Oracle, MySQL MS Access 33 Máy chủ MS SQL SQL Server Microsoft phần mềm sở liệu phổ biến cho trang web hướng sở liệu với lưu lượng... cập cao SQL Server hệ thống sở liệu SQL mạnh mẽ, mạnh mẽ đầy đủ tính Oracle Oracle phần mềm sở liệu phổ biến cho trang web hướng sở liệu với lưu lượng truy cập cao Oracle hệ thống sở liệu SQL mạnh... viên trước tạo sở liệu Sau sở liệu tạo, bạn kiểm tra danh sách sở liệu lệnh SQL sau SHOW DATABASES Câu lệnh SQL DROP DATABASE Câu DROP DATABASElệnh sử dụng để loại bỏ sở liệu SQL có Cú pháp:

Ngày đăng: 12/08/2022, 16:34

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

Tài liệu liên quan