Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Tạo mặt nạ dữ liệu động trong SQL Server cho người dùng nâng cao

Bài viết này cung cấp sự hiểu biết ở mức độ cao về việc tạo mặt nạ dữ liệu động trong SQL Server cùng với các trường hợp sử dụng, các phương pháp hay nhất và ý nghĩa bảo mật cho người dùng SQL nâng cao (bao gồm cả nhà phát triển và người thử nghiệm). Ngoài ra, độc giả của bài viết này sẽ làm quen với việc áp dụng các loại mặt nạ dữ liệu động khác nhau. Bài báo cũng nhấn mạnh tầm quan trọng của việc sử dụng tính năng che giấu dữ liệu ở cấp độ nâng cao trong các nhiệm vụ kiểm tra và phát triển cơ sở dữ liệu hàng ngày.

Điều kiện tiên quyết

Trước tiên, chúng ta hãy xem xét các điều kiện tiên quyết cho bài viết này.

T-SQL quen thuộc

Bài viết này giả định rằng người đọc đã quen thuộc với các tập lệnh T-SQL và có thể thoải mái viết và chạy các truy vấn SQL để xem và thao tác cơ sở dữ liệu SQL.

Kiến thức cơ bản về Tạo mặt nạ dữ liệu động

Bài viết này cũng giả định rằng người đọc đã biết các khái niệm cơ bản về mặt nạ dữ liệu động trong SQL Server. Vui lòng tham khảo bài viết Tạo mặt nạ dữ liệu trong SQL Server cho người mới bắt đầu để làm quen với những kiến ​​thức cơ bản về Tạo mặt nạ dữ liệu động nếu bạn chưa thực hiện.

Cơ sở dữ liệu Azure SQL hoặc Khả năng tương thích của SQL Server 2016

Tính năng tạo mặt nạ dữ liệu động có sẵn trong SQL Server 2016 đến SQL Server 2019, vì vậy bạn nên có một trong các tính năng sau:
1. Cơ sở dữ liệu Azure SQL
2. SQL Server 2016 được cài đặt cục bộ hoặc từ xa.

Thiết lập cơ sở dữ liệu mẫu

Hãy nhớ tạo cơ sở dữ liệu mẫu bằng cách sử dụng tập lệnh T-SQL sau đây tương thích với SQL Server 2016 hoặc dưới dạng Cơ sở dữ liệu Azure SQL nếu bạn muốn làm theo hướng dẫn trong bài viết này:

 - Tạo cơ sở dữ liệu mẫu ITSalesV2CREATE DATABASE ITSalesV2; GOUSE [ITSalesV2] - (2) Tạo bảng MonthlySale [Ngày bán] [datetime2] (7) NULL, [Khách hàng] [varchar] (50) NULL, [Email] [varchar] (200) NULL, [Sản phẩm] [varchar] (150) NULL, [TotalPrice] [decimal] (10, 2) NULL,) - (2) Điền bảng ưu đãi hàng thángSET IDENTITY_INSERT [dbo]. [MonthlySale] ONINSERT INTO [dbo]. [MonthlySale] ([SaleId], [Ngày bán], [Khách hàng], [Email] , [Sản phẩm], [Tổng giá]) GIÁ TRỊ (1, N'2019-05-01 00:00:00 ', N'Asif', N'[email protected] ', N'Dell Laptop', CAST (300,00 AS Decimal (10, 2))) CHÈN VÀO [dbo]. [Hàng tháng] ([SaleId], [Ngày bán], [Khách hàng], [Email], [Sản phẩm], [Tổng giá]) GIÁ TRỊ (2, N'2019 -05-02 00:00:00 ', N'Mike', N'example @ sqldat.com ', N'Dell Laptop', CAST (300.00 AS Decimal (10, 2))) CHÈN VÀO [dbo]. [ Hàng tháng] ([SaleId], [Ngày bán], [Khách hàng], [Email], [Sản phẩm], [Tổng giá]) GIÁ TRỊ (3, N'2019-05-02 00 :00:00 ', N'Adil', N'example @ sqldat.com ', N'Lenovo Laptop', CAST (350.00 AS Decimal (10, 2))) CHÈN VÀO [dbo]. [MonthlySale] ([SaleId ], [Ngày bán], [Khách hàng], [Email], [Sản phẩm], [Tổng giá]) GIÁ TRỊ (4, N'2019-05-03 00:00:00 ', N'Sarah', N'example @ sqldat .com ', Máy tính xách tay N'HP', CAST (250,00 AS Decimal (10, 2))) CHÈN VÀO [dbo]. [MonthlySale] ([SaleId], [SellingDate], [Customer], [Email], [Product ], [TotalPrice]) VALUES (5, N'2019-05-05 00:00:00 ', N'Asif', N'[email protected] ', N'Dell Desktop', CAST (200,00 AS Decimal ( 10, 2))) CHÈN VÀO [dbo]. [Hàng tháng] ([Giá bán], [Ngày bán], [Khách hàng], [Email], [Sản phẩm], [Tổng giá]) GIÁ TRỊ (6, N'2019-05- 10 00:00:00 ', N'Sam', N'example @ sqldat.com ', N'HP Desktop', CAST (300.00 AS Decimal (10, 2))) CHÈN VÀO [dbo]. [MonthlySale] ( [SaleId], [Ngày bán], [Khách hàng], [Email], [Sản phẩm], [Tổng giá]) GIÁ TRỊ (7, N'2019-05-12 00:00:00 ', N'Mike ", N'example @ sqldat.com ', N'iPad', CAST (250,00 AS Decimal (10, 2))) CHÈN VÀO [dbo]. [MonthlySale] ([SaleId], [sellDate] , [Khách hàng], [Email], [Sản phẩm], [Tổng giá]) GIÁ TRỊ (8, N'2019-05-13 00:00:00 ', N'Mike', N'example @ sqldat.com ', N 'iPad', CAST (250,00 AS Decimal (10, 2))) CHÈN VÀO [dbo]. [MonthlySale] ([SaleId], [sellDate], [Customer], [Email], [Product], [TotalPrice]) GIÁ TRỊ (9, N'2019-05-20 00:00:00 ', N'Peter', N'example @ sqldat.com ', N'Dell Laptop', CAST (350,00 AS Decimal (10, 2))) CHÈN VÀO [dbo]. [Hàng tháng] ([Giá bán], [Ngày bán], [Khách hàng], [Email], [Sản phẩm], [Tổng giá]) GIÁ TRỊ (10, N'2019-05-25 00:00:00 ', N'Peter', N'example @ sqldat.com ', N'Asus Laptop', CAST (400.00 AS Decimal (10, 2))) SET IDENTITY_INSERT [dbo]. [MonthlySale] OFF 

Kiểm tra dữ liệu

Kiểm tra cơ sở dữ liệu mẫu ITSalesV2 mới được tạo và điền bằng cách chạy tập lệnh sau:

 - Xem dữ liệu bán hàng hàng thángSELECT s.SaleId, s.SellingDate, s.Customer, s.Email, s.Product, s.TotalPriceFROM dbo.MonthlySale s 

Kết quả như sau:

Tạo người dùng không có đặc quyền

Vui lòng tạo một người dùng không có đặc quyền mà không cần đăng nhập, chỉ có quyền CHỌN trên bảng MonthlySale, người sẽ xem dữ liệu được che như một điều kiện tiên quyết cho bài viết này. Sử dụng tập lệnh sau để làm điều đó:

 - Tạo DataUser để có quyền truy cập Chọn vào bảng MonthlySaleCREATE USER DataUser KHÔNG ĐĂNG NHẬP; CẤP LỰA CHỌN BÁN HÀNG hàng tháng cho Người dùng dữ liệu; 

Tạo một quy trình để kiểm tra trạng thái mặt nạ

Bài viết này cũng giả định rằng có một thủ tục được lưu trữ trong cơ sở dữ liệu mẫu cho chúng ta thấy trạng thái che dữ liệu động của các cột trong bảng cơ sở dữ liệu:

 - Quy trình được lưu trữ để kiểm tra trạng thái che dữ liệu động [object_id] =tbl. [object_id] WHERE is_masked =1; HẾT 

Các loại mặt nạ dữ liệu động

Có bốn loại mặt nạ dữ liệu động phổ biến trong SQL Server:
1. (Các) Mặt nạ dữ liệu mặc định
2. (Các) Mặt nạ dữ liệu từng phần
3. (Các) Mặt nạ Dữ liệu Ngẫu nhiên
4. (Các) Mặt nạ dữ liệu chuỗi tùy chỉnh
Bây giờ chúng tôi sẽ triển khai tất cả bốn loại mặt nạ dữ liệu động phổ biến.

Triển khai mặt nạ dữ liệu mặc định

Tính năng tạo mặt nạ dữ liệu mặc định sẽ ẩn hoàn toàn một cột khỏi người dùng trái phép bằng cách che tất cả các giá trị cột bằng một ký tự đặc biệt, khiến việc đoán nội dung cột trở nên rất khó khăn.

Yêu cầu kinh doanh

Bây giờ, giả sử bạn nhận được một yêu cầu kinh doanh quy định rằng địa chỉ e-mail của khách hàng phải được ẩn hoàn toàn (bị che) do tính nhạy cảm của thông tin này.
Cách tốt nhất để đáp ứng yêu cầu kinh doanh này là che cột Email sử dụng Mặt nạ dữ liệu động (DDM).

Địa chỉ e-mail Mặt nạ dữ liệu mặc định

Chúng ta sẽ thay đổi bảng để che các địa chỉ e-mail như sau:

 - Mặc định tạo mặt nạ dữ liệu động của cột Email ALTER TABLE MonthlySaleALTER COLUMN Email varchar (200) MASKED WITH (FUNCTION ='default ()'); 

Kiểm tra trạng thái mặt nạ

Kiểm tra trạng thái Mặt nạ dữ liệu động bằng cách sử dụng quy trình được lưu trữ sau dựa trên tập lệnh T-SQL được tham chiếu trong tài liệu của Microsoft:

 - Kiểm tra trạng thái che dữ liệu độngEXEC ShowMaskingStatus 

Kết quả hiển thị cho chúng ta biết những cột nào đã được che thành công:

Xem Cột Email với tư cách Người dùng Dữ liệu

Tiếp theo, thực hiện câu lệnh Chọn để xem doanh số hàng tháng (bảng) với tư cách là người dùng có đặc quyền thấp được gọi là Người dùng dữ liệu chỉ có quyền chọn trên bảng như sau:

 - Thực thi SELECT với tư cách là DataUserEXECUTE AS USER ='DataUser'; - Xem doanh số hàng tháng CHỌN s.SaleId, s.SellingDate, s.Customer, s.Email, s.Product, s.Sản phẩm từ dbo.MonthlySale s - Hoàn nguyên Người dùng về người dùng trước đóREVERT; 

Kết quả như sau:

Triển khai tạo mặt nạ dữ liệu một phần

Việc che một phần dữ liệu như tên của nó sẽ ẩn một phần cột không cho người dùng trái phép xem nó bằng cách che một số giá trị của cột bằng các ký tự đặc biệt làm cho nội dung cột dễ đọc nhưng vẫn khó đoán.

Yêu cầu kinh doanh

Bây giờ hãy nghĩ đến một yêu cầu kinh doanh trong đó bạn được yêu cầu ẩn một phần tên của khách hàng theo cách mà chỉ có ký tự đầu tiên của tên vẫn hiển thị. Cách tốt nhất để đáp ứng yêu cầu kinh doanh này là che cột Khách hàng bằng cách sử dụng che một phần dữ liệu động.

Mặt nạ dữ liệu một phần của tên khách hàng

Chúng tôi sẽ thay đổi bảng để che một phần cột Khách hàng như sau:

>

Kiểm tra trạng thái mặt nạ

Kiểm tra trạng thái che dữ liệu động:

 - Kiểm tra trạng thái che dữ liệu độngEXEC ShowMaskingStatus 

Kết quả hiển thị cho chúng ta biết những cột nào đã được che thành công:

Xem Cột Khách hàng với tư cách Người dùng Dữ liệu

Xem bảng với tư cách là người dùng thử nghiệm Người dùng dữ liệu phải xem dữ liệu được che:

 - Thực thi SELECT với tư cách là DataUserEXECUTE AS USER ='DataUser'; - Xem doanh số hàng tháng dưới dạng DataUserSELECT s.SaleId, s.SellingDate, s.Customer, s.Email, s.Product, s.Sản phẩm từ dbo.MonthlySale s - Hoàn nguyên Người dùng về người dùng trước đâyREVERT;  

Kết quả như sau:

Triển khai mặt nạ dữ liệu ngẫu nhiên

Việc tạo mặt nạ dữ liệu ngẫu nhiên sẽ ẩn một cột ngẫu nhiên khỏi người dùng trái phép bằng cách che một cột dựa trên một dải giá trị khiến rất khó đoán nội dung cột. Hãy nhớ rằng kiểu tạo mặt nạ dữ liệu ngẫu nhiên chỉ áp dụng cho các cột chỉ lưu trữ số và nó có thể được chỉ định bằng cách cung cấp một phạm vi cho ngẫu nhiên hóa.

Yêu cầu kinh doanh

Bạn nhận được yêu cầu kinh doanh nêu rõ rằng giá sản phẩm phải được che bằng một dải số ngẫu nhiên để người dùng có đặc quyền thấp không được biết giá chính xác của sản phẩm vì lý do bảo mật. Cách tốt nhất để đáp ứng đặc điểm kinh doanh này là che cột TotalPrice bằng cách sử dụng tạo mặt nạ dữ liệu động ngẫu nhiên.

Tạo mặt nạ dữ liệu ngẫu nhiên của cột tổng giá

Thay đổi bảng MonthlySale để che giấu TotalPrice một cách ngẫu nhiên như sau:

 - Tạo mặt nạ dữ liệu động của cột TotalPrice ALTER TABLE MonthlySaleALTER COLUMN [TotalPrice] decimal (10,2) MASKED WITH (FUNCTION ='random (1, 12)') 

Kiểm tra trạng thái mặt nạ

Vui lòng kiểm tra trạng thái che dữ liệu động bằng cách chạy quy trình được lưu trữ sau:

 - Kiểm tra trạng thái che dữ liệu độngEXEC ShowMaskingStatus 

Kết quả cho chúng ta thấy những cột nào đã được che thành công:

Xem cột TotalPrice với tư cách là Người dùng dữ liệu

Xem bảng với tư cách Người dùng dữ liệu ngay bây giờ:

 - Thực thi SELECT với tư cách là DataUserEXECUTE AS USER ='DataUser'; - Xem doanh số hàng tháng CHỌN s.SaleId, s.SellingDate, s.Customer, s.Email, s.Product, s.TotalPrice từ dbo.MonthlySale s - Hoàn nguyên Người dùng về người dùng trước đóREVERT; 

Kết quả như sau:

Hãy nhớ rằng kết quả đầu ra có thể khác nhau đối với cột Mặt nạ dữ liệu ngẫu nhiên do việc tạo số ngẫu nhiên.

Triển khai tạo mặt nạ dữ liệu chuỗi tùy chỉnh

Tạo mặt nạ dữ liệu chuỗi tùy chỉnh như tên gọi của nó sẽ thêm ký tự tùy chỉnh để ẩn một cột bằng cách làm cho nó rất khó đoán nội dung của nó. Hãy nhớ rằng Tạo mặt nạ dữ liệu chuỗi tùy chỉnh được sử dụng cùng với Tạo mặt nạ dữ liệu từng phần bằng cách tùy chỉnh ký tự để che các giá trị cột thực tế. Nói cách khác, Tạo mặt nạ dữ liệu chuỗi tùy chỉnh là một dạng nâng cao của Tạo mặt nạ dữ liệu từng phần.

Yêu cầu kinh doanh

Hãy xem xét yêu cầu kinh doanh để chỉ hiển thị ký tự đầu tiên và ký tự cuối cùng của cột Sản phẩm trong khi các ký tự còn lại phải được ẩn hoặc che bằng dấu gạch ngang (-). Cách tốt nhất để đáp ứng đặc điểm kinh doanh này là che cột Sản phẩm bằng cách sử dụng Tạo mặt nạ dữ liệu động một phần với chuỗi tùy chỉnh bắt buộc.

Che giấu dữ liệu chuỗi khách hàng của dữ liệu bán hàng

Thay đổi bảng MonthlySale để che cột Sản phẩm như sau:

 - Mặt nạ dữ liệu động chuỗi tùy chỉnh của cột Sản phẩm ALTER TABLE MonthlySaleALTER COLUMN [Sản phẩm] THÊM MẶT NẠ VỚI (FUNCTION ='part (1, "---", 1)') 

Kiểm tra trạng thái mặt nạ

Bạn nên kiểm tra trạng thái Mặt nạ dữ liệu động tại thời điểm này bằng cách sử dụng tập lệnh sau:

 - Kiểm tra trạng thái che dữ liệu độngEXEC ShowMaskingStatus 

Kết quả hiển thị tất cả các cột đã áp dụng thành công Mặt nạ dữ liệu động như được hiển thị bên dưới:

Xem Cột Sản phẩm với tư cách Người dùng Dữ liệu

Xem bảng với tư cách Người dùng dữ liệu ngay bây giờ:

 - Thực thi SELECT với tư cách là DataUserEXECUTE AS USER ='DataUser'; - Xem doanh số hàng tháng CHỌN s.SaleId, s.SellingDate, s.Customer, s.Email, s.Product, s.TotalPrice từ dbo.MonthlySale s - Hoàn nguyên Người dùng về người dùng trước đóREVERT; 

Kết quả như sau:

Xin chúc mừng! Bạn đã thực hiện thành công tất cả bốn kỹ thuật tạo mặt nạ.
Vui lòng tham khảo bài viết Tạo mặt nạ dữ liệu trong SQL Server cho người mới bắt đầu để loại bỏ các kiểu tạo mặt nạ dữ liệu được áp dụng.

Các phương pháp hay nhất

Hãy ghi nhớ những điều sau:
1. Mặt nạ dữ liệu động không bảo vệ hoặc mã hóa dữ liệu cột vì vậy không nên sử dụng nó cho mục đích đó.
2. Người dùng tiềm năng được cho là xem dữ liệu bị che phải có quyền truy cập rất hạn chế để xem dữ liệu và hoàn toàn không được cấp quyền Cập nhật để khai thác dữ liệu.
3. Người dùng tiềm năng ngay cả khi chỉ có quyền CHỌN cũng có thể chạy các truy vấn đầy đủ để đoán giá trị chính xác, vì vậy hãy lưu ý điều đó.
4. Bạn cũng có thể sử dụng ALTER COLUMN Email ADD MASKED WITH (FUNCTION =’email ()’) để che các cột e-mail thay vì sử dụng Tạo mặt nạ động mặc định.
5. Bạn có thể sử dụng tính năng tạo mặt nạ dữ liệu chuỗi tùy chỉnh để ẩn số thẻ ghi nợ trong báo cáo giao dịch bằng cách chỉ hiển thị hai hoặc bốn chữ số cuối cùng như bạn có thể thấy trong biên lai mua sắm.

Việc cần làm

Bây giờ bạn có thể thực hiện tất cả bốn loại mặt nạ, vui lòng thử những điều sau để cải thiện kỹ năng của bạn hơn nữa:
1. Vui lòng tạo cơ sở dữ liệu mẫu bằng cách thực hiện theo hướng dẫn trong bài viết Phát triển báo cáo SSRS theo thuật ngữ đơn giản, tiếp theo là phát triển báo cáo SSRS chỉ hiển thị ký tự đầu tiên của tên Tác giả bằng cách ẩn phần còn lại bằng cách sử dụng che một phần dữ liệu.
2. Vui lòng cố gắng tạo cơ sở dữ liệu mẫu được tham chiếu trong bài viết Tạo và triển khai nhiều phiên bản cơ sở dữ liệu thông qua ảnh chụp nhanh giản đồ rồi tạo người dùng thử nghiệm có tên là Sinh viên và áp dụng tính năng che dữ liệu động phù hợp để ẩn điểm của tất cả sinh viên cho người dùng thử nghiệm này.
3. Vui lòng cố gắng tạo và bỏ tính năng tạo mặt nạ dữ liệu động để đảm bảo rằng bạn có thể thêm và xóa thành công tính năng tạo mặt nạ dữ liệu động trên bảng SQL.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Không thể chèn giá trị rõ ràng cho cột nhận dạng trong bảng 'bảng' khi IDENTITY_INSERT được đặt thành TẮT

  2. Nhà cung cấp có tên là nhà cung cấp đường ống lỗi 40 không thể mở kết nối đến SQL Server lỗi 2

  3. Làm cách nào để kết nối với MS SQL Server bằng cách sử dụng Inno Setup?

  4. Cách lọc Hàng có Giá trị Null trong Câu lệnh Chọn trong SQL Server - Hướng dẫn sử dụng SQL Server / TSQL Phần 110

  5. Mục đích sử dụng OPTION (MAXDOP 1) trong SQL Server là gì?