Sơ đồ là 1 cửa sổ hiển thị mối quan hệ giữa các bảng của 1 CSDL. Tạo sơ đồ ta thực hiện như sau:
Trong cửa sổ Object Explorer chọn tên database cần tạo -> Click phải vào Database Diagrams -> Chọn New Database Diagram
37 Sau khi chọn New Database Diagram sẽ xuất hiện hộp thoại để Add các bảng, sau khi Add xong chọn Close.
Để thiết lập mối quan hệ giữa các bảng ta chọn cột dữ liệu của cột làm khóa chính trong bảng cha (parent table) và kéo nó đến khóa ngoại trong bảng con (child table)
Hình 2.11 Sơ đồ liên kết giữa 2 bảng
Sau khi kéo mối quan hệ cho 2 bảng sẽ xuất hiện hộp thoại như hình trên
38 Khi chọn OK giữa 2 bảng sẽ xuất hiện một kết nối giữa 2 bảng.Trong cùng một cách, bạn có thể tạo mối quan hệ khác. Khi bạn đã hoàn tất, bạn có thể lưu và đóng sơ đồ.
39
BÀI 4: QUẢN LÝ BẢO MẬT TRONG SQL SERVER 4.1 Giới thiệu bảo mật SQL Server
Đầu tiên người dung phải kết nối và đăng nhập vào server bằng cách sử dụng chương trình ứng dụng hoặc Management Studio. ID đăng nhập có thể được xác thực theo một trong hai cách sau đây.
Khi người dung đã đăng nhập vào SQL Server, dữ liệu mà người dung được phép truy cập vào những thao tác xác định trên một đối tượng CSDL cụ thể, hoặc người dùng thực hiện những thao tác xác định trên một đối tượng cơ sở dữ liệu cụ thể, hoặc cấp quyền cơ sở dữ liệu để người dùng thực thi các thao tác cơ sở dữ liệu được chỉđịnh. Ngoài ra, có thểđịnh nghĩa một tập các quyền được gọi là vai trò. Khi đó, có thể gán nhiều người dùng vào một vai trò để cấp cho họ tất cả những quyền liên quan đến vai trò đó. Iệc này sẽ làm giảm sốlượng quyền mà bạn phải cấp cho mỗi người dùng, khiên việc quản lý bảo mật trởnên đơn giản hơn. Với lý do này, vai trò được sử dụng trong hầu hết hệ thống.
Cách thứ nhất, có thể thực hiện thông qua việc thực thi các câu lệnh SQL và Stored procedure hệ thống từ Query Editor, hoặc sử dụng tiện ích SQLCMD.
Cách thứ hai, có thể dùng giao diện đồ họa trong Management Studio. Với cách này việc thực hiện thao tác bảo mật trở nên dễ dàng hơn, nhưng có thể tốn thời gian hơn.
4.2 Một số khái niệm cơ bản Login và User: Login và User:
Login: Dùng để truy cập vào hệ thống SQL Server, các Login chỉ mới có quyền truy cập vào Server chứ chưa hẳn có quyền truy cập vào các Database trên
Server, các quyền truy cập vào Database được gắn liền với các người dùng CSDL (Users). Để xem tất cả các login của Server, dùng
40
User:Mỗi Database có một danh sách các người dùng được phép truy cập CSDL của mình, mỗi user luôn được gắn (mapped) với một login ở mức Server. Khi bạn đăng nhập vào SQL Server thông qua login này, bạn sẽ có quyền truy cập vào database theo quyền hạn mà user tương ứng với nó được cấp. Mỗi login có thể gắn với một hoặc nhiều user với quyền hạn khác nhau trên các Database.
Để xem tất cả các users của một database, có thể dùng lệnh exec sp_helpuser hoặc trong SSMS (Database/Security/Users)
Server role (vai trò phía Server)
Role là tập hợp một số các quyền được nhóm lại và có một tên đại diện để thuận tiện cho việc quản lý. Server role là nhóm các quyền ở mức server mà login khi được cấp sẽ có thể thực hiện một sốthao tác xác định ở mức server. Các Server Roles trong SQL Server như sau:
sysadmin bulkadmin dbcreator diskadmin processadmin securityadmin serveradmin setupadmin
Trong đó sysadmin có quyền cao nhất (toàn quyền) hoạt động trong server, dbcreator có quyền tạo database…
41
Database role (vai trò phía Database)
Database role tập hợp các quyền truy xuất database thành từng nhóm và được đại diện bởi một tên dùng để cấp phát quyền truy cập CSDL cho các users. Sau đây là các Database role trong SQL Server
db_owner db_securityadmin db_accessadmin db_backupoperator db_ddladmin db_datawriter db_datareader db_denydatawriter db_denydatareader
Tên gọi của các Database Roles đã cho biết phần nào quyền truy cập Database. Chẳng hạn, db_datareader có quyền đọc dữ liệu từ tất cả các bảng, role
db_datawriter có quyền ghi vào tất cả các bảng, role db_owner có quyền cao nhất (toàn quyền) trong database.
Authentication (xác thực)
SQL Server cho phép xác thực đăng nhập vào hệ thống bằng hai cơ chế là windows authentication và SQL Server authentication. SQL Server sẽ yêu cầu bạn chọn cơ chế xác thực windows hay SQL Server khi bạn tạo một login mới. Nếu chọn xác thực bằng windows authentication, bạn phải cung cấp một
windows account và SQL Server sẽ chỉ lưu tên của account đó trong danh sách login. Nếu chọn SQL Server authentication, bạn cần cung cấp login name và password và cả hai được lưu trong SQL Server.
42
4.3 Cấp phát và thu hồi quyền trong SQL bằng TSQL
Cấp phát quyền truy cập (GRANT) GRANT PRIVILEGES|ALL ON DatabaseObjects
TO USERS
[WITH GRANT OPTION ]
Trong đó:
PRIVILEGES : Các quyền truy cập Database (Select, Insert, Update, Excute…) DatabaseObjects: Các đối tượng cơ sở dữ liệu (Table, View, Stored Procedure, Functions…)
USERS: Người dùng| nhóm người dùng
WITH GRANT OPTION: Cho phép người dùng chuyển tiếp quyền cho người dùng khác
Ví dụ: Cấp phát quyền SELECT, UPDATE trên bảng ACCOUNTS cho người dùng ‘khoa’ và cho phép người dùng này có thể cấp phát các quyền này cho người dùng khác
GRANTSELECT, UPDATE
ON ACCOUNTS
TO khoa
43
Thu hồi quyền truy cậpcơ sở dữ liệu
REVOKE PRIVILEGES|ALL ON DatabaseObjects
FROM USERS [CASCADE]
Nếu đã cấp phát quyền cho người dùng nào đó bằng câu lệnh GRANT với tuỳ chọn WITH GRANT OPTION thì khi thu hồi quyền bằng câu lệnh REVOKE phải chỉ định tuỳ chọn CASCADE. Trong trường hợp này, các quyền được chuyển tiếp cho những người dùng khác cũng đồng thời được thu hồi.
Ví dụ: Thu hồi quyền Update trên bảng ACCOUNTS từ người dùng khoa và thu hồi quyền này từ những người dùng khác mà User khoa đã cấp phát cho họ
REVOKEUPDATE
ON ACCOUNTS
FROM khoa
CASCADE
4.4 Cách tạo và quản lý người dùng trong SQL Server Management Studio
Bước1: Login vào SQL Server với người dùng có đủ quyền Bước 2: Tạo mới login
44
Chọn Login name, Mode authentication, Server Role, Users Mapping… cho login
45
Tạo User name (tự đặt) và chọn login name cho username (ở đây chọn login là dba đã tạo ở bước trước)
46
Để User ‘bda’ có quyền truy cập database, bạn phải đăng nhập vào hệ thống với vai trò của người quản trị và phân quyền truy xuất CSDL hợp lý cho ‘bda’.
47
BÀI 5: TRUY VẤN DỮ LIỆU TRONG SQL SERVER Mục tiêu
- Trình bày được các lệnh T-SQL:
- Thực hiện được thao tác truy vấn dữ liệu
- Trình bày và vận dụng được các mệnh đề trong truy vấn - Trình bày và sử dụng được các hàm cơ bản của SQL Server
5.1 Truy xuất dữ liệu bằng câu lệnh SELECT
Transact-SQL là ngôn ngữ SQL mở rộng dựa trên SQL chuẩn của ISO (International Organization for Standardization) và ANSI (American National Standards Institute) được sử dụng trong SQL Server khác với PL-SQL ((Procedural Language/Structured Query Language) dùng trong Oracle.
5.1.1 Tạo và xóa CSDL, bảng bằng TSQL:
Ðây là những lệnh dùng để quản lý các thuộc tính của một CSDL như định nghĩa các hàng hoặc cột của một bảng, hay vị trí file dữ liệu của một CSDL..., thường có dạng như sau :
Create object_Name Alter object_Name Drop object_Name
Trong đó object_Name có thể là một bảng, view, stored procedure, indexes... Ví dụ: Lệnh Create sau sẽ tạo ra một table tên Importers với 3 cột: CompanyID, CompanyName,Contact USE Northwind.
Sử dụng cơ sở dữ liệu Northwind CREATE TABLE Importers(
CompanyID int NOT NULL,
CompanyName varchar(40) NOT NULL, Contact varchar(40) NOT NULL
48 Lệnh Alter sau đây cho phép ta thay đổi định nghĩa của một table như thêm (hay bớt) một cột hay một Constraint...Trong ví dụ này ta sẽ thêm cột ContactTitle vào bảng Importers
USE Northwind
ALTER TABLE Importer
ADD ContactTitle varchar(20) NULL
Lệnh Drop sau đây sẽ hoàn toàn xóa bảng khỏi CSDLnghĩa là cảđịnh nghĩa của bảng và dữ liệu bên trong bảng đều biến mất (khác với lệnh Delete chỉ xóa dữ liệu nhưng bảng vẫn tồn tại).
USE Northwind
DROP TABLE Importers
5.1.2 Ngôn ngữ thao tác dữ liệu
Ðây là những lệnh phổ biến dùng để xử lý dữ liệu như Select, Update, Insert, Delete
Ví dụ:
Select
USE Northwind
SELECT CustomerID, CompanyName, ContactName FROM Customers
WHERE (CustomerID = 'alfki' OR CustomerID = 'anatr') ORDER BY ContactName
Insert
USE Northwind
INSERT INTO Territories VALUES (98101, 'Seattle', 2)
Update
USE Northwind UPDATE Territories
49 WHERE TerritoryID = 98101
Delete
USE Northwind
DELETE FROM Territories WHERE TerritoryID = 98101
Chú ý: trong lệnh Delete bạn có thể có chữ From hay không đều được. Để kiểm tra các ví dụtrên làm như sau:
Trên thanh toolbar của màn hình SQL Server Mangement Studio -> Chọn New Query và gõ các câu lệnh như trên. Sau đây là 1 ví dụ tạo table bằng câu lệnh T- SQL.
Sử dụng từ khóa DISTINCT
Từ khóa DISTINCT có tác dụng khử các dòng trùng nhau được trả về từ tập kết quả của một chuỗi Select. Trong trường hợp câu lệnh không có từ khóa
DISTINCT thí tất cảcác dòng trùng nhau cũng hiển thị.
Ví dụ, muốn hiện thị các ProductID không trùng nhau từ bản Order Details với Discount là 0. Câu lệnh và kết quảnhư trong hình
50 Đây là câu lệnh đơn giản nhất để thêm một dòng dữ liệu mới vào bảng sử dụng câu lệnh Insert Into .. Values, với câu lệnh này phải chắc chắn rằng tất cả các giá trị thêm vào phải tương ứng với các cột trong bản cần thêm dữ liệu
Cú pháp
Insert Into [table_name] Values (“value 1”,”value 2”, “value 3”,...)
Ví dụ: muốn thêm một giá trị mới vào bảng Region trong cơ sở dữ liệu Northwind , Kết quả như trong hình
Insert into [Region] Values (6,”NewRegion”)
Thêm dữ liệu sử dụng INSERT…SELECT
Với câu lệnh Insert into..valueschỉ thêm được một dòng dữ liệu tại một thời điểm thêm mới dữ liệu. Để có thể thêm nhiều dòng dữ liệu tại cùng một thời điểm insert sử dụng câu lệnh Insert ... select
Cú pháp
INSERT INTO [table_name] ( [column1], [column2], [column3], …)
SELECT statement
Ví dụ: tạo mới một bảng Names có hai cột NameID, FullName và lấy tất cả tên của các nhân viên trong bảng Employees thêm vào bảng Names, sẽ dùng câu lệnh Insert … Select như hình bên dưới
51
Thêm dữ liệu với từ khóa DEFAULT
Để không phải nhập cùng một giá trị cho nhiều cột dữ liệu, có thể gán cho một hay nhiều cột trong bảng với một giá trị mặc định là DEFAULT value.
Cú pháp:
INSERT INTO [table_name] DEFAULT VALUES
Ví dụ:tạo một bảng tên History, gồm 3 trường ID, CreateDate, CreateName. Trong đó gán thuộc tính DEFAULT cho CreateDate
52 Insert vào bảng vừa tạo một dòng dữ liệu theo cách thông thường. Dùng hàm GETDATE() để lấy ngày giờ hệ thống
Hình 2. 2 Thêm dữ liệu không dùng DEFAULT VALUES
Bây giờ thêm vào một dòng dữ liệu và sử dụng DEFAULT VALUES, có thể lấy giờ hệ thống.
Hình 2. 3 Thêm dữ liệu dùng DEFAULT VALUES
Chỉnh sửa dữ liệu
Xóa dữ liệu sử dụng câu lệnh DELETE
Câu lệnh Delete dùng để xóa tất cả các dòng ra khỏi bảng. Cú pháp
DELETE [table_name] WHERE [column]=[value]
Lưu ý : Khi sử dụng lệnh Delete mà không có mệnh đề Where thì SQL Server sẽ xóa toàn bộ các dòng trong bảng .
53 Ví dụ : trong bảng Employee nếu muốn xóa những nhân viên nào ở thành phố LonDon thì có thể sử dụng câu lệnh như sau
Hình 2. 4 Xóa tất cả các loại sản phẩm chưa có sản phẩm nào
Cập nhật dữ liệu sử dụng UPDATE
Câu lệnh UPDATE được sử dụng để cập nhập/sửa đổi dữ liệu đã có trong bảng Cú pháp
Update [table_name] SET [column]=[new value] WHERE [column]=[value]
54 Lưu ý: Khi sử dụng lệnh Update mà không có mệnh đề Where thì SQL Server sẽ cập nhật toàn bộ các dòng trong bảng có cùng giá trị của cột được update
Ví dụ : nếu như muôn cập nhập lai tất cả các sản phẩm có cùng một nhà cung cấp thực hiện như sau:
Hình 2. 5 Cập nhật nhà cung cấp
Ví dụ: nếu như muốn cập nhập lại tất cả các sản phẩm có cùng một nhà cung cấp và những sản phẩn này có số lượng hàng trong kho lớn hơn 0, thưc hiện như ví dụ trên và thêm vào mệnh đềWhere như sau.
Hình 2. 6 Cập nhật sản phẩm với mệnh đề WHERE
55
Sử dụng Select…From
Câu lệnh SELECT... FROM dùng để chọn lựa các dữ liệu cần thiết từ một hoặc nhiều bảng có quan hệ bên trong một cơ sở dữ liệu.
Cú pháp:
SELECT <tên_column_1, tên_column_2,..., tên_column_n> FROM <tên_table>
Hay
SELECT * FROM tên_table
(*) dùng để lấy tất cả các cột trong bảng Ví dụ:
USE Northwind
SELECT RegionID, RegionDescription FROM Region
Hoặc có thể viết theo cách sau: USE Northwind
SELECT * FROM Region
5.1 Kết quả ví dụ sử dụng câu lệnh select…from
56 Với cú pháp SELECT... FROM bên dưới kết hợp mệnh đề WHERE cho phép lọc các dòng dữ liệu bên trong một bảng phải thỏa điều kiện đưa ra trong mệnh đề WHERE.
Cú pháp:
SELECT [DISTINCT ][TOP số dòng[PERCENT]]<tên_column_1, tên_column_2,..., tên_column_n>
FROM <tên_table> WHERE <điều khiện>
Từ khóa DISTINCT: chỉ dùng để chỉ định truy vấn các dòng dữ liệu duy nhất, không trùng lặp dữ liệu
Từ khóa TOP: chỉdùng để truy vấn chọn ra chính xác bao nhiêu dòng dữ liệu đầu tiên. Nếu có thêm từ khóa PERCENT đi kèm theo thì truy vấn chỉ chọn ra bao nhiêu phần trăm mẫu tin đầu tiên, lúc bấy giờ con số chỉ định phải nằm trong phạm vi từ0 đến 100. Thông thường khi sử dụng từ khóa TOP thì sẽ kết hợp với mệnh đề ORDER BY để sắp xếp lại dữ liệu theo một thứ tự nào đó.
Điều kiện lọc: là điều kiện chỉđịnh việc lọc ra các mẫu tin bên trong bảng. Thông thường là một biểu thức luận lý.
Ví dụ:
USE Northwind
SELECT RegionID, RegionDescription FROM Region
57 5.2 Kết quả ví dụ sử dụng nhóm câu lệnh Select … From thêm Where
5.1.3 Truy vấn nhóm dữ liệu
Truy vấn dữ liệu sử dụng mệnh đề GROUP BY
Với cú pháp SELECT FROM bên dưới kết hợp mệnh đề GROUP BY cho phép nhóm dữ liệu của các dòng bên trong một bảng và được phép sử dụng các hàm thống kê đi kèm theo để tính toán các dữ liệu có tính chất thống kê tổng hợp. Thông thường, sau khi nhóm dữ liệu, nên sắp xếp lại dữ liệu để hiển thị theo một thứ tự nào đó. Do vậy sử dụng mệnh đề ORDER BY sau mệnh đề GROUP BY. Mệnh đề GROUP BY dùng để gom nhóm khi tính toán.
Cú pháp :
SELECT Danh_sách_các_cột| Hàm_thống_kê AS Bí_danh FROM Tên_bảng
[WHERE Điều_kiện_lọc]
GROUP BY Danh_sách_cột_nhóm [ORDER BY Tên_cột[DESE] [,…]] Ví dụ:
USE Northwind
SELECT Country, COUNT(EmployeeID) AS 'Tổng' FROM dbo.Employees
58 Hình 8.1 Kết quả ví dụ sử dụng mệnh đề Group By trong truy vấn
Truy vấn dữ liệu sử dụng mệnh đề HAVING
Với mệnh đềSELECT… FROM bên dưới kết hợp mệnh đề HAVING cho phép lọc lại dữ liệu sau khi đã nhóm dữ liệu của các dòng bên trong một bảng. Khác với mệnh đềWHERE dùng để lọc các dòng dữ liệu hiện đang có bên trong bảng, mệnh đề HAVING chỉ được phép sử dụng đi kèm theo mệnh đề GROUP BY dùng để lọc lại dữ liệu sau khi đã nhóm. Điều này có nghĩa là mệnh đề HAVING chỉđược dùng kèm với mệnh đề GROUP BY.
Mệnh đềHAVING dùng đểxác định một điều kiện tìm kiếm cho một nhóm hoặc một tập hợp.HAVING thường được sử dụng trong một mệnh đề GROUP BY.
Cú pháp :
SELECT danh_sách_các_cột | Hàm_thống_kê AS Bí_danh FROM Tên_bảng
[WHERE Điều_kiện_lọc]
GROUP BY Danh_sách_cột_nhóm HAVING Điều_kiện_lọc_nhóm
59 [ORDER BY Tên_cột[DESC][,..]]
Trong đó :
- Hàm thống kê : là tên của các hàm thống kê và các tham số tương ứng dùng để tính tổng (SUM), tính giá trị thấp nhất (MIN), tính giá trị cao nhất (MAX), đếm các mẫu tin (COUNT), tính giá trị trung bình (AVG) của các dữ liệu bên trong bảng.
- Bí danh: là tiêu đề mới của các cột tính toán. Các tiêu đề này chỉ có hiệu lực lúc hiển thị dữ liệu trong câu lệnh truy vấn mà không làm ảnh hưởng đến cấu trúc bên trong của bảng.
- Danh sách cột nhóm dữ liệu: là danh sách tên các cột được nhóm dữ liệu để tính toán.
Ví dụ: Lấy danh sách các hóa đơn có trị giá > 10000 và kết quả được sắp xếp tăng dần theo trị giá
SELECT OD.OrderID, SUM (UnitPrice*Quantity)AS Subtotal FROM [Order Details] OD JOIN dbo.Orders O
ON OD.OrderID=O.OrderID GROUP BY OD.OrderID
HAVING SUM(UnitPrice*Quantity)>10000 ORDER BY SUM(UnitPrice*Quantity) ASC Kết quả :
60 Hình 8.2 Kết quả ví dụ sử dụng mệnh đề Having.
Với cú pháp SELECT...FROM bên dưới kết hợp mệnh đề ORDER BY cho phép lấy dữ liệu của các cột bên trong một bảng, sau đó sắp xếp lại dữ liệu theo thứ tự chỉđịnh là tăng hoặc giảm.