Bạn tạo login chỉ có quyền được cho (không được có quyền cao hơn), tạo xong bạn phải đăng nhập vào SQL Server bằng chính login vừa tạo, thực hiện kiểm tra quyền bằng cách thực hiện các c[r]
(1)Bài Thực Hành Security Tuần 1-2-3: Login – User – Roles
PHẦN 1: TRẢ LỜI CÁC CÂU HỎI SAU
1 Cho biết mục tiêu bảo mật? Các mức bảo mật mà SQL Server hỗ trợ
2 SQL Server hỗ trợ chế độ chứng thực? Sự khác biệt? Để thay đối chế độ chứng thực thể SQL Server, bạn phải thực nào?
3 Cho biết logins, users gì?
4 Cho biết Roles gì? Có loại, mức độ nào? Liệt kê Roles mà SQL Server có hỗ trợ, bạn thành viên Roles bạn có quyền hạn thư nào? Cho biết Permissions gì?
PHẦN 2: THỰC HÀNH BÀI 1
1 Tạo sở liệu QLTV tham số tùy ý
2 Tạo users Minh, Huy, Le, Linh, An, Binh: a Password tên username viết hoa
b Đảm bảo user tạo bảng tablespace với quota 10M Hướng dẫn:
1 Tạo CSDL QLTV create database QLTV
2 Tạo users Minh, Huy, Le, Linh, An, Binh: a) Password tên username viết hoa use QLTV
go
create login Minh with password='MINH' go
create user Minh for login Minh go
use QLTV go
Mục tiêu:
- Tạo, sửa, xóa login - Tạo, sửa, xóa user - Tạo, sửa, xóa roles
(2)create login Huy with password='HUY' go
create user Huy for login Huy go
use QLTV go
create login Le with password='LE' go
create user Le for login Le go
use QLTV go
create login Linh with password='LINH' go
create user Linh for login Linh go
use QLTV go
create login An with password='AN' go
create user An for login An go
use QLTV go
create login Binh with password='BINH' go
create user Binh for login Binh
b) Đảm bảo user tạo bảng tablespace với quota 10M Ví dụ minh họa:
go
CREATE USER Hung
IDENTIFIED BY out_standing1 DEFAULT TABLESPACE example QUOTA 10M ON example
TEMPORARY TABLESPACE temp QUOTA 10M ON system
PROFILE app_user PASSWORD 123456; Cho bảng Sach
(3))
Tạo bảng Sach Create table Sach (
ID INT PRIMARY KEY, Name NVARCHAR(2) )
Làm bước sau:
a Tạo role sau: DataEntry, Supervisor, Management go
use QLTV go
create application role DataEntry; go
use QLTV go
create application role Supervisor; go
use QLTV go
create application role Management;
b Gán Minh, Huy, Linh vào role DataEntry, gán Le vào role Supervisor, gán An Binh vào role Management
go
EXEC sp_addrolemember 'DataEntry','Minh' go
EXEC sp_addrolemember 'DataEntry','Huy' go
EXEC sp_addrolemember 'DataEntry','Lym' role Supervisor
go
EXEC sp_addrolemember 'Supervisor','Le' role Management
go
EXEC sp_addrolemember 'Management','An' go
EXEC sp_addrolemember 'Management','Binh'
c Cho role DataEntry quyền SELECT, INSERT, UPDATE bảng Sach go
(4)grant select,insert,update on Sach to DataEntry
d Cho role Supervisor quyền SELECT DELETE bảng Sach go
use QLTV go
grant select,delete on Sach to Supervisor
e Cho role Management quyền SELECT bảng Sach go
use QLTV go
grant select on Sach to Management
f Lần lượt kiểm tra kết phân quyền cấp cho role
Dang nhap bang user Minh thuc hien lenh select , insert, update cua role DataEntry go
use QLTV go
select * from Sach go
insert into Sach values (1,'df') go
select * from Sach go
update Sach set Name='gg' where ID = go
select * from Sach
Dang nhap bang user Le thuc hien lenh select, delete cua role Supervisor go
use Sach go
select * from Sach go
delete from Sach where ID=1 go
select * from Sach
Dang nhap bang user An thuc hien lenh select cua role Management go
use QLTV go
(5)4 Tạo user tên NameManager với password pc123 Gán quyền update cho user cột TenSach bảng Sach
tao user go
use QLTV go
create login NameManager with password='pc123' go
create user NameManager for login NameManager gan quyen
go
use QLTV go
grant update on Sach(TenSach) to NameManager user chay thu quyen dc cap
go
use QLTV go
update Sach set TenSach='TD' where Masach=1 –Lệnh xem quyền
SELECT
[UserName] = CASE memberprinc.[type]
WHEN 'S' THEN memberprinc.[name]
WHEN 'U' THEN ulogin.[name] COLLATE Latin1_General_CI_AI END,
[UserType] = CASE memberprinc.[type] WHEN 'S' THEN 'SQL User' WHEN 'U' THEN 'Windows User' END,
[DatabaseUserName] = memberprinc.[name], [Role] = roleprinc.[name],
[PermissionType] = perm.[permission_name], [PermissionState] = perm.[state_desc],
[ObjectType] = obj.type_desc, perm.[class_desc], [ObjectName] = OBJECT_NAME(perm.major_id) FROM
Role/member associations
(6)Roles
sys.database_principals roleprinc ON roleprinc.[principal_id] = members [role_principal_id]
JOIN
Role members (database users)
sys.database_principals memberprinc ON memberprinc.[principal_id] = members [member_principal_id]
LEFT JOIN
Login accounts
sys.login_token ulogin on memberprinc.[sid] = ulogin.[sid] LEFT JOIN
Permissions
sys.database_permissions perm ON perm.[grantee_principal_id] = roleprinc.[principal_id] LEFT JOIN
Table columns
sys.columns col on col.[object_id] = perm.major_id AND col.[column_id] = perm.[minor_id] LEFT JOIN
sys.objects obj ON perm.[major_id] = obj.[object_id] Thực bước sau:
a Gán password cho role DataEntry “mgt” b Cho phép user Minh quyền cấp quyền cho user khác
c Gán tất quyền mà Minh có cho Binh Binh có quyền INSERT UPDATE bảng QLTV không?
a.Gán password cho role DataEntry “mgt” go
use QLTV go
alter application role DataEntry with password = 'mgt'
b Cho phép user Minh quyền cấp quyền cho user khác go
use QLTV go
grant select,insert,update on Sach to Minh with grant option Minh gan quyen cho user #
go
use QLTV go
grant insert on Sach to An An chay thu quyen dc cap
(7)use QLTV go
insert into Sach values (1,'df') go
select * from Sach
c Gán tất quyền mà Minh có cho Binh Binh có quyền INSERT UPDATE bảng Sach không?
dang nhap bang user Join go
use QLTV go
grant select,insert,update on Sach to Binh Binh chay thu quyen dc cap
go
use QLTV go
select * from Sach go
insert into Sach values (4,'ff') go
select * from Sach go
update Sach set Tensach='gg' where Masach= go
select * from Sach
=> Binh có quyền INSERT UPDATE bảng QLTV BÀI 2
CSDL mẫu: AdventureWorks2008
Hướng dẫn: Attach file AdventureWorks2008_Data.mdf, AdventureWorks2008_Log.ldf để tạo sở dữ liệu mẫu AdventureWorks2008
(8)I. Tạo Roles, Logins, gán quyền thao tác SQL Server Management Studio (SSMS).
1 Tạo login dạng SQL Server Authentication a Tạo login có tên tên bạn, login có:
Chế độ chứng thực SQL Server Authentication, password tùy ý, CSDL mặc định AdventureWorks2008.
Không thuộc Server Roles
Chỉ cho truy xuất đến CSDL AdventureWorks2008 không thuộc Database Roles ngoại trừ Public
Kiểm tra:
- Ở SSMS, kiểm tra xem tên login bạn có nằm nhánh Security\Login khơng? kiểm tra xem tên login bạn có nằm nhánh User CSDL AdventureWorks2008 khơng? Xem properties
- Kết nối vào SSMS login vừa tạo
- Trong mục database bạn nhìn thấy database nào? Tại sao?
- Dùng câu lệnh SELECT … FROM… để xem mẫu tin bảng Production.Product, bạn xem không? Tại sao?
b Hiệu chỉnh login trên, cho phép login thuộc database Roles tên db_DataReader CSDL AdventureWorks2008
Kiểm tra:
- Dùng câu lệnh SELECT … FROM… để xem mẫu tin bảng Production.Product, bạn xem không? Tại sao?
- Dùng câu lệnh INSERT … VALUES để chèn mẫu tin vào bảng Production.Product, bạn có chèn khơng? Tại sao? Muốn chèn bạn phải làm gì? Thực thử xem
c Tương tự vậy, lần lược tìm hiểu database Roles lại 2 Tạo login dạng Windows Authentication
a Quay hệ điều hành tạo local user account domain user account phép kết nối đến máy Server SQL Server User account có tên Nhanvien1.
b Cho phép Nhanvien1 trở thành login SQL Server, login thuộc vào database Roles là db_datareader CSDL AdventureWorks2008 (Lưu ý: phải chọn Windows Authentication)
c Bạn thử kết nối Server thông qua công cụ SSMS login vừa tạo kiểm tra quyền login AdventureWorks2008
(9)3 Login tạo câu câu thực tạo Table, view, … CSDL AdventureWorks2008 hay không? Muốn tạo cần có điều gì?
4 Tạo Database Role có tên NVHoaDon CSDL AdventureWorks2008, Role có quyền hạn sau:
- Được phép chèn, cập nhật liệu hai bảng Purchasing.PurchaseOrderHeader và Purchasing.PurchaseOrderDetail
- Chỉ phép xem (Select) bảng Purchasing.WorkOrder
5 Tạo login dạng SQL Server Authentication, có tên lần lược NVHD1, NVHD2, NVHD3 Các Login thuộc DataBase Role NVHoaDon tạo Đăng nhập vào từng login NVHD1, NVHD2, NVHD3, ứng với login thực công việc sau:
- Xem thông tin bảng Purchasing.PurchaseOrderHeader
Purchasing.PurchaseOrderDetail, Purchasing.WorkOrder
- Chèn vào bảng Purchasing.PurchaseOrderHeader
Purchasing.PurchaseOrderDetail, Purchasing.WorkOrder, bảng record với dữ liệu tùy ý, ý ràng buộc khóa ngoại
- Xóa record bảng sau Purchasing.PurchaseOrderHeader Purchasing.PurchaseOrderDetail, Purchasing.WorkOrder.
- Nếu thực lệnh Update cho bảng Purchasing.PurchaseOrderHeader Purchasing.PurchaseOrderDetail, Purchasing.WorkOrder có thực khơng? Giải thích cho ví dụ minh họa trường hợp không
6 Tạo login dạng SQL Server Authentication, có tên lần lược QLKho1, QLKho2, QLKho3. Các login có quyền hạn phép chèn, xóa liệu bảng Production.Product; cập nhật cột ListPrice bảng Production.Product Chỉ được phép xem (Select) bảng Production.WorkOrder Cho ví dụ kiểm tra trường hợp cấp quyền cho login thông qua lệnh insert, update, delete, select
7 Bạn chọn giải pháp đơn giản phép login tạo phép xem thông tin trong bảng HumanResources.Employee.
8 Tạo hai login thuộc dạng SQL Server Autehtication, có tên lần lược PTUD1, PTUD Các login có quyền sau:
- Được phép tạo đối tượng database
- Được phép truy xuất hiệu chỉnh đối tượng database Ứng với login thực lệnh sau:
a) Tạo Table UngDung(MaUD int primary key, TenUD nvarchar(30)) b) Thêm cột TacGia nvarchar(30) vào bảng UngDung
(10)e) Tạo thủ tục cho phép xem thơng tin ứng dụng f) Xóa liệu có bảng UngDung
g) Chạy thủ tục tạo câu e h) Xóa thủ tục câu e
II. Tạo Roles, Logins, gán quyền T_SQL thông qua thủ tục hệ thống Chú ý sau câu bạn thực kiểm tra lại lệnh bạn vừa thực hiện
1 Tạo login dạng Windows Authentication có tên GD1 (vào hệ điều hành Window tạo user GD1 trước tạo )
2 Tạo hai login dạng SQL Server Authentication tên PGD1 PGD2 có password tùy ý.
1 Bạn tạo user-defined role với tên QLSP có quyền sau: thêm, xóa, sửa bảng Production.Product Tạo user ứng với login trên, thực thêm user thành viên role QLSP.
2 Giả sử bạn muốn cấm cách tường minh quyền thêm, xóa, sửa bảng Production.Product đối với user PGD1, cho dù user thành viên role có quyền (quyền thêm, xóa, sửa trên bảng Production.Product) user bị cấm Các user khác không bị ảnh hưởng Bạn thực nào?
3 Ở câu bạn cấm quyền thêm, xóa, sửa bảng Production.Product user PGD1 Bạn muốn khơi phục lại quyền thêm, xóa, sửa bảng Production.Product user PGD1 Bạn thực nào?
4 Ở câu bạn cấp quyền cho role QLSP: thêm, xóa, sửa bảng Production.Product Bạn muốn cấm quyền thêm, xóa, sửa bảng Production.Product role Bạn thực thế nào? Các user thành viên role QLSP có quyền lúc này?
5 Tạo hai login dạng SQL Server Authentication có tên NghiepVu1, NghiepVu2 Tạo user NghiepVu1, NghiepVu2 ứng với login trên, user có quyền sau: xem hiệu chỉnh cột ListPrice bảng Production.Product ; xem, hiệu chỉnh, xóa liệu bảng Production.WorkOrder Production.Product, phép xem (Select) bảng Purchasing.WorkOrder
BÀI 3: ỨNG DỤNG VÀO BÀI TOÁN CỤ THỂ Bài 1
Câu 1: Sử dụng tài khoản với quyền quản trị thực tạo login, user cấp quyền 1.1 Tạo login tên admin1, mật Abc12345
1.2 Tạo user thuộc sở liệu master (Databases->System Databases->master) 1.3 Cấp quyền tạo sở liệu, tạo bảng quyền tạo login cho admin1
(11)File Size MaxSize FileGrowth
Data 100 Không giới hạn 50
Log 300 Không giới hạn 100
2.2 Tạo bảng NhanVien LuongNV thuộc CSDL QuanLyNhanSu Bảng NhanVien
Tên cột Kiểu liệu Số kí tự Ghi
MaNv Varchar 20 Khóa
TenNv Nvarchar 100
NgaySinh Varchar 10
NoiSinh nvarchar 50
Bảng LuongNV
Tên cột Kiểu liệu Số kí tự Ghi
MaNv varchar 20
Khóa
NamThang varchar
Luong Float
2.3 Tạo login chứng thực SQL Server (SQL Server Authencation)
Tên login Mật
LyNT Abc12345
HungNT Abc12345
2.4 Tạo user
Tên user Tên login
LyNT LyNT
HungNT HungNT
2.5 Cấp quyền
Tên user Tên bảng Quyền cấp LyNT NhanVien, LuongNV Thêm, xóa liệu
HungNT NhanVien
Chỉ phép xem MaNv,TenNV cấp quyền
Cập nhật liệu 2.6 Kiểm tra cấp quyền
Thực lệnh sau với user LyNT HungNT
(12)3) Sửa liệu nơi sinh cho nhân viên thành Hà Nội 4) Xóa nhân viên khỏi bảng nhân viên
Các lệnh có thực khơng? Lệnh khơng thực giải thích khơng thực thi được?
5) Thêm quyền cập nhật liệu cho bảng LuongNV cho user HungNT Sau thực lại lệnh Nhận xét
Bài 2:
Câu 1: Tạo database tên QuanLyDaoTao
File Size MaxSize FileGrowth
Data 100 Không giới hạn 10
Log 300 Không giới hạn 30
Câu 2: Tạo bảng thuộc CSDL QuanLyDaoTao Bảng Lop
Tên cột Kiểu liệu Số kí tự Ghi chú
MaLop Varchar 20 Khóa
TenLop Nvarchar 100 Bảng SinhVien
Tên cột Kiểu liệu Số kí tự Ghi chú
MaSv Varchar 20 Khóa
TenSv Nvarchar 100
NgaySinh Varchar 10 NoiSinh Nvarchar 50
MaLop Varchar 20 Khóa ngoại
Bảng MonHoc
Tên cột Kiểu liệu Số kí tự Ghi chú
MaMh Varchar 20 Khóa
TenMh Nvarchar 100 SoGio Int
Bảng DiemTP
Tên cột Kiểu liệu Số kí tự Ghi chú
MaSv Varchar 20
Khóa
MaMh Varchar 20
Diem Float
(13)Câu 4: Thêm liệu cho bảng Bảng Lop
MaLop TenLop
CN0201 Khóa 2001
CN0202 Khóa 2002
Bảng SinhVien
MaSv TenSv NgaySinh(dd/mm/yyyy) NoiSinh MaLop sv01
Nguyễn Văn
Hưng 12/02/1988
Hồ Chí
Minh CN0201 sv02 Lê Hùng 17/03/1990
Bình
Dương CN0201 sv03 Lê Hùng 02/12/1991
Bình
Dương CN0202 Bảng MonHoc
MaMh TenMh SoGio
THVP Tin học văn phòng 45
THDC Tin học đại cương 45
CSDL Cơ sở liệu 30
Bảng DiemTP
MaSv MaMh Diem
sv01 THVP 8.0
sv01 THDC 7.0
sv01 CSDL 6.0
sv02 THVP 9.0
sv02 THDC 4.0
sv02 CSDL 7.0
sv03 THVP 5.0
sv03 THDC 5.0
sv03 CSDL 5.0
(14)5.1 Tạo nhóm quyền thuộc CSDL QuanLyDaoTao tương ứng với phòng ban mơ tả 5.2 Cấp quyền cho phịng ban CSDL QuanLyDaoTao
1 Ban Giam Hiệu phép xem tất liệu tất bảng database Khoa Mạng Truyền Thông phép xem bảng SINHVIEN, LOP
3 Khoa Kỹ thuật phần mềm đươc phép xem, thêm, xóa cập nhật liệu bảng SINHVIEN, LOP, MONHOC
4 Khoa Tài kế toán phép xem liệu bảng DiemTP
5 Phịng Đào tạo phép xem,thêm,xóa cập nhật liệu tất bảng database 5.3 Tạo danh sách nhân cho phòng ban (Lưu ý tất tài khoản phải đổi mật lần đăng nhập đầu tiên)
Ban Giám Hiệu
Tên Mật khẩu
AnhNH Abc12345
HoangNT Abc12345
Khoa Mạng Truyền Thông
Tên Mật khẩu
TrungDM Abc12345
CongND Abc12345
DangNS Abc12345
Khoa Kỹ thuật phần mềm
Tên Mật khẩu
ThuatDV Abc12345
DatDT Abc12345
NguyenTT Abc12345
(15)Tên Mật
TuanTV Abc12345
DieuNT Abc12345
GiangNN Abc12345
Phòng Đào tạo
Tên Mật
TramNTH Abc12345
ThuyLT Abc12345
5.4 Chọn thành viên đại diện cho phòng ban, bạn thực lệnh insert, update, delect, select cho table, giải thích lệnh mà bạn thực
Tuần 4-5-6: Transaction
PHẦN 1: BACKUP AND RECOVERY
1 Tạo CSDL Qlsach tham số tùy ý Tạo table có cấu trúc sau: NhomSach(MaNhom char(5), TenNhom nvarchar(25))
NhanVien(MaNV char(5), HoLot nvarchar(25), TenNV nvarchar(10), Phai nvarchar(3), NgaySinh Smalldatetime, DiaChi nvarchar(40))
DanhMucSach(MaSach char(5), TenSach nvarchar(40), TacGia nvarchar(20), MaNhom char(5), DonGia Numeric(5), SLTon numeric(5))
HoaDon(MaHD char(5), NgayBan SmallDatetime, MaNV char(5)) ChiTietHoaDon(MaHD char(5), MaSach char(5), SoLuong numeric(5)) Nhập liệu cho table
NhomSach
MANHOM TENNHOM
N001 Kỹ thuật trồng trọt Sach
MaS TenSach TacGia MaN DonGi SlTon
Mục tiêu:
- Backup and recovery - Index
(16)H H a S111 Đèn khơng
hắt bóng
Dzunichi Watanabe (Cao Xuân Hạo dịch)
N001 55000 45
S112
Kỹ thuật trồng hoa phong lan
Nguyễn Lân Hùng N001 45000 35
S113
Kỹ thuật chăm sóc hoa mai
Lê Xuân A N007 35000 15
S114
Kỹ thuật chăm sóc cam
Trần Ha N001 24000 12
Các Table khác sinh viên tự thêm liệu vào
2 Tạo thiết bị backup có tên QuanLySachBackup lưu thư mục T:\backup\QuanLySachBackup.bak
Viết câu lệnh để set CSDL QLSach chế độ phục hồi FULL
3 Thực backup sau cho CSDL QLSach, tất backup lưu vào thiết bị backup vừa tạo a Thực full backup CSDL QLSach
b Thực việc insert sau:
insert NhomSach values('N007','Truyen ngan') insert HoaDon values('11',GETDATE(),'NV001')
Bạn muốn backup CSDL QLSach đến thời điểm thay đổi câu b ( nghĩa có nhóm sách 'N007' hóa đơn 11), thay thực full backup để backup lại CSDL đến thời điểm câu b, bạn thực loại backup kết hợp với full backup câu a để thực yêu cầu mà tiết kiệm dung lượng đĩa? Bạn thực việc backup mà bạn chọn lựa
Xóa CSDL, thực phục hồi lại CSDL QLSach đến thời điểm câu b Chú ý xem có mẫu tin vừa insert không
c. Thực việc insert sau:
insert NhomSach values('N008','Phap van') insert HoaDon values('12',GETDATE(),'NV001')
Giả sử đến thời điểm bị cố ( bạn tự giả lập cố cách cho database offline xóa datafile), bạn có backup câu a, câu b
Bạn thực việc phục hồi liệu cho không liệu (nghĩa có nhóm sách N008 hóa đơn 12)
d. Thực việc insert sau:
(17)insert HoaDon values('13',GETDATE(),'NV001')
Tạo transaction log backup Xóa CSDL QLSach
Thực việc restore CSDL QLSach thời điểm câu d
e. Xóa CSDL QLSach phục hồi liệu thời điểm insert hóa đơn 11 câu b
Câu 2: Thực giống 1, thay tạo thiết bị backup QuanLySachBackup, file backup lưu trực tiếp vào file cụ thể (sv tự đặt tên file)
PHẦN 2: INDEX
Cơ sở liệu mẫu: AdventureWork2008
Trong CSDL mẫu tạo sẵn mục sau cho bảng Production.WorkOrder: CREATE TABLE [Production].[WorkOrder](
[WorkOrderID] [int] IDENTITY(1,1) NOTNULL, [ProductID] [int] NOTNULL,
[OrderQty] [int] NOTNULL,
[StockedQty] AS (isnull([OrderQty]-[ScrappedQty],(0))), [ScrappedQty] [smallint] NOTNULL,
[StartDate] [datetime] NOTNULL, [EndDate] [datetime] NULL, [DueDate] [datetime] NOTNULL, [ScrapReasonID] [smallint] NULL, [ModifiedDate] [datetime] NOTNULL,
CONSTRAINT [PK_WorkOrder_WorkOrderID] PRIMARY KEY CLUSTERED ([WorkOrderID] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY];
Trong đó:
PK_WorkOrder_WorkOrderID (clustered)
(18)Table scan: đọc toàn heap
Index scan: đọc toàn mức mục clustered hay non-clustered ̣
Index seek: định vị dịng liệu thơng qua b-tree trả dòng chọn
1 Vào Management Studio vào hình query: Chọn CSDL mẫu AdventureWorks2008:
Dùng lệnh:
use AdventureWorks2008
(Hoặc thực thao tác chọn database AdventureWorks2008)
Dùng lệnh để xem mục tạo bảng Production.WorkOrder sp_helpindex 'Production.WorkOrder'
Thực câu truy vấn sau: SELECT *
FROM Production.WorkOrder
Câu truy vấn sử dụng mục sử dụng thao tác ?
Bạn sử dụng Query Optimizer để xem cách xử lý câu truy vấn cách bôi đen câu lệnh nhấn vào biểu tượng Execution Plan
Hoặc bôi đen câu lệnh click chuột phải, chọn Display Estimated Execution Plan SELECT *
FROM Production.WorkOrder WHERE WorkOrderID = 1234;
Câu truy vấn sử dụng mục sử dụng thao tác gì? Bạn sử dụng Query Optimizer để xem cách xử lý câu truy vấn SELECT *
FROM Production.WorkOrder
(19)Câu truy vấn sử dụng mục sử dụng thao tác gì? Bạn sử dụng Query Optimizer để xem cách xử lý câu truy vấn Giả sử bạn có nhu cầu truy vấn thường xuyên câu lệnh sau:
SELECT *
FROM Production.WorkOrder WHERE StartDate = '2003-06-25';
Bạn thực việc tạo mục thích hợp cho câu trên?
Bạn sử dụng Query Optimizer để xem cách xử lý câu truy vấn So sánh với trước tạo mục
5 Giả sử có nhu cầu truy vấn thường xuyên câu sau: SELECT WorkOrderID, StartDate
FROM Production.WorkOrder WHERE ProductID = 757
Để giảm chi phí bookmark lookup, nghĩa thực việc tìm kiếm bảng, khơng cần nhảy sang bảng khác, bạn xóa mục có sẵn tạo lại mục cho thích hợp câu trên?
Bạn sử dụng Query Optimizer để xem cách xử lý câu truy vấn trên, có nhận xét so với trước tạo mục vừa tạo
Bạn sử dụng Database Tuning Advisor để xem lời khuyên việc tạo mục câu truy vấn
6 Giả sử có nhu cầu truy vấn thường xuyên câu sau: SELECT WorkOrderID, StartDate
FROM Production.WorkOrder WHERE ProductID = 757 AND StartDate = '2002-01-04';
Bạn thực việc tạo mục thích hợp cho câu trên? Nếu có nhiều giải pháp, đưa nhận xét cho giải pháp lựa chọn giải pháp phù hợp
(20)Bạn sử dụng Database Tuning Advisor để xem lời khuyên việc tạo mục câu truy vấn
7 Thực lệnh để xem tình trạng phân mảnh mục bảng sau: a Production.Product
b HumanResource.Employee
Nếu có phân mảnh viết lệnh để tổ chức lại mục PHẦN 3: TRANSACTION
Cơ sở liệu mẫu: QLSach
1 So sách mức cô lập READ UNCOMMITTED READ COMMITTED Trường hợp
T1 T2
USE QLSach BEGIN TRAN
SELECT sum(SLTon) FROM DanhMucSach WHERE MaNhom = 'N001' UPDATE DanhMucSach SET SLTon = SLTon +1 WHERE MaSach = 'S001' waitfor delay '00:00:15‘
USE QLSach BEGIN TRAN
SELECT sum(SLTon) FROM DanhMucSach WHERE MaNhom = 'N001' COMMIT TRAN
Nhận xét kết ? Giải thích ?
Các vấn đề :
(21)(22)Trường hợp 1a
T1 T2
USE QLSach
SELECT sum(SLTon) FROM DanhMucSach WHERE MaNhom = 'N001' UPDATE DanhMucSach SET SLTon = SLTon +1 WHERE MaSach = 'S001'
waitfor delay '00:00:15‘ USE QLSach
BEGIN TRAN
SELECT sum(SLTon) FROM DanhMucSach WHERE MaNhom = 'N001' COMMIT TRAN
(23)Trường hợp 1b
T1 T2
USE QLSach BEGIN TRAN
SELECT sum(SLTon) FROM DanhMucSach WHERE MaNhom = 'N001' UPDATE DanhMucSach SET SLTon = SLTon +1 WHERE MaSach = 'S001' waitfor delay '00:00:15‘
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED USE QLSach
BEGIN TRAN
SELECT sum(SLTon) FROM DanhMucSach WHERE MaNhom = 'N001' COMMIT TRAN
(24)Trường hợp
T1 T2
USE QLSach BEGIN TRAN
SELECT sum(SLTon) FROM DanhMucSach WHERE MaNhom = 'N001' UPDATE DanhMucSach SET SLTon = SLTon +1 WHERE MaSach = 'S001' waitfor delay '00:00:15‘
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
USE QLSach BEGIN TRAN
SELECT sum(SLTon) FROM DanhMucSach WHERE MaNhom = 'N001' COMMIT TRAN
Nhận xét kết ? Giải thích ?
(25)Trường hợp 1a
T1 T2
SET TRANSACTION ISOLATION LEVEL READ COMMITTED USE QLSach
BEGIN TRAN
SELECT sum(SLTon) FROM DanhMucSach WHERE MaNhom = 'N001' waitfor delay '00:00:15‘
USE QLSach BEGIN TRAN
SELECT sum(SLTon) FROM DanhMucSach WHERE MaNhom = 'N001' UPDATE DanhMucSach SET SLTon = SLTon +1 WHERE MaSach = 'S001' SELECT sum(SLTon)
(26)Trường hợp 1b
T1 T2
SET TRANSACTION ISOLATION LEVEL READ COMMITTED USE QLSach
BEGIN TRAN
SELECT sum(SLTon) FROM DanhMucSach WHERE MaNhom = 'N001' waitfor delay '00:00:15‘
USE QLSach BEGIN TRAN
SELECT sum(SLTon) FROM DanhMucSach WHERE MaNhom = 'N001' UPDATE DanhMucSach SET SLTon = SLTon +1 WHERE MaSach = 'S001' SELECT sum(SLTon) FROM DanhMucSach WHERE MaNhom = 'N001'
(27)Trường hợp
T1 T2
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ USE QLSach
BEGIN TRAN
SELECT sum(SLTon) FROM DanhMucSach WHERE MaNhom = 'N001' waitfor delay '00:00:15‘
USE QLSach BEGIN TRAN
SELECT sum(SLTon) FROM DanhMucSach WHERE MaNhom = 'N001' UPDATE DanhMucSach SET SLTon = SLTon +1 WHERE MaSach = 'S001' SELECT sum(SLTon) FROM DanhMucSach WHERE MaNhom = 'N001'
Nhận xét kết ? Giải thích?
3 So sách mức lập REPEATABLE READ SERIALIZABLE Thử nghiệm xem transaction đọc có cho phép transaction khác thực ghi (insert) liệu mà giao tác đọc quan tâm không?
(28)T1 T2 SET TRANSACTION ISOLATION
LEVEL REPEATABLE READ USE QLSach
BEGIN TRAN
SELECT sum(SLTon) FROM DanhMucSach WHERE MaNhom = 'N001' waitfor delay '00:00:15‘
SELECT sum(SLTon) FROM DanhMucSach WHERE MaNhom = 'N001'
USE QLSach BEGIN TRAN
INSERT DanhMucSach values('S011',N'Hợp ngữ LT
Điều kiển thiết bị',N'Nguyễn Minh Tuấn','N001',25000,20)
Nhận xét kết ? Giải thích ?
Trường hợp 2a
(29)SET TRANSACTION ISOLATION LEVEL
SERIALIZABLE USE QLSach BEGIN TRAN
SELECT sum(SLTon) FROM DanhMucSach WHERE MaNhom = 'N001' waitfor delay '00:00:15‘
USE QLSach BEGIN TRAN
INSERT DanhMucSach values('S011',N'Hợp ngữ LT
Nhận xét kết ? Giải thích ?
Trường hợp 2b
(30)SET TRANSACTION ISOLATION LEVEL
SERIALIZABLE USE QLSach BEGIN TRAN
SELECT sum(SLTon) FROM DanhMucSach WHERE MaNhom = 'N001' waitfor delay '00:00:15‘
USE QLSach BEGIN TRAN
INSERT DanhMucSach values('S011',N'Hợp ngữ
LT Điều kiển thiết bị',N'Nguyễn Minh Tuấn ,
'N001',25000,20) Nhận xét kết ?
(31)Bài 2:
+ Nội dung kiến thức thực hành:
+Transaction: Chỉ định khoá trực tiếp lệnh
Thay mức lập read uncommitted, read committed, repeatable read, serializable, trở lại mức cô lập mặc định, đặt khóa trực tiếp vào lệnh cho giải vấn đề thay cho mức cô lập read uncommitted, read committed, repeatable read, serializable
Bài 3:
+ Nội dung kiến thức thực hành:
+Transaction: mức cô lập Optimistic
Mức cô lập Read Committed ( Snapshot Isolation ) : thiết lập database Thiết lập mức cô lập:
ALTER DATABASE <Tên Database>
SET READ_COMMITTED_SNAPSHOT ON Ví dụ:
ALTER DATABASE QLSach
SET READ_COMMITTED_SNAPSHOT ON
(32)USE QLSach BEGIN TRAN
SELECT sum(SLTon) FROM DanhMucSach WHERE MaNhom = 'N001' UPDATE DanhMucSach SET SLTon = SLTon +1 WHERE MaSach = 'S001' SELECT sum(SLTon) FROM DanhMucSach WHERE MaNhom = 'N001' waitfor delay '00:00:15‘
USE QLSach BEGIN TRAN
SELECT sum(SLTon) FROM DanhMucSach WHERE MaNhom = 'N001' waitfor delay '00:00:15‘ Nhận xét kết ? Giải thích ?
Mức lập Snapshot Isolation (SI): Thiết lập nơi: database connection Thiết lập mức cô lập:
ALTER DATABASE <Tên Database>
SET ALLOW_SNAPSHOT_ISOLATION ON Ví dụ:
ALTER DATABASE QLSach
(33)T1 T2 USE QLSach
BEGIN TRAN
SELECT sum(SLTon) FROM DanhMucSach WHERE MaNhom = 'N001' UPDATE DanhMucSach SET SLTon = SLTon +1 WHERE MaSach = 'S001' SELECT sum(SLTon) FROM DanhMucSach WHERE MaNhom = 'N001' waitfor delay '00:00:15‘
COMMIT TRAN
SET TRANSACTION ISOLATION LEVEL SNAPSHOT
USE QLSach BEGIN TRAN
SELECT sum(SLTon) FROM DanhMucSach WHERE MaNhom = 'N001' waitfor delay '00:00:15‘
SELECT sum(SLTon) FROM DanhMucSach
(34)Sự xung đột transaction cập nhật mức cô lập Snapshot Isolation
T1 T2
SET TRANSACTION ISOLATION LEVEL SNAPSHOT
BEGIN TRAN USE QLSach BEGIN TRAN
SELECT sum(SLTon) FROM DanhMucSach WHERE MaNhom = 'N001' waitfor delay '00:00:10'
UPDATE DanhMucSach SET SLTon = SLTon +1 WHERE MaSach = 'S001'
USE QLSach BEGIN TRAN
UPDATE DanhMucSach SET SLTon = SLTon +1 WHERE MaSach = 'S001' waitfor delay '00:00:15'
Nhận xét kết ? Giải thích ?
(35)T1 T2 SET TRANSACTION ISOLATION LEVEL SNAPSHOT
BEGIN TRAN USE QLSach BEGIN TRAN
SELECT sum(SLTon)
FROM DanhMucSach WITH (UPDLOCK) WHERE MaNhom = 'N001'
waitfor delay '00:00:10'
UPDATE DanhMucSach SET SLTon = SLTon +1 WHERE MaSach = 'S001'
USE QLSach BEGIN TRAN
UPDATE DanhMucSach SET SLTon = SLTon +1 WHERE MaSach = 'S001' waitfor delay '00:00:15'
BÀI TẬP LÀM THÊM SINGLE TRANSACTION
Autocommit mode chế độ quản lý giao dịch mặc định SQL Server Database Engine Mỗi lệnh Transact-SQL commit Rollback hồn thành. 1) Thêm vào bảng Department dòng liệu tùy ý câu lệnh
INSERT VALUES
1) Thực lệnh chèn thêm vào bảng Department dòng liệu tùy ý Giữ khóa
(36)cách thực lệnh Begin tran rollback, dùng câu lệnh Select*from Department xem kết
2) Thực câu lệnh với lệnh commit kiểm tra kết quả.
2) Tắt chế độ autocommit SQL Server (SET IMPLICIT_TRANSACTIONS ON) Tạo đoạn batch gồm thao tác:
Thêm dòng vào bảng
Department
Tạo bảng
Test (id int, name nvarchar(10)) Thêm dòng vào
Test
ROLLBACK;
Xem liệu bảng
Department Test để kiểm tra liệu, giải thích kết
Mục tiêu:
Sinh viên hiểu khái niệm transaction, thuộc tính của transaction, chế hoạt động transaction
Hiện thực transaction ngữ cảnh cụ thể
3) Viết đoạn batch thực thao tác sau (lưu ý thực lệnh SET
XACT_ABORT ON: câu lệnh T-SQL làm phát sinh lỗi run-time, toàn giao dịch chấm dứt Rollback)
Câu lệnh SELECT với phép chia :SELECT 1/0 as Dummy
Cập nhật dòng bảng
Department với id=’9’ (id khơng tồn tại) Xóa dịng khơng tồn bảng
Department (id=’66’)
Thêm dòng vào bảng
Department
COMMIT;
Thực thi đoạn batch, quan sát kết thông báo lỗi giải thích kết 4) Thực lệnh SET XACT_ABORT OFF (những câu lệnh lỗi rollback,
transaction tiếp tục) sau thực thi lại thao tác đoạn batch câu Quan sát kết giải thích kết quả?
II CONCURRENT TRANSACTIONS
1) Tạo bảng Accounts (AccountID int NOT NULL PRIMARY KEY, balance int NOT NULL
CONSTRAINT unloanable_account CHECK (balance >= 0) Chèn liệu:
INSERT INTO Accounts (acctID,balance) VALUES (101,1000); INSERT INTO Accounts (acctID,balance) VALUES (202,2000); 2) SET TRANSACTION ISOLATION LEVEL
(37){ READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SNAPSHOT
| SERIALIZABLE }[ ; ]
READ UNCOMMITTED: đọc dòng hiệu chỉnh transaction khác chưa commit
READ COMMITTED: đọc dòng hiệu chỉnh bởi transaction khác mà chưa commit
3) Mở cửa sổ Query SQL server, thiết lập SET TRANSACTION ISOLATION LEVEL READ COMMITTED cửa sổ (tạm gọi clients A bên trái, và client B bên phải)
Client A, client B: thực lệnh SELECT bảng Accounts với AccountID =101
Clients A cập nhật account AccountID =101, balance =1000-200 Client B cập nhật account AccountID =101, balance =1000-500 Client A: SELECT Accounts với AccountID =101; COMMIT; Client B: SELECT Accounts với AccountID =101; COMMIT; Quan sát kết hiển thị giải thích
4) Thiết lập ISOLATION LEVEL REPEATABLE READ (không thể đọc liệu hiệu chỉnh chưa commit transaction khác khơng có transaction khác hiệu chỉnh liệu đọc giao dịch tại cho đến transaction hoàn thành) client Thực yêu cầu sau: Client A, client B: thực lệnh SELECT bảng Accounts với AccountID =101
Clients A cập nhật accounts AccountID =101, balance =1000-200 Client B cập nhật accounts AccountID =101, balance =1000-500. Client A: SELECT Accounts với AccountID =101; COMMIT; Quan sát kết hiển thị giải thích
5) Giả sử có giao dịch chuyển tiền từ tài khoản 101 202 sau: Client A chuyển 100$ từ tài khoản 101 sang 202
Client B chuyển 200$ từ tài khoản 202 sang 101
(38)INSERT INTO Accounts (AccountID ,balance) VALUES (202,2000); Client A: cập nhật balance account giảm 100 cho AccountID =101, cập nhật balance account tăng lên 100 cho AccountID =202
Client B: thiết lập ISOLATION LEVEL READ UNCOMMITTED SELECT * FROM Accounts;
COMMIT; Client A: ROLLBACK;
SELECT * FROM Accounts; COMMIT;
Quan sát kết giải thích
7) Xóa tất liệu bảng Account, thêm lại dòng mới INSERT INTO Accounts (AccountID ,balance) VALUES (101,1000); INSERT INTO Accounts (AccountID ,balance) VALUES (202,2000); - Client A: thiết lập ISOLATION LEVEL REPEATABLE READ; Lấy Accounts có Balance>1000
- Client B:
INSERT INTO Accounts (AccountID ,balance) VALUES (303,3000);
COMMIT; - Client A:
SELECT * FROM Accounts WHERE balance > 1000; COMMIT;
(39)Tuần 7-8: Audting
Bài tập :
Tạo giám sát đăng nhập thông qua window application log Tạo Audit server (lưu file application)
CREATE SERVER AUDIT KiemTraDoiTuong
TO FILE(FILEPATH='T:\BMCSDL\AUdit\AuditFile') /* substitute in here network drive */
WITH (ON_FAILURE=FAIL_OPERATION, QUEUE_DELAY=0); Bật lên (Enable) Audit Server
ALTER SERVER AUDIT KiemTraDoiTuong WITH (STATE=ON);
3 Tạo Server Specificatetionc
CREATE SERVER AUDIT SPECIFICATION ThucThiKiemTraDoiTuong FOR SERVER AUDIT KiemTraDoiTuong
add (AUDIT_CHANGE_GROUP) Bật lên Server Specificatetion
ALTER SERVER AUDIT SPECIFICATION ThucThiKiemTraDoiTuong WITH (STATE=ON);
5 Thay đổi đường dẫn
ALTER SERVER AUDIT KiemTraDoiTuong WITH (STATE=OFF); ALTER SERVER AUDIT KiemTraDoiTuong TO
FILE(FILEPATH='D:\Audit'); Mục tiêu:
(40)ALTER SERVER AUDIT KiemTraDoiTuong WITH (STATE=ON);
6 Test
drop server audit Giam_Sat_Tong //thử xóa hay tạo audit ghi lại
7 Truy cập file
SELECT * FROM sys.server_file_audits
SELECT * FROM sys.fn_get_audit_file('D:\Audit\*',NULL,NULL); SELECT * FROM sys.dm_server_audit_status
Hình ví dụ Bài tập :
Tạo giám sát thay đổi liệu bảng (lưu file đọc từ file )
(41)CREATE SERVER AUDIT KiemTraTao_Them
TO FILE(FILEPATH='D:\Audit1') /* substitute in here network drive */ WITH (ON_FAILURE=FAIL_OPERATION, QUEUE_DELAY=0);
2 Enable
ALTER SERVER AUDIT KiemTraTao_Them WITH (STATE=ON);
3 Tạo Database audit specificate
CREATE DATABASE AUDIT SPECIFICATION KiemTraTao_Them FOR SERVER AUDIT KiemTraTao_Them
ADD (SELECT , INSERTON [dbo].[NguoiLaoDong] BY dbo ) WITH (STATE = ON) ;
GO Test thử
select * from NguoiLaoDong
Insert into NguoiLaoDong(maNLD,hoTen) values ('NLD5000','Hoai-Yen') Insert into NguoiLaoDong(maNLD,hoTen) values ('NLD6000','Hoai-Yen sua cua user')
5 Đọc file
(42)(43)Tuần 9-10: Mã hóa giải mã
BÀI 1: Encryption USE master
GO
CREATE DATABASE EncryptTest go
USE EncryptTest GO
CREATE TABLE TestTable (FirstCol INT, SecondCol VARBINARY(256)) go
/* Create Database Master Key */
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'SQLAuthority'
GO
/* Create Encryption Certificate */
CREATE CERTIFICATE EncryptTestCert WITH SUBJECT = 'SQLAuthority'
GO
/* Create Symmetric Key */
CREATE SYMMETRIC KEY TestTableKey
WITH ALGORITHM = TRIPLE_DES ENCRYPTION BY CERTIFICATE EncryptTestCert
GO
Mục tiêu:
(44)OPEN SYMMETRIC KEY TestTableKey DECRYPTION BY CERTIFICATE EncryptTestCert
GO
UPDATE TestTable
SET EncryptSecondCol = ENCRYPTBYKEY(KEY_GUID('TestTableKey'),SecondCol) GO
INSERT INTO TestTable
values(1,ENCRYPTBYKEY(KEY_GUID('TestTableKey'),'Hello')) INSERT INTO TestTable
values(2,ENCRYPTBYKEY(KEY_GUID('TestTableKey'),'123456')) INSERT INTO TestTable
values(3,ENCRYPTBYKEY(KEY_GUID('TestTableKey'),'gogogo')) go
SELECT * FROM TestTable GO
/* Decrypt the data of the SecondCol */
OPEN SYMMETRIC KEY TestTableKey DECRYPTION BY CERTIFICATE EncryptTestCert
SELECT CONVERT(VARCHAR(50),DECRYPTBYKEY(SecondCol)) AS DecryptSecondCol
FROM TestTable GO
CLOSE SYMMETRIC KEY TestTableKey GO
BÀI 2
/* Create Database */ USE master
GO
CREATE DATABASE EncryptTest
(45)First, let’s create a sample table and then populate it with sample data We will now encrypt one of the two columns of the table
/* Create table and insert data in the table */ USE EncryptTest
GO
CREATE TABLE TestTable (FirstCol INT, SecondCol VARCHAR(50)) GO
INSERT INTO TestTable (FirstCol, SecondCol) SELECT 1,'First'
UNION ALL
SELECT 2,'Second' UNION ALL
SELECT 3,'Third' UNION ALL
SELECT 4,'Fourth' UNION ALL
SELECT 5,'Fifth' GO
/* Check the content of the TestTable */ USE EncryptTest
GO
SELECT *
FROM TestTable GO
The preceding code will return the result depicted in the subsequent figure
Result of the SQL query
(46)Triple DES algorithm together with user-provided password to encrypt the keys /* Create Database Master Key */
USE EncryptTest GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'SQLAuthority'
GO
Certificates are used to safeguard encryption keys, which are used to encrypt data in the database SQL Server 2005 has the capability to generate self-signed X.509 certificates /* Create Encryption Certificate */
USE EncryptTest GO
CREATE CERTIFICATE EncryptTestCert WITH SUBJECT = 'SQLAuthority'
GO
The symmetric key can be encrypted by using various options such as certificate, password, symmetric key, and asymmetric key A number of different algorithms can be employed for encrypting key The supported algorithms are DES, TRIPLE_DES, RC2, RC4, RC4_128, DESX, AES_128, AES_192, and AES_256
/* Create Symmetric Key */ USE EncryptTest
GO
CREATE SYMMETRIC KEY TestTableKey
WITH ALGORITHM = TRIPLE_DES ENCRYPTION BY CERTIFICATE EncryptTestCert
GO
Now add a column of type varbinary to the original table, which will store the encrypted value for the SecondCol
/* Encrypt Data using Key and Certificate
Add Columns which will hold the encrypted data in binary */ USE EncryptTest
(47)ALTER TABLE TestTable
ADD EncryptSecondCol VARBINARY(256) GO
Before the key is used, it needs to be decrypted using the same method that was used for encrypting it In our example, we have used a certificate for encrypting the key Because of the same reason, we are using the same certificate for opening the key and making it
available for use Subsequent to opening it and making it available for use, we can use the encryptkey function and store the encrypted values in the database, in the
EncryptSecondCol column
/* Update binary column with encrypted data created by certificate and key */ USE EncryptTest
GO
OPEN SYMMETRIC KEY TestTableKey DECRYPTION BY CERTIFICATE EncryptTestCert
UPDATE TestTable
SET EncryptSecondCol =ENCRYPTBYKEY(KEY_GUID('TestTableKey'),SecondCo l)
GO
We can drop the original SecondCol column, which we have now encrypted in the EncryptSecondCol column If you not want to drop the column, you can keep it for future comparison of the data when we decrypt the column
/* DROP original column which was encrypted for protect the data */ USE EncryptTest
GO
ALTER TABLE TestTable DROP COLUMN SecondCol GO
We can run a SELECT query on our database and verify if our data in the table is well protected and hackers will not be able to make use of it even if they somehow manage to reach the data
/* Check the content of the TestTable */ USE EncryptTest
(48)SELECT *
FROM TestTable GO
Result of the previous SQL query
Authorized user can use the decryptbykey function to retrieve the original data from the encrypted column If Symmetric key is not open for decryption, it has to be decrypted using the same certificate that was used to encrypt it An important point to bear in mind here is that the original column and the decrypted column should have the same data types If their data types differ, incorrect values could be reproduced In our case, we have used a
VARCHAR data type for SecondCol and EncryptSecondCol /* Decrypt the data of the SecondCol */
USE EncryptTest GO
OPEN SYMMETRIC KEY TestTableKey DECRYPTION BY CERTIFICATE EncryptTestCert
SELECT CONVERT(VARCHAR(50),DECRYPTBYKEY(EncryptSecondCol)) ASDe cryptSecondCol
FROM TestTable GO
(49)certificates are used only once or their use is over, they can be dropped as well Dropping a database will drop everything it contains – table, keys, certificates, all the data, to name a few
/* Clean up database */ USE EncryptTest
GO
CLOSE SYMMETRIC KEY TestTableKey GO
DROP SYMMETRIC KEY TestTableKey GO
DROP CERTIFICATE EncryptTestCert GO
DROP MASTER KEY GO
USE [master] GO
DROP DATABASE [EncryptTest] GO
Summary
Encryption is a very important security feature of SQL Server 2005 Long keys and