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 tồ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.