Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

शुरुआती के लिए SQL सर्वर में डायनामिक डेटा मास्किंग

आलेख SQL सर्वर में डायनेमिक डेटा मास्किंग (DDM) की मूल बातें प्रस्तुत करता है, साथ ही डेटा मास्किंग कार्यान्वयन के एक सरल उदाहरण द्वारा समर्थित इसके अवलोकन के साथ। इसके अतिरिक्त, पाठक डायनेमिक डेटा मास्किंग के लाभों से परिचित होने जा रहे हैं। यह पेपर दिन-प्रतिदिन डेटाबेस विकास कार्यों में डेटा मास्किंग के महत्व पर भी प्रकाश डालता है जब मानक प्रथाओं का पालन करने के लिए कुछ क्षेत्रों को उनकी संवेदनशील प्रकृति के कारण मास्क किया जाना चाहिए।

डेटा मास्किंग के बारे में

आइए हम डेटा मास्किंग की बुनियादी अवधारणाओं और SQL सर्वर में इस सुविधा की उपलब्धता के बारे में जानें।

सरल परिभाषा

डेटा मास्किंग डेटा को पूरी तरह या आंशिक रूप से छिपाने का एक तरीका है जिससे मास्किंग लागू होने के बाद डेटा को पहचानना या समझना मुश्किल हो जाता है।

माइक्रोसॉफ्ट परिभाषा

Microsoft दस्तावेज़ के अनुसार, डायनेमिक डेटा मास्किंग (DDM) संवेदनशील डेटा एक्सपोज़र को गैर-विशेषाधिकार प्राप्त उपयोगकर्ताओं के लिए मास्क करके सीमित करता है।

संवेदनशील डेटा क्या है

संवेदनशील डेटा से हमारा तात्पर्य किसी भी ऐसे डेटा से है जिसमें निजी, व्यक्तिगत रूप से पहचान योग्य, वित्तीय या सुरक्षा जानकारी होती है, जिसे प्रकट करने पर इसका दुरुपयोग किया जा सकता है या किसी संगठन की प्रतिष्ठा को नुकसान पहुंचा सकता है।

संवेदनशील डेटा उदाहरण

संवेदनशील डेटा का एक अच्छा उदाहरण डेटाबेस में संग्रहीत डेबिट कार्ड नंबर है जिसे किसी भी अनधिकृत उपयोग से सुरक्षित किया जाना चाहिए। संवेदनशील डेटा का एक और अच्छा उदाहरण व्यक्तिगत ईमेल पता है जो किसी व्यक्ति की आसानी से पहचान कर सकता है।

गैर-विशेषाधिकार प्राप्त उपयोगकर्ता

कोई भी डेटाबेस उपयोगकर्ता जिसे संवेदनशील डेटा देखने की अनुमति नहीं है, उसे गैर-विशेषाधिकार प्राप्त उपयोगकर्ता माना जाता है।

डायनामिक डेटा मास्किंग (DDM)

SQL सर्वर द्वारा समर्थित डेटा मास्किंग सुविधा को डायनेमिक डेटा मास्किंग के रूप में जाना जाता है जिसे Microsoft दस्तावेज़ में DDM के रूप में भी संदर्भित किया जाता है। दूसरे शब्दों में, Microsoft डेटा मास्किंग को SQL सर्वर में डायनेमिक डेटा मास्किंग के रूप में संदर्भित करता है।

संगतता

Microsoft दस्तावेज़ के अनुसार, डायनेमिक डेटा मास्किंग सुविधा SQL सर्वर के निम्न संस्करणों द्वारा समर्थित है:
1. SQL सर्वर 2016 और बाद के संस्करण
2. Azure SQL डेटाबेस
3. Azure SQL डेटा वेयरहाउस
इसलिए यदि आपने अभी तक Azure SQL डेटाबेस का उपयोग शुरू नहीं किया है, तो आपको डायनेमिक डेटा मास्किंग सुविधा का उपयोग करने के लिए न्यूनतम SQL Server 2016 की आवश्यकता है।

डायनामिक डेटा मास्किंग कॉन्फ़िगर करना

डायनेमिक डेटा मास्किंग को केवल टी-एसक्यूएल कमांड का उपयोग करके कॉन्फ़िगर किया जा सकता है।
डायनेमिक डेटा मास्किंग कार्यान्वयन अनधिकृत उपयोगकर्ताओं को संवेदनशील डेटा देखने से रोकने के लिए टी-एसक्यूएल स्क्रिप्टिंग के माध्यम से किया जाता है।

डायनामिक डेटा मास्किंग के लाभ

अंत में, आइए हम गतिशील डेटा मास्किंग के कुछ प्रमुख लाभों के बारे में जानें, लेकिन इससे पहले, मैं SQL पेशेवरों से नहीं, बल्कि SQL शुरुआती लोगों से पूछना चाहूंगा कि अखंडता बाधाओं के क्या लाभ हैं?
आइए हम एक अद्वितीय के उदाहरण पर विचार करें। मुख्य बाधा जो यह सुनिश्चित करती है कि जिस कॉलम पर इसे लागू किया गया है, उसमें अलग (कोई डुप्लिकेट नहीं) मान हैं। यदि मैं अपने फ्रंट-एंड एप्लिकेशन में डेटा प्रविष्टि के समय अलग-अलग कॉलम मान लागू कर सकता हूं, तो मुझे एक अद्वितीय कुंजी बाधा लागू करके डेटाबेस के माध्यम से इसे लागू करने की जहमत क्यों उठानी चाहिए?
इसका उत्तर नियमों को सुनिश्चित करना है (अखंडता की कमी) ) लगातार बने रहते हैं और केंद्रीय रूप से नियंत्रित होते हैं। मुझे इसे डेटाबेस स्तर पर करना है अन्यथा मुझे सभी वर्तमान और डेटाबेस तक पहुंचने वाले किसी भी आगामी एप्लिकेशन में अद्वितीय मानों को लागू करने के लिए कोड लिखना पड़ सकता है।
डायनामिक डेटा मास्किंग के लिए भी यही सच है क्योंकि यह परिभाषित करता है डेटाबेस स्तर पर एक कॉलम पर मास्क ताकि डेटाबेस तक पहुँचने वाले एप्लिकेशन द्वारा कोई अतिरिक्त मास्किंग (कोड) करने की आवश्यकता न हो।

पारंपरिक तरीकों की तुलना में डायनेमिक डेटा मास्किंग के निम्नलिखित लाभ हैं:
1. डायनेमिक डेटा मास्किंग एक डेटाबेस में संवेदनशील डेटा को छिपाने या बदलने की केंद्रीकृत नीति को लागू करता है जो किसी भी एप्लिकेशन द्वारा विरासत में मिला है जो डेटा तक पहुंचना चाहता है।
2. SQL सर्वर में डायनेमिक डेटा मास्किंग संवेदनशील डेटा और उन उपयोगकर्ताओं को देखने के विशेषाधिकार वाले उपयोगकर्ताओं को प्रबंधित करने में मदद कर सकता है जो इसे देखने के लिए अधिकृत नहीं हैं।
3. टी-एसक्यूएल स्क्रिप्ट के रूप में इसका सरल कार्यान्वयन है।

डायनामिक डेटा मास्किंग लागू करना

डायनेमिक डेटा मास्किंग को लागू करने से पहले हमें डायनेमिक डेटा मास्किंग के प्रकारों को समझना होगा जो 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()');

मास्किंग स्थिति की जांच करना

आप Microsoft दस्तावेज़ में दी गई निम्न T-SQL स्क्रिप्ट का उपयोग करके किसी भी समय डायनेमिक डेटा मास्किंग स्थिति की जांच कर सकते हैं:

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

ऐसा लगता है कि आउटपुट हमें अपेक्षित परिणाम नहीं दिखा रहा है:

जैसा कि आप इस तथ्य के बावजूद देख सकते हैं कि हमने लेखक कॉलम को मुखौटा कर दिया है, यह अभी भी अपने वास्तविक मूल्यों को दिखा रहा है। इस व्यवहार के पीछे का कारण यह है कि जिस खाते का उपयोग हमने डायनेमिक डेटा मास्किंग को लागू करने के लिए किया है, उसे उन्नत विशेषाधिकार प्राप्त हैं और इसीलिए जब हम चालू खाते का उपयोग करके तालिका को क्वेरी करते हैं तो नकाबपोश डेटा अपने मूल रूप में दिखाई देता है।
समाधान है चयन अनुमति के साथ एक नया उपयोगकर्ता बनाने के लिए।

टेबल पर चयन अनुमति के साथ एक उपयोगकर्ता बनाना

आइए अब हम बिना लॉगिन के एक नया डेटाबेस उपयोगकर्ता बनाते हैं, जिसमें केवल आलेख तालिका पर अनुमति का चयन इस प्रकार है:

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

शीर्ष 5 लेखों को ArticleUser के रूप में देखना

इसके बाद, नव निर्मित उपयोगकर्ता का उपयोग करके शीर्ष 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;

बधाई हो! आपने आवश्यकता के अनुसार लेखक कॉलम को सफलतापूर्वक छिपा दिया है।

नकाबपोश कॉलम छोड़ना

आप केवल निम्नलिखित टी-एसक्यूएल कमांड जारी करके उस कॉलम पर डायनेमिक डेटा मास्किंग छोड़ सकते हैं जिसे आपने इसे पहले लागू किया है:

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

कृपया संपर्क में रहें क्योंकि अगले लेख में गतिशील डेटा मास्किंग का अधिक उन्नत उपयोग होने वाला है।

करने के लिए चीज़ें

अब जबकि आप डेटाबेस में किसी तालिका के कॉलम को मास्क कर सकते हैं, कृपया अपने कौशल को और बेहतर बनाने के लिए निम्न चीज़ें आज़माएँ:
1. कृपया नमूना डेटाबेस में श्रेणी कॉलम को छिपाने का प्रयास करें।
2. कृपया लेखक तालिका को AuthorId, नाम और ईमेल कॉलम के साथ बनाने का प्रयास करें और फिर AuthorId को आलेख तालिका में एक विदेशी कुंजी के रूप में पास करें और फिर एक परीक्षण उपयोगकर्ता बनाकर लेखक तालिका के नाम और ईमेल कॉलम पर गतिशील डेटा मास्किंग लागू करें
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. क्या MS SQL सर्वर के बीच में सीमा सीमाएँ शामिल हैं?

  2. माइक्रोसॉफ्ट द्वारा डाटाबेस नेमिंग कन्वेंशन?

  3. टी-एसक्यूएल में स्प्लिट फ़ंक्शन बराबर?

  4. एसक्यूएल एक ही तालिका में समूह पर कॉलम के योग को कैसे अपडेट करें

  5. T-SQL का उपयोग करके SQL सर्वर में लिंक किए गए सर्वर को निकालें