Mô tả chức năng xem thêm nhân viên

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

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.

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

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

(71 trang)
w