M MỤỤỤC LC LC LỤỤỤCCCCC
TASK 5: CÁC K THU T TỸ Ậ ỐI ƯU TRONG VIẾT LỆNH TRUY VẤN SQL 2 1 S d ng tên c t thay vì * trong SELECT 2 ử ụ ộ 2 Tránh đưa mệnh đề HAVING trong l nh SELECT 2 ệ 3 Lo i b các mạ ỏ ệnh đề DISTINCT không c n thi t 3 ầ ế 4 Un-nest các truy v n n i b (Sub-query) 3 ẫ ộ ộ 5 Cân nh c s d ng mắ ử ụ ệnh đề IN khi truy v n m t cấ ộ ột đã được đánh INDEX 4 6 S d ng EXISTS thay cho DISTINCT khi k t n i các b ng có m t ho c nhi u liên k t 5 ử ụ ế ố ả ộ ặ ề ế 7 S d ng UNION ALL thay cho UNION 5 ử ụ 8 Tránh s d ng OR trong các mử ụ ệnh đề thỏa mãn nhiều điều ki n 6 ệ 9 Tránh đặt hàm số bên phải của toán tử so sánh 7 3.2 Mã hóa không gian b ng TDEả 1 4 Các thu t toán mã hóa sau h ậ ỗ trợ trong SQL Server 2 5 Các bước b t Mã hóa dậ ữ liệu minh b ch (TDE) 2ạ
Trang 3TASK 5: CÁC K THUỸẬT TỐI ƯU TRONG VIẾT LỆNH TRUY V N SQL Ấ
Tối ưu hóa truy vấn là một kĩ năng quan trọng đối với các Data Analyst, nguời khai thác dữ liệu t CSDL vừ ớ ần su t cao Vii t ấ ệc điều ch nh truy v n có liên quan t i nh ng ki n ỉ ấ ớ ữ ế thức về các kĩ thuật như công cụ ối ưu theo chi phí và theo kinh nghiệ t m, cộng với những công cụ giúp phân tích kế hoạch thực thi truy vấn (execution plan) do CSDL cung cấp
1 S d ng tên c t thay vì * trong SELECT ử ụộ
Nếu b n ch ạ ỉ đang chọn một số ít cột từ ả b ng, không c n s d ng l nh SELECT * Dù ầ ử ụ ệ cách viết này dễ, nhưng lại gây t n nhi u thố ề ời gian hơn để cơ sở ữ liệ d u có th hoàn thành ể truy v n B ng cách ch ấ ằ ỉ chọn nh ng cữ ột cần thiết, bạn đang giảm b t kích c c a b ng kớ ỡ ủ ả ết qu , giả ảm lưu lượng m ng, và làm tạ ăng hiệu năng của truy v n ấ
Ví dụ: Truy v n gấốc:
SELECT * FROM SH.Sales; Truy vấn đã được cải thi n:ệ
SELECT s.prod_id FROM SH.sales s;
2. Tránh đưa mệnh đề HAVING trong l nh SELECT ệ
Mệnh đề HAVING có tác d ng lụ ọc sau khi các hàng đã được chọn và được sử ụng như d m t filter Mộ ệnh đề này không có nhi u tác d ng về ụ ới lệnh SELECT Cách hoạt động c a nó ủ là quét qua bảng k t qu ế ả cuối cùng để phân tích và b nhỏ ững hàng không đáp ứng điều ki n ệ
Trang 4Truy vấn đã được cải thi n:ệ
3 Loại bỏ các mệnh đề DISTINCT không c n thi t ầế
Khi xem xét ví dụ dưới đây, từ khóa DISTINCT trong truy vấn gốc là không cần thiết vì tên bảng đã chứa p.ID là khóa chính c a b ng ủ ả – đây là một phần của kết quả Việc đưa m nh d DISTINCT s khi n CSDL thệ ề ẽ ế ực hiện thêm m t phép so ộ sánh để loại bỏ các dòng
WHERE c.cust_marital_status = 'single'; Truy vấn đã được cải thi n:ệ
SELECT * FROM SH.sales s JOIN SH.customers c
ON s.cust_id = c.cust_id
WHERE c.cust_marital_status='single';
4 Un-nest các truy vẫn nội bộ (Sub-query)
Viết lại các sub-query s giúp truy v n ch y hi u qu và tẽ ấ ạ ệ ả ối ưu hơn Nhìn chung, việc unnest các sub-query luôn được tiến hành v i sub-quớ ery tương tác với tối đa một bảng t ừ mệnh đề FROM, được s d ng trong các mử ụ ệnh đề ANY, ALL, và EXISTS Một sub-query
Trang 5không tương quan, hay một sub-query với nhiều hơn một bảng từ mệnh đề FROM, sẽ được
FROM SH.products p, sales s WHERE p.prod_id = s.prod_id AND s.cust_id = 100996 AND s.quantity_sold = 1;
5 Cân nhắc sử ụ d ng mệnh đề IN khi truy v n mấột cột đã được đánh INDEX
Mệnh đề IN có thể được khai thác cho các lệnh truy v n s d ng bấ ử ụ ảng đã được đánh INDEX, và đồng thời, công c tụ ối ưu hóa có thể ắp x s ếp danh sách IN để khớp v i thứ ựớ t phân loại của chỉ ố s , d n tẫ ới lệnh truy v n hi u qu ấ ệ ả hơn Do đó khi trong quá trình thực hành và t h c SQL, c n chú ý r ng danh sách IN ch ự ọ ầ ằ ỉ được ch a các hà m, ho c các giá trứ ặ ị là hằng s ố trong việc thực hiện kh i truy v n, ví d ố ấ ụ như các tham chi u ngoài ế
Trang 6Từ khóa DISTINCT có tác d ng ch n tụ ọ ất cả ột trong bả c ng, phân tích và lọc ra các cột bị trùng lặp Thay vào đó, nếu bạn s d ng sub-query vử ụ ới từ khóa EXISTS, bạn có thể tránh việc phả ả l i toàn b m t b ng i tr ạ ộ ộ ả
Ví dụ:
Truy v n gấốc:
SELECT DISTINCT c.country_id, c.country_name FROM SH.countries c,SH.customers e
WHERE e.country_id = c.country_id; Truy vấn đã được cải thi n:ệ
SELECT c.country_id, c.country_name FROM SH.countries c
WHERE EXISTS (SELECT 'X' FROM SH.customers e WHERE e.country_id = c.country_id);
7 S d ng UNION ALL thay cho UNION ử ụ
Mệnh đề UNION ALL nhanh hơn UNION bỏi vì mệnh đề UNION ALL không tính tới các điểm trùng lập và mệnh đề UNION lại tìm các điểm trùng lặp trong b ng khi ch n ả ọ hàng, dù có điểm trùng lặp hay không hãy ưu tiên sử dụng UNION ALL khi chúng ta biết chắc chắn m i dòng trong kỗ ết quả sẽ là duy nhất hoặc có thể ấp nh n vich ậ ệc trùng lặp
Ví dụ:
Trang 78 Tránh s d ng OR trong các mử ụệnh đ thỏề a mãn nhiều điều kiện
Trong trường h p khi bạn tự h c SQL, m i khi bợ ọ ỗ ạn đặt ‘OR’ trong condition kết nối, truy v n sấ ẽ chậm đi ít nhất một hoặc hai thừa s ố
Ví dụ: Truy v n gấốc:
SELECT * FROM SH.costs c
INNER JOIN SH.products p ON c.unit_price = p.prod_min_price OR c.unit_price = p.prod_list_price;
Trang 8SELECT * FROM SH.costs c
INNER JOIN SH.products p ON c.unit_price = p.prod_list_price;
9 Tránh đặt hàm số bên phải của toán tử so sánh
Các hàm s ố hay phương pháp rất thường được s d ng v i truy vử ụ ớ ấn SQL tương ứng Viết lại truy v n b ng cách b các hàm t ng h p s ấ ằ ỏ ổ ợ ẽ tăng hiệu suất đáng kế, đặc biệ ới các t v
SELECT * FROM SH.sales
WHERE TRUNC (time_id) BETWEEN TRUNC (TO_DATE (‘12/01/2001’,’mm/dd/yyyy’)) AND TR (TO_DATE (‘12/30/2001’,’mm/dd/yyyy’));
10 Lo i b các phép toán th a ạ ỏừ
Khi làm hoặc tự ọ h c SQL, s có lúc b n thẽ ạ ực hiện các phép toán trong m t statement ộ của SQL Các phép toán có thể làm gi m hiả ệu suất đáng k nếu cách viết không phù hợp ể Mỗi lần truy v n tìm th y m t hàng, nó s ấ ấ ộ ẽ thực hiệ ạn l i phép toán Vì v y, viậ ệc lo i bỏạ phép toán không cần thiế ẽ giúp truy v n cht s ấ ạy nhanh hơn rất nhi u ề
Ví dụ: Truy v n gấốc:
Trang 9Trong trường h p sử dợ ụng SELECT COUNT(*) để xác định s bản ghi thì thay bằng ố SELECT rows FROM sysindexes WHERE id= OBJECT_ID(‘table_name’)
12 S d ng store procedure (SP) ử ụ
Đố ới v i những thao tác được thực hiện thường xuyên và phức tạp, bạn nên sử d ng ụ SP để giảm lượng dữ li u truyệ ền đến máy chủ (thay vì b n ph i gửi câu l nh sql dài b n ch ỉạ ả ệ ạ cần gửi đi tên sp và danh sách tham số)
13 Tránh dùng CURSOR
Cursor không khác một vòng l p thao tác tặ ới từng b n ghi Bả ản ghi đó sẽ ị b lock cho tới khi được x ử lý xong Khi có thao tác tác động tới dữ liệ u c a cursor s gây ra l i Trong ủ ẽ ỗ nhiều trường h p s d ng bợ ử ụ ảng temp để thay th ế cho cursor Nếu có th hãy dùng bi n table ể ế trong My SQL (t phiên bừ ản 2008 đến nay) thay th ế cho bảng temp
1 TDE là gì?
Mã hóa dữ liệ u trong suốt (Transparent data encryption – TDE) là một trong những cơ chế an toàn, cho phép mã hóa dữ liệu nhạy cảm được lưu trữ trong bảng và không gian
Trang 10b ng D ả ữ liệu được mã hóa và gi i mã trong suả ố ốt đ i với người dùng và các ng d ng có ứ ụ quy n truy c p vào d ề ậ ữ liệu Để ngăn chặn vi c giệ ải mã trái phép, TDE lưu trữ các khóa mã hóa trong mô-đun an toàn bên ngoài cơ sở ữ liệ d u (CSDL)
TDE thực hiện mã hóa và giải mã th i gian thờ ực các dữ liệu và các t p nhệ ật ký Việc mã hóa s d ng khóa mã hóa d u (Data Encryption Key - ử ụ ữ liệ DEK) được lưu trữ trong bản ghi khởi động CSDL để ẵ s n sàng trong quá trình phục hồi Bên cạnh đó, TDE có khả năng b o v d ả ệ ữ liệu lưu trữ, nghĩa là các tệp d u và nh t ký Nó cung c p kh ữ liệ ậ ấ ả năng tuân thủ nhi u luề ật, quy định và hướng dẫn được thiết lập trong các ngành công nghi p khác nhau ệ Điều này cho phép các nhà phát triển phần mềm mã hóa dữ li u b ng cách sử d ng thuệ ằ ụ ật toán mã hóa AES và 3DES mà không cần thay đổi các ứng d ng hi n có ụ ệ
Người dùng và ng dứ ụng cơ sở ữ liệ d u không c n quầ ản lý lưu trữ khóa hoặ ạc to b ng ả ph , d ng xem và kích hoụ ạ ạt Một ứng d ng x ụ ử lý dữ liệ u nh y c m có th s dạ ả ể ử ụng TDE để cung cấp mã hóa d u mữ liệ ạnh mẽ v i ít hoớ ặc không có thay đổi nào đối với ứng d ng ụ
2. Ưu điểm và h n ch c a TDE ạế ủ2.1 Ưu điểm
TDE có các ưu điểm nổi b t sau:ậ
- Đảm b o an toàn các d u nh y cả ữ liệ ạ ảm trong trường hợp phương tiện lưu trữ hoặc t p d u b ệ ữ liệ ị đánh cắp
- Tuân thủ các quy định liên quan đến an toàn
- Không cần t o trình kích hoạ ạt hoặc chế độ xem để ả gi i mã dữ liệu cho người dùng hoặc ứng dụng được ủy quy n D u t các bề ữ liệ ừ ảng được giải mã trong suốt cho người dùng và ng d ng CSDL ứ ụ
- Các ng d ng không c n phứ ụ ầ ải sửa đổi để xử lý dữ liệu được mã hóa Mã hóa và giải mã d ữ liệu được qu n lý bả ởi cơ sở ữ liệ d u
- Hoạt động quản lý được tự động hóa Người dùng hoặc ứng d ng không c n qu n lý ụ ầ ả khóa mã hóa
2.2 H n ch ạế
Mặc dù có r t nhiều ưu điểm, nhưng TDE không cung cấấ p mã hóa trên kênh truy n ề thông Khi kích hoạt TDE, phải sao lưu chứng thư và khóa riêng gắn với chứng thư đó Nếu chứng thư không có sẵn hoặc ph i khôi phả ục hay đính kèm CSDL trên một máy ch khác, ủ thì phải có bản sao lưu của cả chứng thư và khóa riêng Nếu không, người dùng sẽ không th ể truy c p thành công CSDL ậ
Trang 11Bên cạnh đó, phải lưu lại chứng thư mã hóa ngay cả khi TDE không còn được kích hoạt trên CSDL Mặc dù, CSDL không được mã hóa, nhưng khóa mã hóa CSDL cần được lưu trữ vì có thể cần phải được truy c p cho mậ ột số hoạt động
Mặt khác, việc các chứng thư được bảo v b ng mệ ằ ật khẩu sau khi chúng được sử d ng b i TDE s gây ra vi c CSDL không th truy cụ ở ẽ ệ ể ập được sau khi khở ội đ ng l ại.
3 Các loại mã hóa TDE
Có hai lo i mã hóa TDE: Mã hóa c t và mã hóa không gian b ng Trong khi mã hóa ạ ộ ả cột TDE cho phép mã hóa dữ liệu nh y cạ ảm được lưu trữ trong các c ột của bảng được chọn, thì mã hóa không gian b ng TDE cho phép mã hóa tả ất cả ữ liệu được lưu trữ d trong một vùng b ng ả
C mã hóa c t và mã hóa không gian bả ộ ảng TDE đều s d ng ki n trúc dử ụ ế ựa trên khóa hai t ng Ngay c khi d ầ ả ữ liệu mã hóa được truy xu d ất, ữ liệu cũng không được hiển th cho ị đến khi quá trình giải mã được ủy quyền xảy ra, quá trình này là tự động cho người dùng được ủy quyền truy cập vào bảng
3.1 Mã hóa c t TDE ộ
Mã hóa cột TDE được sử dụng để ả b o v d u nh y cệ ữ liệ ạ ảm, chẳng hạn như thẻ tín d ng và s an sinh xã hụ ố ội, được lưu trữ trong các cột của bảng Lo i mã hóa này s d ng ạ ử ụ ki n trúc hai l p, dế ớ ựa trên khóa để mã hóa và gi i mã các cả ột bảng nh y cạ ảm Trong đó, khóa mã hóa chính (Master encryption key) được sử dụng để mã hóa khóa bảng (Table key) Khóa mã hóa chính được lưu trữ trong một mô-đun an toàn bên ngoài, có thể là ví (Wallet) ho c mô-ặ đun an toàn phần c ng (HSM) Ch ng hứ ẳ ạn, đố ới hệi v qu n tr ả ị Oracle sử ụ d ng Oracle Wallet ho c mô-ặ đun an toàn phần cứng để lưu trữ khóa mã hóa chính.
Hình 1 Quá trình mã hóa cột TDE
Trang 12Việc lưu trữ theo cách này sẽ ngăn việc sử dụng trái phép các khóa mật và tách biệt các chức năng chương trình thông thường khỏi các hoạt động mã hóa, giúp phân chia nhiệm vụ giữa người quản tr CSDL và quản tr an toàn, dị ị ẫn đến tăng cường khả năng bảo mật
3.2 Mã hóa không gian b ng TDE ả
Mã hóa không gian bảng TDE cho phép mã hóa toàn b vùng b ng Tộ ả ất cả các đối tượng được tạo trong không gian bảng sẽ được mã hóa tự động Điều này bao gồm (các LOB) đối tượng lớn bên trong như BLOBs và CLOBs Mã hóa không gian bảng TDE không mã hóa d ữ liệu được lưu trữ bên ngoài vùng b ng Mã hóa không gian b ng TDE rả ả ất hữu ích nếu trong trường h p mu n b o v d u nh y c m trong các bợ ố ả ệ ữ liệ ạ ả ảng Trường h p này, không ợ cần thực hiện phân tích chi tiết từng cột trong bảng để xác định các cộ ần mã hóa t c
Ngoài ra, mã hóa không gian bảng TDE t n d ng mã hóa hàng lo t và b ậ ụ ạ ộ đệm để cung cấp hi u suệ ất nâng cao Mặc dù tác động hiệu suất thự ế trên các ng d ng có thc t ứ ụ ể khác nhau, nhưng chi phí hiệu năng được ước tính trong kho ng t ả ừ 5% đến 8%
ng TDE
Hình 2 Quá trình mã h óa không gian bả
Tất cả d ữ liệu trong một vùng bảng được mã hóa sẽ được lưu trữ ở định d ng mã hóa trên ạ đĩa Dữ ệu đượ li c giải mã trong suốt cho người dùng được ủy quyền có các đặc quyền cần thiết đểđược xem hoặc sửa đổi dữ ệu Người dùng hoặc ứng dụng CSDL không cần biết li liệu d ữ ệu trong m t b ng c li ộ ả ụ ể có được mã hóa trên đĩa hay không Trong trường hợp các th t p d ệ ữ liệu trên đĩa hoặc phương tiện sao lưu bị đánh cắp, d u s không b xâm phữ liệ ẽ ị ạm.
Mã hóa không gian bảng TDE cũng sử dụng kiến trúc hai tầng (Hình 2), dựa trên khóa để mã hóa trong suốt và giải mã không gian bảng Khóa chính TDE cũng có chức năng và cách thức lưu trữ như mã hóa cột TDE
Trang 13Mã hóa không gian bảng TDE cũng cho phép phạm vi chỉ mục quét dữ liệu trong không gian bảng được mã hóa Điều này là không th v i mã hóa c t TDE ể ớ ộ
Lưu ý, dữ ệu mã hóa đượ li c bảo vệ trong các hoạt động như JOIN và SORT Điều này có nghĩa là dữ ệu đượ li c an toàn khi nó được di chuyển đến các vùng bảng tạm thời Dữ liệu trong nh t ký hoàn tác và làm lậ ại cũng được bảo v ệ
4 Các thu t toán mã hóa sau hậỗ trợ trong SQL Server
TDE trong SQL Server hỗ trợ các thu t toán mã hóa sau: ậ
Triple DES (tiêu chu n mã hóa d ẩữ liệu) 168-bit
5. Các bước bật Mã hóa d u minh b ch (TDE) ữ liệạ
• Tạo khóa chính
• Tạo hoặc lấy ch ng ch ứ ỉ được bảo v b i khóa chính ệ ở • Tạo khóa mã hóa cơ sở dữ liệu và bảo vệ nó bằng chứng chỉ • Đặt cơ sở dữ liệu để sử dụng mã hóa
Trang 14d, Liên k t ch ng ch vế ứ ỉ ới Cơ sở ữ liệ d u: CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_128
ENCRYPTION BY SERVER CERTIFICATE SecurityCertificate; GO
e, Bật mã hóa trên Cơ sở dữ liệu: ALTER DATABASE Database_Name SET ENCRYPTION ON;
GO
Trang 15BẢNG ĐÁNH GIÁ THÀNH VIÊN NHÓM 3