sql >> Database >  >> RDS >> Sqlserver

Dynamische gegevensmaskering in SQL Server voor beginners

Het artikel introduceert de basisprincipes van dynamische gegevensmaskering (DDM) in SQL Server, samen met het overzicht dat wordt ondersteund door een eenvoudig voorbeeld van de implementatie van gegevensmaskering. Bovendien zullen de lezers vertrouwd raken met de voordelen van dynamische gegevensmaskering. Dit document benadrukt ook het belang van gegevensmaskering bij dagelijkse databaseontwikkelingstaken, waarbij sommige velden vanwege hun gevoelige aard moeten worden gemaskeerd om te voldoen aan standaardpraktijken.

Over gegevensmaskering

Laten we de basisconcepten van gegevensmaskering en de beschikbaarheid van deze functie in SQL Server doornemen.

Eenvoudige definitie

Gegevensmaskering is een methode om gegevens geheel of gedeeltelijk te verbergen, waardoor het moeilijk wordt om de gegevens te herkennen of te begrijpen nadat de maskering is toegepast.

Microsoft-definitie

Volgens Microsoft-documentatie beperkt dynamische gegevensmaskering (DDM) de blootstelling aan gevoelige gegevens door deze te maskeren voor niet-bevoorrechte gebruikers.

Wat zijn gevoelige gegevens

Met gevoelige gegevens bedoelen we alle gegevens die persoonlijke, persoonlijk identificeerbare, financiële of beveiligingsinformatie bevatten die, indien onthuld, kan worden misbruikt of de reputatie van een organisatie kan schaden.

Voorbeeld van gevoelige gegevens

Een goed voorbeeld van gevoelige gegevens is een debetkaartnummer dat is opgeslagen in een database die moet worden beschermd tegen ongeoorloofd gebruik. Een ander goed voorbeeld van gevoelige gegevens is het persoonlijke e-mailadres waarmee een persoon gemakkelijk kan worden geïdentificeerd.

Niet-bevoegde gebruikers

Elke databasegebruiker die de gevoelige gegevens niet mag zien, wordt beschouwd als een niet-bevoorrechte gebruiker.

Dynamische gegevensmaskering (DDM)

De functie voor gegevensmaskering die wordt ondersteund door SQL Server staat bekend als dynamische gegevensmaskering, ook wel DDM genoemd in Microsoft-documentatie. Met andere woorden, Microsoft verwijst naar gegevensmaskering als dynamische gegevensmaskering in SQL Server.

Compatibiliteit

Volgens Microsoft-documentatie wordt de functie voor dynamische gegevensmaskering ondersteund door de volgende versies van SQL Server:
1. SQL Server 2016 en latere versies
2. Azure SQL-database
3. Azure SQL Data Warehouse
Dus als u nog niet bent begonnen met het gebruik van Azure SQL-database(s), dan heeft u minimaal SQL Server 2016 nodig om de functie voor dynamische gegevensmaskering te gebruiken.

Dynamische gegevensmaskering configureren

Dynamische gegevensmaskering kan worden geconfigureerd door eenvoudigweg T-SQL-opdrachten te gebruiken.
De implementatie van dynamische gegevensmaskering gebeurt via T-SQL-scripting om te voorkomen dat onbevoegde gebruikers gevoelige gegevens bekijken.

Voordelen van dynamische gegevensmaskering

Laten we tot slot enkele belangrijke voordelen van dynamische gegevensmaskering doornemen, maar eerst zou ik de SQL-beginners willen vragen, niet de SQL-professionals, wat zijn de voordelen van integriteitsbeperkingen?
Laten we eens kijken naar een voorbeeld van een unieke sleutelbeperking die ervoor zorgt dat de kolom waarop deze wordt toegepast verschillende (geen dubbele) waarden heeft. Als ik verschillende kolomwaarden kan afdwingen op het moment van gegevensinvoer in mijn front-endtoepassing, waarom zou ik dan de moeite nemen om dit af te dwingen via een database door een unieke sleutelbeperking toe te passen?
Het antwoord is om de regels te waarborgen (integriteitsbeperkingen ) consistent blijven en centraal worden aangestuurd. Ik moet dat op databaseniveau doen, anders moet ik misschien de code schrijven om unieke waarden af ​​te dwingen in alle huidige en toekomstige toepassingen die toegang hebben tot de database.
Hetzelfde geldt voor dynamische gegevensmaskering, aangezien het de maskeer op een kolom op databaseniveau, dus het is niet nodig om aanvullende maskering (code) uit te voeren door de toepassingen die toegang hebben tot de database.

Dynamische gegevensmaskering heeft de volgende voordelen ten opzichte van traditionele benaderingen:
1. Dynamische gegevensmaskering implementeert het gecentraliseerde beleid van het verbergen of wijzigen van de gevoelige gegevens in een database die wordt overgenomen door elke toepassing die toegang wil tot de gegevens.
2. Dynamische gegevensmaskering in SQL Server kan helpen bij het beheren van gebruikers met privileges om de gevoelige gegevens te zien en die gebruikers die niet bevoegd zijn om deze te zien.
3. Het heeft een eenvoudige implementatie in de vorm van een T-SQL-script.

Dynamische gegevensmaskering implementeren

Voordat we dynamische gegevensmaskering implementeren, moeten we de soorten dynamische gegevensmaskering begrijpen die kunnen worden toegepast op een kolom in een tabel van een SQL- of Azure SQL-database.

Soorten gegevensmaskers

Er zijn vier soorten gegevensmaskers die we op een kolom kunnen toepassen:
1. Standaard gegevensmasker(s)
2. Gedeeltelijke gegevensmasker(s)
3. Willekeurige gegevensmasker(s)
4. Aangepaste gegevensmasker(s)
In dit artikel gaan we ons concentreren op het standaardtype gegevensmaskering.

Dynamische gegevensmaskers toepassen

Dynamische gegevensmaskers kunnen op de volgende manieren op een kolom van een tabel worden toegepast:
1. Bij het maken van een nieuwe tabel
2. Een reeds gemaakte tabel wijzigen om gegevensmaskering toe te passen op de kolom(men)

Voorbeelddatabase instellen

Laten we een voorbeelddatabase maken met de naam SQLDevBlogV5 door het volgende T-SQL-script uit te voeren:

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

Gebruik de volgende zoekopdracht om de artikelen te bekijken:

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

Zakelijke vereiste om namen van auteurs te maskeren

Stel nu dat u een zakelijke eis ontvangt waarin staat dat auteursnamen moeten worden gemaskeerd vanwege de gevoeligheid van deze informatie. De beste manier om aan deze zakelijke vereiste te voldoen, is door de kolom Naam te maskeren met DDM.

Namen van auteurs maskeren

We gaan de tabel wijzigen om de functie voor het maskeren van gegevens als volgt toe te voegen:

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

Makerstatus controleren

U kunt de status van dynamische gegevensmaskering op elk moment controleren met behulp van het volgende T-SQL-script dat in de Microsoft-documentatie wordt gegeven:

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

De uitvoer laat ons zien welke kolommen met succes zijn gemaskeerd:

Gegevenscontrole

Controleer nu de gegevens door de top 5 records op te vragen van de tabel waarin we de maskering hebben toegepast:

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

De uitvoer lijkt ons niet het verwachte resultaat te tonen:

Zoals u kunt zien, ondanks het feit dat we de kolom Auteur hebben gemaskeerd, worden nog steeds de werkelijke waarden weergegeven. De reden achter dit gedrag is dat het account dat we hebben gebruikt om dynamische gegevensmaskering toe te passen, verhoogde bevoegdheden heeft en dat daarom de gemaskeerde gegevens in hun oorspronkelijke vorm zichtbaar zijn wanneer we de tabel opvragen met het huidige account.
De oplossing is om een ​​nieuwe gebruiker met de machtiging Selecteren aan te maken.

Een gebruiker maken met de machtiging Selecteren op de tafel

Laten we nu een nieuwe databasegebruiker maken zonder een login met alleen Select-toestemming in de Artikeltabel als volgt:

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

Top 5 artikelen bekijken als artikelgebruiker

Voer vervolgens de Select-instructie uit om top 5 artikelen te krijgen met behulp van de nieuw aangemaakte gebruiker ArticleUser met alleen select-toestemming:

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

Gefeliciteerd! U hebt de kolom Auteur met succes gemaskeerd volgens de vereisten.

Gemaskerde kolom laten vallen

U kunt de dynamische gegevensmaskering laten vallen op de kolom die u eerder hebt toegepast door simpelweg de volgende T-SQL-opdracht uit te voeren:

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

Blijf in contact, aangezien er in het volgende artikel een meer geavanceerd gebruik van dynamische gegevensmaskering op komst is.

Dingen om te doen

Nu u kolommen van een tabel in een database kunt maskeren, kunt u het volgende proberen om uw vaardigheden verder te verbeteren:
1. Probeer de Categorie-kolom in de voorbeelddatabase te maskeren.
2. Probeer een Author-tabel te maken met de AuthorId-, Name- en Email-kolommen en geef vervolgens AuthorId door als een externe sleutel in de Article-tabel en pas vervolgens dynamische gegevensmaskering toe op de Name- en Email-kolommen van de Author-tabel door een testgebruiker aan te maken
3. Probeer dynamische gegevensmaskering te maken en te verwijderen om ervoor te zorgen dat u dynamische gegevensmaskering op een SQL-tabel kunt toevoegen en verwijderen


  1. Retourneer het einde van de maand in SQLite

  2. Veldtypen en gebruik in Access 2019-databases

  3. Een eenvoudige web-app bouwen met Bottle, SQLAlchemy en de Twitter API

  4. Hoe een lijst met primaire sleutelbeperkingen te krijgen van alle databases op SQL Server Instance - SQL Server / TSQL-zelfstudie, deel 60