CSDL sau khi thực hiện mã hóa

Một phần của tài liệu ma hoa csdl trong sql server (Trang 59 - 71)

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.

Một phần của tài liệu ma hoa csdl trong sql server (Trang 59 - 71)

Tải bản đầy đủ (DOC)

(71 trang)
w