CHƯƠNG 4 : THIẾT KẾ ỨNG DỤ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