Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Dynamische Datenmaskierung in SQL Server für Anfänger

Der Artikel stellt die Grundlagen der dynamischen Datenmaskierung (DDM) in SQL Server zusammen mit seiner Übersicht vor, die durch ein einfaches Beispiel der Datenmaskierungsimplementierung unterstützt wird. Darüber hinaus werden die Leser mit den Vorteilen der dynamischen Datenmaskierung vertraut gemacht. Dieses Dokument hebt auch die Bedeutung der Datenmaskierung bei alltäglichen Datenbankentwicklungsaufgaben hervor, wenn einige Felder aufgrund ihrer sensiblen Natur maskiert werden müssen, um Standardpraktiken zu entsprechen.

Informationen zur Datenmaskierung

Lassen Sie uns die grundlegenden Konzepte der Datenmaskierung und die Verfügbarkeit dieser Funktion in SQL Server durchgehen.

Einfache Definition

Datenmaskierung ist eine Methode zum vollständigen oder teilweisen Ausblenden von Daten, wodurch es schwierig wird, die Daten zu erkennen oder zu verstehen, nachdem die Maskierung angewendet wurde.

Microsoft-Definition

Gemäß der Microsoft-Dokumentation begrenzt die dynamische Datenmaskierung (DDM) die Offenlegung sensibler Daten, indem sie für nicht privilegierte Benutzer maskiert wird.

Was sind sensible Daten

Unter sensiblen Daten verstehen wir alle Daten, die private, persönlich identifizierbare, Finanz- oder Sicherheitsinformationen enthalten, deren Offenlegung missbraucht oder dem Ruf einer Organisation geschädigt werden kann.

Beispiel für sensible Daten

Ein gutes Beispiel für sensible Daten ist eine Debitkartennummer, die in einer Datenbank gespeichert ist, die vor unbefugter Verwendung geschützt werden muss. Ein weiteres gutes Beispiel für sensible Daten ist die persönliche E-Mail-Adresse, die eine Person leicht identifizieren kann.

Nicht privilegierte Benutzer

Jeder Datenbankbenutzer, der die sensiblen Daten nicht sehen darf, gilt als nicht privilegierter Benutzer.

Dynamische Datenmaskierung (DDM)

Die von SQL Server unterstützte Datenmaskierungsfunktion wird als dynamische Datenmaskierung bezeichnet und in der Microsoft-Dokumentation auch als DDM bezeichnet. Mit anderen Worten bezeichnet Microsoft die Datenmaskierung als dynamische Datenmaskierung in SQL Server.

Kompatibilität

Laut Microsoft-Dokumentation wird die dynamische Datenmaskierungsfunktion von den folgenden Versionen von SQL Server unterstützt:
1. SQL Server 2016 und spätere Versionen
2. Azure SQL-Datenbank
3. Azure SQL Data Warehouse
Wenn Sie also noch nicht mit der Verwendung von Azure SQL-Datenbank(en) begonnen haben, benötigen Sie mindestens SQL Server 2016, um die dynamische Datenmaskierungsfunktion zu verwenden.

Dynamische Datenmaskierung konfigurieren

Die dynamische Datenmaskierung kann einfach mit T-SQL-Befehlen konfiguriert werden.
Die Implementierung der dynamischen Datenmaskierung erfolgt über T-SQL-Skripte, um zu verhindern, dass unbefugte Benutzer vertrauliche Daten anzeigen.

Vorteile der dynamischen Datenmaskierung

Lassen Sie uns zum Schluss einige Hauptvorteile der dynamischen Datenmaskierung durchgehen, aber vorher möchte ich die SQL-Anfänger und nicht die SQL-Profis fragen, was die Vorteile von Integritätsbeschränkungen sind?
Betrachten wir ein Beispiel für eine eindeutige Schlüsseleinschränkung, die sicherstellt, dass die Spalte, auf die sie angewendet wird, eindeutige (keine doppelten) Werte hat. Wenn ich zum Zeitpunkt der Dateneingabe in meiner Front-End-Anwendung unterschiedliche Spaltenwerte erzwingen kann, warum sollte ich mir dann die Mühe machen, sie durch eine Datenbank durchzusetzen, indem ich eine eindeutige Schlüsselbeschränkung anwende?
Die Antwort ist, die Regeln (Integritätseinschränkungen) sicherzustellen ) bleiben konsistent und werden zentral gesteuert. Ich muss das auf Datenbankebene tun, andernfalls muss ich möglicherweise den Code schreiben, um eindeutige Werte in allen aktuellen und zukünftigen Anwendungen zu erzwingen, die auf die Datenbank zugreifen.
Dasselbe gilt für die dynamische Datenmaskierung, da sie die definiert mask für eine Spalte auf Datenbankebene, sodass keine zusätzliche Maskierung (Code) durch die Anwendungen erforderlich ist, die auf die Datenbank zugreifen.

Die dynamische Datenmaskierung hat die folgenden Vorteile gegenüber herkömmlichen Ansätzen:
1. Dynamische Datenmaskierung implementiert die zentralisierte Richtlinie zum Verstecken oder Ändern sensibler Daten in einer Datenbank, die von jeder Anwendung übernommen wird, die auf die Daten zugreifen möchte.
2. Die dynamische Datenmaskierung in SQL Server kann dabei helfen, Benutzer mit Berechtigungen zum Anzeigen sensibler Daten und Benutzer zu verwalten, die nicht dazu berechtigt sind.
3. Es hat eine einfache Implementierung in Form eines T-SQL-Skripts.

Dynamische Datenmaskierung implementieren

Bevor wir die dynamische Datenmaskierung implementieren, müssen wir die Arten der dynamischen Datenmaskierung verstehen, die auf eine Spalte in einer Tabelle einer SQL- oder Azure SQL-Datenbank angewendet werden können.

Arten von Datenmasken

Es gibt vier Arten von Datenmasken, die wir auf eine Spalte anwenden können:
1. Standarddatenmaske(n)
2. Partielle Datenmaske(n)
3. Zufallsdatenmaske(n)
4. Benutzerdefinierte Datenmaske(n)
In diesem Artikel konzentrieren wir uns auf den standardmäßigen Datenmaskierungstyp.

Anwenden dynamischer Datenmasken

Dynamische Datenmasken können folgendermaßen auf eine Spalte einer Tabelle angewendet werden:
1. Beim Erstellen einer neuen Tabelle
2. Ändern einer bereits erstellten Tabelle, um Datenmaskierung auf ihre Spalte(n) anzuwenden

Beispieldatenbank einrichten

Lassen Sie uns eine Beispieldatenbank mit dem Namen SQLDevBlogV5 erstellen indem Sie das folgende T-SQL-Skript ausführen:

-- 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

Verwenden Sie die folgende Abfrage, um die Artikel anzuzeigen:

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

Geschäftsanforderung, Autorennamen zu maskieren

Angenommen, Sie erhalten eine Geschäftsanforderung, die besagt, dass Autorennamen aufgrund der Sensibilität dieser Informationen maskiert werden sollten. Die beste Möglichkeit, diese Geschäftsanforderung zu erfüllen, besteht darin, die Namensspalte mit DDM zu maskieren.

Namen der Autoren maskieren

Wir werden die Tabelle ändern, um die Datenmaskierungsfunktion wie folgt hinzuzufügen:

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

Überprüfen des Maskierungsstatus

Sie können den Status der dynamischen Datenmaskierung jederzeit überprüfen, indem Sie das folgende T-SQL-Skript verwenden, das in der Microsoft-Dokumentation angegeben ist:

-- 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;

Die Ausgabe zeigt uns, welche Spalten erfolgreich maskiert wurden:

Datenprüfung

Überprüfen Sie nun die Daten, indem Sie die obersten 5 Datensätze der Tabelle abfragen, auf die wir die Maskierung angewendet haben:

-- 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

Die Ausgabe scheint uns nicht das erwartete Ergebnis zu zeigen:

Wie Sie sehen können, zeigt die Spalte „Autor“ trotz der Tatsache, dass wir sie maskiert haben, immer noch ihre tatsächlichen Werte an. Der Grund für dieses Verhalten ist, dass das Konto, das wir zum Anwenden der dynamischen Datenmaskierung verwendet haben, erhöhte Berechtigungen hat und deshalb die maskierten Daten in ihrer ursprünglichen Form sichtbar sind, wenn wir die Tabelle mit dem aktuellen Konto abfragen.
Die Lösung ist um einen neuen Benutzer mit Select-Berechtigung zu erstellen.

Erstellen eines Benutzers mit Select-Berechtigung für die Tabelle

Lassen Sie uns nun wie folgt einen neuen Datenbankbenutzer ohne Anmeldung erstellen, der nur die Berechtigung Auswählen für die Artikeltabelle hat:

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

Anzeige der Top 5 Artikel als ArticleUser

Führen Sie als Nächstes die Select-Anweisung aus, um die Top-5-Artikel abzurufen, indem Sie den neu erstellten Benutzer ArticleUser nur mit Auswahlberechtigung verwenden:

-- 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;

Herzliche Glückwünsche! Sie haben die Spalte „Autor“ gemäß den Anforderungen erfolgreich maskiert.

Maskierte Spalte löschen

Sie können die dynamische Datenmaskierung auf die zuvor angewendete Spalte löschen, indem Sie einfach den folgenden T-SQL-Befehl ausführen:

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

Bitte bleiben Sie in Kontakt, da im nächsten Artikel eine fortgeschrittenere Verwendung der dynamischen Datenmaskierung in Vorbereitung ist.

Dinge zu tun

Da Sie jetzt Spalten einer Tabelle in einer Datenbank maskieren können, versuchen Sie bitte Folgendes, um Ihre Fähigkeiten weiter zu verbessern:
1. Bitte versuchen Sie, die Kategorie-Spalte in der Beispieldatenbank zu maskieren.
2. Bitte versuchen Sie, eine Author-Tabelle mit den Spalten AuthorId, Name und Email zu erstellen und übergeben Sie dann AuthorId als Fremdschlüssel in der Article-Tabelle und wenden Sie dann dynamische Datenmaskierung auf die Name- und Email-Spalten der Author-Tabelle an, indem Sie einen Testbenutzer erstellen
3. Bitte versuchen Sie, dynamische Datenmaskierung zu erstellen und zu löschen, um sicherzustellen, dass Sie erfolgreich dynamische Datenmaskierung in einer SQL-Tabelle hinzufügen und entfernen können