Xóa nhân viên:
Miêu tả Xóa bớt những nhân viên bị sai hoặc đã nghỉ việc Đầu vào Mã nhân viên: ID01
Xử lý Kiểm tra mã nhân viên có trong CSDL khơng và cịn rằng buộc gì khơng. Nếu khơng thì thực hiện xóa trong CSDL. Đầu ra Trả về số bản ghi cịn lại trong CSDL sau khi xóa.
Bảng 4.11: Mơ tả chức năng xóa nhân viên
Sửa nhân viên:
Miêu tả Sửa các thơng tin sai của nhân viên Đầu vào Mã nhân viên: ID01
Xử lý Kiểm tra xem Mã nhân viên có hợp lệ khơng. Nếu hợp lệ thì thực hiện việc cập nhật trong CSDL.
Đầu ra Trả về các thông tin của nhân viên sau khi được sửa trong CSDL.
Bảng 4.12: Mô tả chức năng sửa thông tin nhân viên
Xem thông tin lương:
Miêu tả Xem thông tin lương của một hoặc nhiều nhân viên. Đầu vào
Xử lý Truy cập CSDL, lấy ra các bản ghi lương Đầu ra Trả về các thông tin lương của các nhân viên.
Bảng 4.13: Mô tả chức năng xem thông tin lương của nhân viên
Miêu tả Thêm bản ghi lương cho tháng mới Đầu vào Mã nhân viên: ID01
Tháng nhận: 29/1/2010 Thưởng: 3000000 Tổng lương: 6500000 Xử lý Thêm thông tin vào CSDL
Đầu ra Trả lại các bản ghi trong CSDL sau khi thực thi.
Bảng 4.14: Mô tả chức năng thêm thông tin lương nhân viên
Sửa một bản ghi trong bảng lương : Miêu tả Sửa bản ghi lương Đầu vào Mã lương: 10
Mã nhân viên: ID01 Tháng nhận: 29/1/2010 Thưởng: 3000000 Tổng lương: 6500000
Xử lý Kiểm tra mã lương, nếu tồn tại thì thực hiện update các trường trong bản ghi đó.
Đầu ra Trả lại các bản ghi trong CSDL sau khi đã thực thi công việc trên.
Bảng 4.15: Mô tả chức năng sửa thông tin lương nhân viên
Xóa một bản ghi trong bảng lương : Miêu tả Xóa bản ghi lương Đầu vào Mã lương: 10
Xử lý Truy cập CSDL kiểm tra mã lương tồn tại khơng. Nếu có thì thực hiện xóa. nếu khơng đưa ra thông báo
Đầu ra Trả lại các bản ghi trong CSDL sau khi thực thi.
Ngồi ra các nhân viên có chức năng đăng nhập vào hệ thống. Kế toán trưởng có quyền tạo ra user cho việc đăng nhập hệ thống.
4.6. Sơ đồ quan hệ thực thể:
Hình 4.2: Sơ đồ quan hệ thực thể
4.7. Mô tả chi tiết các bảng
Bảng Employee:
Khóa Tên Trường Kiểu dữ liệu Kích thước Not Null Mơ tả
PK EmployeeID Int X Mã nhân viên
EmployeeName Varchar 50 X Tên nhân viên
Position Varchar 50 X Chức vụ của nhân viên PostCode Varchar 50 X Mã số thẻ nhận lương Phone Varchar 50 X Số điện thoại của nhân
viên
Bảng 4.17: Bảng mô tả các trường trong bảng Employee của CSDL
Bảng Salary (Lương):
Khóa Tên Trường Kiểu dữ liệu Kích thước Not Null Miêu tả
PK SalaryID Int X Mã số nhận lương
FK EmployeeID Int X Mã số nhân viên
DatePay Datetim
e
X Ngày trả lương Reward Varchar 50 X Tiền thưởng nhân
viên được nhận trong 1 tháng. Total Varchar 50 X Tổng tiền lương
nhân viên được nhận trong 1 tháng.
Bảng 4.18: Bảng mô tả các trường trong bảng Salary của CSDL
4.8. Sơ đồ quan hệ các bảng:
Hình 4.3: Sơ đồ quan hệ giữa các bảng
4.9. Thực hiện mã hóa CSDL
Trong bài này, CSDL gồm có 2 bảng là: Salary (bảng thông tin lương)và Employee (bảng thông tin nhân viên). Trong bảng Salary, sẽ thực
hiện mã hóa cột Reward (lương thưởng hàng tháng) và cột Total (tổng lương mà nhân viên nhận được trong một tháng). Bảng Employee sẽ thực hiện mã hóa cột Position (cột thơng tin vị trí của nhân viên trong công ty) và cột PostCode (cột mã số thẻ gửi tiền của từng nhân viên).
Để có thể mã hóa được, chúng ta phải tạo ra một khóa DMK để mã hóa các khóa trong CSDL.
IF NOT EXISTS
(SELECT * FROM sys.symmetric_keys WHERE symmetric_key_id = 101)
CREATE MASTER KEY ENCRYPTION BY
PASSWORD = 'Stronge@11Password$8#1987' Sau đó tạo ra hai chứng chỉ.
CREATE CERTIFICATE Cert_Encrypt
WITH SUBJECT = 'Encryption database in sql server 2005'; GO
CREATE CERTIFICATE Cert_Manage
WITH SUBJECT = 'Encryption database in sql server 2005'; Sau đó tạo ra một khóa đối xứng để mã hóa dữ liệu.
CREATE SYMMETRIC KEY SSN_Key_01 authorization ManageEmployee WITH ALGORITHM = AES_256
ENCRYPTION BY CERTIFICATE Cert_Encrypt GO
CREATE SYMMETRIC KEY SSN_Key_Manage authorization ManageEmployee
WITH ALGORITHM = AES_256
ENCRYPTION BY CERTIFICATE Cert_Manage
Thực hiện việc mã hóa theo các bước sau, giả sử ta mã hóa các cột Position và PostCode trong CSDL:
Bước 1: Tạo cột để lưu các dữ liệu mã hóa. Cột EPosition để lưu dữ liệu mã hóa của cột Position, cột EPostCode để lưu dữ liệu mã hóa của cột PostCode.
Cụ thể như sau: Go
ALTER TABLE thuyan.Employee ADD EPosition varbinary(256) ALTER TABLE thuyan.Employee ADD EPostCode varbinary(256)
Bước 2: Ta tạo một procedure khơng tham số có tên là sp_EPostCode để thực hiện việc mã hóa cột PostCode. Khai báo một con trỏ để đọc từng bản ghi của bảng.
-- THUC HIEN MA HOA CAC COT CUA Employee create proc EEmployee
with encryption as
begin
declare @Position varchar(50); declare @PostCode varchar(50);
declare cusor1 Cursor for select Position,PostCode from thuyan.Employee;
open cusor1;
OPEN SYMMETRIC KEY SSN_Key_01
DECRYPTION BY CERTIFICATE Cert_Encrypt OPEN SYMMETRIC KEY SSN_Key_Manage
DECRYPTION BY CERTIFICATE Cert_Manage
fetch next from cusor1 into @Position,@PostCode; while(@@FETCH_STATUS=0)
begin
if ((@Position like'%truong phong%') or (@Position like '%Giam doc'))
begin
update thuyan.Employee set EPosition= ENCRYPTBYKEY(KEY_GUID('SSN_Key_Manage'),@Position), EPostCode= ENCRYPTBYKEY(KEY_GUID('SSN_Key_Manage'),@PostCode) where Position= @Position; end
else update thuyan.Employee set EPosition= ENCRYPTBYKEY (KEY_GUID('SSN_Key_01'),@Position),
EPostCode=
ENCRYPTBYKEY(KEY_GUID('SSN_Key_01'),@PostCode)
where Position= @Position;
fetch next from cusor1 into @Position,@PostCode; end
close cusor1;
DEALLOCATE cusor1;
ALTER TABLE thuyan.Employee DROP COLUMN PostCode; ALTER TABLE thuyan.Employee DROP COLUMN Position; close Symmetric key SSN_Key_01;
close Symmetric key SSN_Key_Manage; END
Tương tự như vậy với cột Position và các cột Reward và Total trong bảng Salary. (xem trong file CSDL ).
Sau khi đã có các giá trị mã hóa trong CSDL. Truy vấn SELECT tới bảng mã hóa (Employee). Kết quả cho ta như sau.
Hình 4.4: CSDL trước khi thực hiện mã hóa
Sau khi thực hiện mã hóa:
Hình 4.5: CSDL sau khi thực hiện mã hóa
4.10. Phân phối khóa tới người sử dụng
Tạo ra hai user là ManageEmployee và EmployeeUser. Trong đó ManageEmployee là người quản lý các nhân viên, có thể hiển thị tồn bộ các nhân viên trong cơng ty. EmployeeUser thì chỉ được xem một số nhân viên trong công ty. Việc tạo user thực hiện như sau:
CREATE LOGIN ManageEmployee WITH PASSWORD= 'Strong11@Password#8$1987'
CREATE USER ManageEmployee FOR LOGIN ManageEmployee WITH default_schema= dbo
GO
CREATE LOGIN EmployeeUser WITH PASSWORD = 'Stronge@11Password$8#1987'
GO
CREATE USER EmployeeUser FOR LOGIN EmployeeUser
Để có thể thực hiện việc giải mã dữ liệu, thì người quản trị phải phân quyền cho người dùng. Đối với người quản lý sẽ có các quyền sau:
Grant Create table to ManageEmployee -- quan trong Grant View Definition to ManageEmployee
Grant execute to ManageEmployee
Grant Take ownership to ManageEmployee
Grant Control on Schema::dbo to ManageEmployee-- quan trong Grant Control on certificate::Cert_Encrypt to
ManageEmployee-- quan trong
Grant Control on certificate::Cert_Manage to ManageEmployee Grant Control on Symmetric key::SSN_Key_01 to ManageEmployee Grant Control on Symmetric key::SSN_Key_Manage to
ManageEmployee
Grant exec on DManageEmployee to ManageEmployee Grant exec on DManageSalary to ManageEmployee Grant exec on InsertEmployee to ManageEmployee
Grant exec on InsertEmployeeManage to ManageEmployee Grant exec on UpdateEmployee to ManageEmployee
Grant exec on UpdateSalary to ManageEmployee Grant exec on DeleteEmployee to ManageEmployee Grant exec on DeleteSalary to ManageEmployee
Cấp quyền cho nhân viên bình thường:
Deny References on certificate::Cert_Manage to EmployeeUser Deny View definition on certificate::Cert_Manage to
EmployeeUser
Deny View definition on Symmetric key:: SSN_Key_Manage to EmployeeUser
Grant Control on certificate::Cert_Encrypt to EmployeeUser Grant Control on Symmetric key::SSN_Key_01 to EmployeeUser Grant Create table to EmployeeUser
Grant Select to EmployeeUser
Grant exec on sp_DEmployee to EmployeeUser Grant exec on DSalary to EmployeeUser
Grant exec on InsertEmployee to EmployeeUser Grant exec on UpdateEmployee to EmployeeUser Grant exec on UpdateSalary to EmployeeUser Grant exec on DeleteEmployee to EmployeeUser Grant exec on DeleteSalary to EmployeeUser
procedure đã tạo sẵn. Trong bài này, chúng ta tạo ra procedure cho nhân viên bình thường được xem các thơng tin của một số nhân viên, các nhân viên không được xem sẽ hiển thị ' * '. Minh họa thủ tục DEmployee cho phép xem thông tin của một số nhân viên:
CREATE PROC sp_DEmployee WITH ENCRYPTION
AS BEGIN
CREATE TABLE Temp(EmployeeID int, EPosition varbinary(256), Position varchar(50),EPostCode varbinary(256), PostCode varchar(50));
DECLARE @EPosition varbinary(256) DECLARE @EPostCode varbinary(256) DECLARE @ID int
DECLARE cusor3 CURSOR FOR SELECT
EmployeeID,EPosition,EPostCode FROM thuyan.Employee; OPEN cusor3;
OPEN SYMMETRIC KEY SSN_Key_01
DECRYPTION BY CERTIFICATE Cert_Encrypt
FETCH NEXT FROM cusor3 INTO @ID,@EPosition,@EPostCode; WHILE(@@FETCH_STATUS=0)
BEGIN
DECLARE @DPosition varchar(50) SET @DPosition=
convert(varchar(50),DECRYPTBYKEY(@EPosition)); DECLARE @DPostCode varchar(50)
SET @DPostCode=
convert(varchar(50),DECRYPTBYKEY(@EPostCode));
INSERT INTO Temp VALUES (@ID, @EPosition, @DPosition,@EPostCode,@DPostCode);
FETCH NEXT FROM cusor3 INTO @ID,@EPosition,@EPostCode;
END
SELECT Employee.EmployeeID, EmployeeName,
Phone,Address,case WHEN Position like '%Giam doc%' THEN '*************************'
WHEN Position like '%Tong giam doc%' THEN '**********************'
WHEN Position like '%Ke toan truong%' THEN '*********************'
WHEN Position like '%truong phong%' THEN '*******************'
ELSE Position END AS 'Position',
CASE WHEN Position like '%Giam doc%' THEN '**********************'
WHEN Position like '%Tong giam doc%' THEN '**********************'
WHEN Position like '%Ke toan truong%' THEN '**********************'
WHEN Position like '%truong phong%' THEN '************************'
ELSE PostCode END AS 'PostCode'
FROM thuyan.Employee join Temp on Employee.EmployeeID= Temp.EmployeeID
DROP table Temp; CLOSE cusor3;
DEALLOCATE cusor3;
CLOSE SYMMETRIC KEY SSN_Key_01; END
Kết quả sau khi thực thi:
Thủ tục cho phép nhân viên xem thông tin của tất cả nhân viên trong công ty:
CREATE PROC DManageEmployee WITH encryption
AS BEGIN
CREATE TABLE Temp(EmployeeID int, EPosition varbinary(256), Position varchar(50),EPostCode varbinary(256), PostCode
varchar(50));
DECLARE @EPosition varbinary(256) DECLARE @EPostCode varbinary(256) DECLARE @ID int
DECLARE cusorManage Cursor for select
EmployeeID,EPosition,EPostCode from thuyan.Employee; OPEN cusorManage;
OPEN SYMMETRIC KEY SSN_Key_01
DECRYPTION BY CERTIFICATE Cert_Encrypt OPEN SYMMETRIC KEY SSN_Key_Manage
DECRYPTION BY CERTIFICATE Cert_Manage
FETCH NEXT FROM cusorManage INTO @ID,@EPosition,@EPostCode; WHILE(@@FETCH_STATUS=0)
BEGIN
DECLARE @DPosition varchar(50) SET @DPosition=
CONVERT(varchar(50),DECRYPTBYKEY(@EPosition)); DECLARE @DPostCode varchar(50)
SET @DPostCode= CONVERT
(varchar(50),DECRYPTBYKEY(@EPostCode));
INSERT INTO Temp VALUES (@ID, @EPosition, @DPosition,@EPostCode,@DPostCode);
FETCH NEXT FROM cusorManage INTO @ID,@EPosition,@EPostCode;
END
SELECT Employee.EmployeeID, EmployeeName, Phone, Address, Position , PostCode
FROM thuyan.Employee JOIN Temp ON Employee.EmployeeID= Temp.EmployeeID
DROP TABLE Temp; CLOSE cusorManage;
CLOSE SYMMETRIC KEY SSN_Key_01; DEALLOCATE cusorManage;
END GO
Thủ tục cho phép xem thông của tất cả nhân viên, cả những nhân viên cấp cao:
CREATE PROC DManageEmployee WITH ENCRYPTION
AS BEGIN
CREATE TABLE Temp(EmployeeID int, EPosition varbinary(256), Position varchar(50),EPostCode varbinary(256), PostCode
varchar(50));
DECLARE @EPosition varbinary(256) DECLARE @EPostCode varbinary(256) DECLARE @ID int
DECLARE cusorManage CURSOR FOR select
EmployeeID,EPosition,EPostCode FROM thuyan.Employee; OPEN cusorManage;
OPEN SYMMETRIC KEY SSN_Key_01
DECRYPTION BY CERTIFICATE Cert_Encrypt OPEN SYMMETRIC KEY SSN_Key_Manage
DECRYPTION BY CERTIFICATE Cert_Manage
WHILE(@@FETCH_STATUS=0) BEGIN
DECLARE @DPosition varchar(50) SET @DPosition=
convert(varchar(50),DECRYPTBYKEY(@EPosition)); DECLARE @DPostCode varchar(50)
SET @DPostCode=
convert(varchar(50),DECRYPTBYKEY(@EPostCode));
INSERT INTO Temp VALUES (@ID, @EPosition, @DPosition,@EPostCode,@DPostCode);
FETCH NEXT FROM cusorManage INTO @ID,@EPosition,@EPostCode;
END
SELECT Employee.EmployeeID, EmployeeName, Phone, Address,Position ,PostCode
FROM thuyan.Employee JOIN Temp ON Employee.EmployeeID= Temp.EmployeeID
DROP TABLE Temp; CLOSE cusorManage;
CLOSE SYMMTRIC KEY SSN_Key_01; DEALLOCATE cusorManage;
END GO
Tương tự tạo các thủ tục để cho phép xem lương các nhân viên trong công ty và các thủ tục thực hiện insert, update, delete dữ liệu vào các bảng. Phân quyền cho các user thực hiện truy vấn vào các procedure đó:
Grant exec on DManageEmployee to ManageEmployee Grant exec on DManageSalary to ManageEmployee Grant exec on InsertEmployee to ManageEmployee
Grant exec on InsertEmployeeManage to ManageEmployee Grant exec on UpdateEmployee to ManageEmployee
Grant exec on UpdateSalary to ManageEmployee Grant exec on DeleteEmployee to ManageEmployee Grant exec on DeleteSalary to ManageEmployee
Cho các nhân viên có chức vụ bình thường: Grant exec on sp_DEmployee to EmployeeUser Grant exec on DSalary to EmployeeUser
Grant exec on InsertEmployee to EmployeeUser Grant exec on UpdateEmployee to EmployeeUser Grant exec on UpdateSalary to EmployeeUser Grant exec on DeleteEmployee to EmployeeUser Grant exec on DeleteSalary to EmployeeUser
Kiểm tra xem các user có thực hiện đúng quyền hạn chưa: GO
select CURRENT_USER
exec as user= 'EmployeeUser' --OK select * from thuyan.Salary –OK -- thu thuc thi cac procedure
exec sp_DEmployee --OK
exec DManageEmployee --Cannot find the symmetric key 'SSN_Key_Manage', because it does not exist or you do not have permission.
-- chuyen sang user quan ly: revert
exec as user= 'ManageEmployee' select * from thuyan.Salary –OK -- thu thuc thi cac procedure exec sp_DEmployee --OK
exec DManageEmployee --OK
< Chi tiết các phần xem trong tập CSDL >.
KẾT LUẬN
Cho tới nay, việc mã hoá dữ liệu là một phương pháp quan trọng để bảo vệ những dữ liệu nhạy cảm hoặc riêng tư không bị xâm phạm bởi những người dùng có ác ý hay những kẻ tấn cơng. Hiện nay các phương tiện truyền thông trên thế giới đã nói khá nhiều về khả năng rị rỉ những dữ liệu cá nhân của khách hàng như mã số bảo hiểm xã hội, thơng tin thẻ tín dụng... Do đó, muốn bảo vệ dữ liệu chỉ sử dụng các chương trình và thiết bị bảo mật như fireware,
IDS/IPN, ... thì chưa đủ mà phải kết hợp với mã hóa dữ liệu. Vì thời gian có hạn nên đồ án của em cịn khá khiêm tốn.
Kết quả đạt được:
- Phân phối khóa đến người sử dụng. - Thực hiện được mã hóa CSDL.
- Có thể giải mã được dữ liệu tùy theo người dùng đăng nhập. - Có thể thêm, cập nhật, xóa dữ liệu mã hóa.
- Thay thế khóa khi khóa bị lộ. - Backup khóa.
- Xây dựng hệ thống CSDL tích hợp vào ứng dụng
Ưu điểm khi sử dụng mã hóa CSDL trong SQL Server:
- Đảm bảo tính thời gian thực.
- Đảm bảo an toàn cho dữ liệu qua nhiều lớp mã hóa. - Trong suốt với người dùng.
Hạn chế:
- Do khóa được lưu trữ trong CSDL người dùng, nên việc mã hóa khơng ngăn cản được các thao tác của những thành viên trong nhóm systemAdmin có ác ý.
- Việc quản lý và phân phối khóa yêu cầu người quản trị phải là người có kiến thức.
- Như đã nói ở trên, việc mã hóa dữ liệu thơi chưa đủ mà phải kết hợp với việc tuân thủ các tiêu chuẩn an toàn.
Hướng phát triển:
- Tích hợp quản lý khóa mở rộng (EKM) sử dụng một nhà cung cấp mật mã bên ngoài HSM (Hardware Security Module) vào ứng dụng để việc phân phối và quản lý khóa được đảm bảo.
- Áp dụng cả mã hóa mức CSDL và mã hóa mức file để nâng cao tính bảo mật.
Một lần nữa em xin chân thành cảm ơn TS. Nguyễn Nam Hải và CN. Trần Thị Lượng đã tận tình giúp đỡ em hồn thành đồ án của mình!
Do chưa có nhiều kinh nghiệm trong q trình nghiên cứu nên đồ án của em khó tránh được những thiếu sót, en rất mong nhận được sự nhận xét, góp ý của thầy cơ và các bạn!
TÀI LIỆU THAM KHẢO
[1]. Alexander Chigrik. Managing Users Permissions on SQL Server. Featured Database Articles , Trang 1- 2, (Năm 2003).
[2]. Enable TDE Using EKM. Microsoft TechNet, Microsoft, (Năm 2008). [3]. Administrator's Guide to SQL Server 2005. Pearson Education (Năm 2006).
[4]. Ownership Chains and Context Switching. Server 2005 Books Online, Microsoft, (Năm 2008).
[5]. Security E-Learning 2009 . Bảo mật thông tin NIS, (Năm 2006) <URL: http://www.nis.com.vn/nis/index.php?
option=content&task=view&id=39&Itemid=2 >
[6]. Rob Walters. Developing Applications with SQL Server Express Edition. Pearson Education (Năm 2008).
[7]. Cryptographic Functions. SQL Server 2005 Books Online, Microsoft, (Năm 2008).
[8]. Vi.wikipedia. Thuật tốn khóa đối xứng. wikipedia, (Năm 2010). <URL: http://vi.wikipedia.org/wiki/>
[9]. Signing Stored Procedures with a Certificate . SQL Server 2005 Books Online, Microsoft, (Năm 2008).
PHỤ LỤC
Các hình ảnh minh họa ứng dụng: Bước 1: Đăng nhập hệ thống
Bước 2: Thực hiện thao tác trên hệ thống như xem thông tin nhân viên, lương nhân viên như sau.
Ngồi ra cịn sửa thơng tin nhân viên và lương, xóa thơng tin lương và nhân viên.