Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Динамично маскиране на данни в SQL Server за начинаещи

Статията представя основите на динамичното маскиране на данни (DDM) в SQL Server, заедно с неговия преглед, подкрепен от прост пример за изпълнение на маскиране на данни. Освен това читателите ще се запознаят с предимствата на динамичното маскиране на данни. Този документ също така подчертава значението на маскирането на данни в ежедневните задачи за разработване на бази данни, когато някои полета трябва да бъдат маскирани поради чувствителния им характер, за да се съобразят със стандартните практики.

Относно маскирането на данни

Нека да преминем през основните концепции за маскиране на данни и наличието на тази функция в SQL Server.

Проста дефиниция

Маскирането на данни е метод за пълно или частично скриване на данни, което затруднява разпознаването или разбирането на данните след прилагане на маскирането.

Определение на Microsoft

Според документацията на Microsoft, динамичното маскиране на данни (DDM) ограничава излагането на чувствителни данни, като ги маскира за непривилегировани потребители.

Какво са чувствителни данни

Под чувствителни данни имаме предвид всички данни, които съдържат лична, лична, финансова или информация за сигурност, която, ако бъде разкрита, може да бъде използвана неправилно или да навреди на репутацията на организация.

Пример за чувствителни данни

Добър пример за чувствителни данни е номер на дебитна карта, съхраняван в база данни, която трябва да бъде защитена от всякакво неоторизирано използване. Друг добър пример за чувствителни данни е личният имейл адрес, който може лесно да идентифицира човек.

Непривилегировани потребители

Всеки потребител на база данни, на когото не е разрешено да вижда чувствителните данни, се счита за непривилегирован потребител.

Динамично маскиране на данни (DDM)

Функцията за маскиране на данни, поддържана от SQL Server, е известна като динамично маскиране на данни, посочена също като DDM в документацията на Microsoft. С други думи, Microsoft нарича маскирането на данни като динамично маскиране на данни в SQL Server.

Съвместимост

Според документацията на Microsoft, функцията за динамично маскиране на данни се поддържа от следните версии на SQL Server:
1. SQL Server 2016 и по-нови версии
2. Azure SQL база данни
3. Azure SQL Data Warehouse
Така че, ако все още не сте започнали да използвате Azure SQL база данни(и), тогава имате нужда от минимум SQL Server 2016, за да използвате функцията за динамично маскиране на данни.

Конфигуриране на динамично маскиране на данни

Динамичното маскиране на данни може да бъде конфигурирано чрез просто използване на T-SQL команди.
Внедряването на динамично маскиране на данни се извършва чрез T-SQL скриптове, за да се предотврати преглеждането на чувствителни данни от неоторизирани потребители.

Предимства на динамичното маскиране на данни

И накрая, нека разгледаме някои ключови предимства на динамичното маскиране на данни, но преди това бих искал да попитам начинаещите SQL, а не специалистите по SQL, какви са предимствата на ограниченията за целостта?
Нека разгледаме пример за уникален ключово ограничение, което гарантира, че колоната, върху която се прилага, има различни (без дублиращи се) стойности. Ако мога да наложа различни стойности на колони в момента на въвеждане на данни в моето предно приложение, защо трябва да си правя труда да го налагам чрез база данни, като прилагам ограничение на уникален ключ?
Отговорът е да гарантирам правилата (ограничения за целостта ) остават последователни и се контролират централно. Трябва да направя това на ниво база данни, в противен случай може да се наложи да напиша кода, за да наложа уникални стойности във всички настоящи и всички предстоящи приложения, които имат достъп до базата данни.
Същото важи и за динамичното маскиране на данни, тъй като то дефинира маскирайте колона на ниво база данни, така че няма нужда да извършвате допълнително маскиране (код) от приложенията, които осъществяват достъп до базата данни.

Динамичното маскиране на данни има следните предимства пред традиционните подходи:
1. Динамичното маскиране на данни изпълнява централизираната политика на скриване или промяна на чувствителните данни в база данни, която се наследява от всяко приложение, което желае да получи достъп до данните.
2. Динамичното маскиране на данни в SQL Server може да помогне за управлението на потребители с привилегии да виждат чувствителните данни и тези потребители, които не са упълномощени да ги виждат.
3. Има проста реализация под формата на T-SQL скрипт.

Внедряване на динамично маскиране на данни

Преди да приложим динамично маскиране на данни, трябва да разберем типовете динамично маскиране на данни, които могат да бъдат приложени към колона в таблица на SQL или Azure SQL база данни.

Типове маски за данни

Има четири типа маски на данни, които можем да приложим към колона:
1. Маска(и) за данни по подразбиране
2. Частична маска(и) на данни
3. Маска(и) на произволни данни
4. Персонализирана(и) маска(и) на данни
В тази статия ще се съсредоточим върху типа маскиране на данни по подразбиране.

Прилагане на маски на динамични данни

Динамичните маски на данни могат да бъдат приложени към колона от таблица по следните начини:
1. При създаване на нова таблица
2. Промяна на вече създадена таблица, за да се приложи маскиране на данни към нейната(ите) колона(и)

Настройте примерна база данни

Нека създадем примерна база данни с име SQLDevBlogV5 като изпълните следния T-SQL скрипт:

-- Create sample database (SQLDevBlogV5)
CREATE DATABASE SQLDevBlogV5;
GO


USE SQLDevBlogV5;

-- (1) Create Article table in the sample database
CREATE TABLE Article (
  ArticleId INT PRIMARY KEY IDENTITY (1, 1)
 ,Category	VARCHAR(50)
 ,Author VARCHAR(50)
 ,Title VARCHAR(150)
 ,Published DATETIME2
 ,Notes VARCHAR(400)  
)

GO

-- (2) Populating Article table
SET IDENTITY_INSERT [dbo].[Article] ON
INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (1, N'Development', N'Atif', N'Introduction to T-SQL Programming ', N'2017-01-01 00:00:00', NULL)
INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (2, N'Testing', N'Peter', N'Database Unit Testing Fundamentals', N'2017-01-10 00:00:00', NULL)
INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (3, N'DLM', N'Sadaf', N'Database Lifecycle Management for beginners', N'2017-01-20 00:00:00', NULL)
INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (4, N'Development', N'Peter', N'Common Table Expressions (CTE)', N'2017-02-10 00:00:00', NULL)
INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (5, N'Testing', N'Sadaf', N'Manual Testing vs. Automated Testing', N'2017-03-20 00:00:00', NULL)
INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (6, N'Testing', N'Atif', N'Beyond Database Unit Testing', N'2017-11-10 00:00:00', NULL)
INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (7, N'Testing', N'Sadaf', N'Cross Database Unit Testing', N'2017-12-20 00:00:00', NULL)
INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (8, N'Development', N'Peter', N'SQLCMD - A Handy Utitliy for Developers', N'2018-01-10 00:00:00', NULL)
INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (9, N'Testing', N'Sadaf', N'Scripting and Testing Database for beginners ', N'2018-02-15 00:00:00', NULL)
INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (10, N'Development', N'Atif', N'Advanced Database Development Methods', N'2018-07-10 00:00:00', NULL)
INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (11, N'Testing', N'Sadaf', N'How to Write Unit Tests for your Database', N'2018-11-10 00:00:00', NULL)
INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (12, N'Development', N'Peter', N'Database Development using Modern Tools', N'2018-12-10 00:00:00', NULL)
INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (13, N'DLM', N'Atif', N'Designing, Developing and Deploying Database ', N'2019-01-01 00:00:00', NULL)
INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (14, N'DLM', N'Peter', N'How to Apply Database Lifecycle Management  ', N'2019-02-10 00:00:00', NULL)
SET IDENTITY_INSERT [dbo].[Article] OFF

Използвайте следната заявка, за да видите статиите:

-- View articles 
SELECT
  [a].[ArticleId]
 ,[a].[Category]
 ,[a].[Author]
 ,[a].[Title]
 ,[a].[Published]
 ,[a].[Notes]
FROM dbo.Article A

Бизнес изискване за маскиране на имената на авторите

Сега да предположим, че получавате бизнес изискване, което гласи, че имената на автори трябва да бъдат маскирани поради чувствителността на тази информация. Най-добрият начин да изпълните това бизнес изискване е да маскирате колоната Име с помощта на DDM.

Маскиране на имена на автори

Ще променим таблицата, за да добавим функция за маскиране на данни, както следва:

-- Masking Author column
ALTER TABLE Article
ALTER COLUMN [Author] varchar(50) MASKED WITH (FUNCTION = 'default()');

Проверка на състоянието на маскиране

Можете да проверите състоянието на динамично маскиране на данни по всяко време, като използвате следния T-SQL скрипт, даден в документацията на Microsoft:

-- Checking dynamic data masking status
SELECT c.name, tbl.name as table_name, c.is_masked, c.masking_function  
FROM sys.masked_columns AS c  
JOIN sys.tables AS tbl   
    ON c.[object_id] = tbl.[object_id]  
WHERE is_masked = 1;

Резултатът ни показва кои колони са маскирани успешно:

Проверка на данните

Сега проверете данните, като потърсите първите 5 записа на таблицата, където сме приложили маскирането:

-- View top 5 artices records
SELECT TOP 5
  [a].[ArticleId]
 ,[a].[Category]
 ,[a].[Author]
 ,[a].[Title]
 ,[a].[Published]
 ,[a].[Notes]
FROM dbo.Article A
ORDER BY a.ArticleId

Резултатът изглежда не ни показва очаквания резултат:

Както можете да видите, въпреки факта, че сме маскирали колоната Author, тя все още показва действителните си стойности. Причината за това поведение е, че акаунтът, който сме използвали за прилагане на динамично маскиране на данни, има повишени привилегии и затова маскираните данни се виждат в оригиналния си вид, когато правим заявка към таблицата, използвайки текущия акаунт.
Решението е за да създадете нов потребител с разрешение за избор.

Създаване на потребител с разрешение за избор на таблицата

Нека сега създадем нов потребител на база данни без вход, който има само разрешение за избор в таблицата с статии, както следва:

-- Create ArticleUser to have Select access to Article table
CREATE USER ArticleUser WITHOUT LOGIN;  
GRANT SELECT ON Article TO ArticleUser;

Преглед на топ 5 статии като потребител на статия

След това изпълнете оператор Select, за да получите топ 5 статии, като използвате новосъздадения потребител ArticleUser само с разрешение за избор:

-- Execute SELECT Article as ArtilceUser
EXECUTE AS USER = 'ArticleUser';  

-- View artices 
SELECT TOP 5
  [a].[ArticleId]
 ,[a].[Category]
 ,[a].[Author]
 ,[a].[Title]
 ,[a].[Published]
 FROM dbo.Article A
ORDER BY a.ArticleId

-- Revert the User back to what user it was before
REVERT;

Честито! Успешно маскирахте колоната Автор според изискването.

Изпускане на маскирана колона

Можете да пуснете маскирането на динамични данни върху колоната, която сте го приложили преди, като просто издадете следната T-SQL команда:

-- Removing dynamic data masking on Author column
ALTER TABLE Article   
ALTER COLUMN Author DROP MASKED;

Моля, поддържайте връзка, тъй като по-разширено използване на динамично маскиране на данни е на път в следващата статия.

Неща за правене

Сега, когато можете да маскирате колони на таблица в база данни, опитайте следните неща, за да подобрите допълнително уменията си:
1. Моля, опитайте да маскирате колоната Категория в примерната база данни.
2. Моля, опитайте да създадете таблица на Author с колони AuthorId, Name и Email и след това предайте AuthorId като външен ключ в таблицата с членове и след това приложете динамично маскиране на данни към колоните Name и Email на таблицата Author, като създадете тестов потребител
3. Моля, опитайте да създадете и премахнете динамично маскиране на данни, за да сте сигурни, че можете успешно да добавяте и премахвате динамично маскиране на данни в 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. Преобразуването не бе успешно при преобразуване на стойността на varchar 'simple' в тип данни int

  2. Съвети за използване на SQL Server с Salesforce SOQL

  3. Избройте заявките, изпълнявани на SQL Server

  4. Направете лесна производителност на SQL Server

  5. Как да промените пощенския профил на база данни по подразбиране за потребител в SQL Server (T-SQL)