यह आलेख SQL सर्वर में इसके उपयोग के मामलों, सर्वोत्तम प्रथाओं और उन्नत SQL उपयोगकर्ताओं (डेवलपर्स और परीक्षकों सहित) के लिए सुरक्षा निहितार्थों के साथ-साथ गतिशील डेटा मास्किंग की एक उच्च-स्तरीय समझ देता है। इसके अतिरिक्त, इस लेख के पाठक विभिन्न प्रकार के डायनेमिक डेटा मास्किंग को लागू करने से परिचित होने जा रहे हैं। यह लेख दिन-प्रतिदिन के डेटाबेस विकास और परीक्षण कार्यों में डेटा मास्किंग के उन्नत-स्तरीय उपयोग के महत्व पर भी प्रकाश डालता है।
पूर्वापेक्षाएँ
आइए पहले इस लेख के लिए पूर्व-आवश्यकताएं देखें।
टी-एसक्यूएल परिचित
यह लेख मानता है कि पाठक टी-एसक्यूएल स्क्रिप्ट से अच्छी तरह परिचित हैं और एसक्यूएल डेटाबेस को देखने और हेरफेर करने के लिए आराम से एसक्यूएल प्रश्नों को लिख और चला सकते हैं।
डायनामिक डेटा मास्किंग की मूल बातें
यह आलेख यह भी मानता है कि पाठक SQL सर्वर में डायनेमिक डेटा मास्किंग की मूल अवधारणाओं को जानते हैं। यदि आपने इसे अभी तक नहीं किया है, तो डायनामिक डेटा मास्किंग की मूल बातों से परिचित होने के लिए कृपया आलेख SQL सर्वर में डेटा मास्किंग देखें।
Azure SQL डेटाबेस या SQL Server 2016 संगतता
SQL सर्वर 2016 में SQL Server 2019 के माध्यम से डायनामिक डेटा मास्किंग सुविधा उपलब्ध है, इसलिए निम्न में से किसी एक को रखने की अत्यधिक अनुशंसा की जाती है:
1. Azure SQL डेटाबेस
2. SQL सर्वर 2016 स्थानीय या दूरस्थ रूप से स्थापित।
नमूना डेटाबेस सेट करना
यदि आप इस लेख में पूर्वाभ्यास का पालन करना चाहते हैं, तो कृपया SQL सर्वर 2016 के साथ संगत निम्नलिखित T-SQL स्क्रिप्ट का उपयोग करके या Azure SQL डेटाबेस के रूप में एक नमूना डेटाबेस बनाना याद रखें:
-- Create sample database ITSalesV2 CREATE DATABASE ITSalesV2; GO USE [ITSalesV2] -- (2) Create MonthlySale table CREATE TABLE [dbo].[MonthlySale]( [SaleId] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY, [SellingDate] [datetime2](7) NULL, [Customer] [varchar](50) NULL, [Email] [varchar] (200) NULL, [Product] [varchar](150) NULL, [TotalPrice] [decimal](10, 2) NULL, ) -- (2) Populate monthly sale table SET IDENTITY_INSERT [dbo].[MonthlySale] ON INSERT INTO [dbo].[MonthlySale] ([SaleId], [SellingDate], [Customer],[Email], [Product], [TotalPrice]) VALUES (1, N'2019-05-01 00:00:00', N'Asif', N'[email protected]', N'Dell Laptop', CAST(300.00 AS Decimal(10, 2))) INSERT INTO [dbo].[MonthlySale] ([SaleId], [SellingDate], [Customer],[Email], [Product], [TotalPrice]) VALUES (2, N'2019-05-02 00:00:00', N'Mike',N'[email protected]', N'Dell Laptop', CAST(300.00 AS Decimal(10, 2))) INSERT INTO [dbo].[MonthlySale] ([SaleId], [SellingDate], [Customer],[Email], [Product], [TotalPrice]) VALUES (3, N'2019-05-02 00:00:00', N'Adil',N'[email protected]',N'Lenovo Laptop', CAST(350.00 AS Decimal(10, 2))) INSERT INTO [dbo].[MonthlySale] ([SaleId], [SellingDate], [Customer],[Email], [Product], [TotalPrice]) VALUES (4, N'2019-05-03 00:00:00', N'Sarah',N'[email protected]', N'HP Laptop', CAST(250.00 AS Decimal(10, 2))) INSERT INTO [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))) INSERT INTO [dbo].[MonthlySale] ([SaleId], [SellingDate], [Customer],[Email], [Product], [TotalPrice]) VALUES (6, N'2019-05-10 00:00:00', N'Sam',N'[email protected]', N'HP Desktop', CAST(300.00 AS Decimal(10, 2))) INSERT INTO [dbo].[MonthlySale] ([SaleId], [SellingDate], [Customer],[Email], [Product], [TotalPrice]) VALUES (7, N'2019-05-12 00:00:00', N'Mike',N'[email protected]', N'iPad', CAST(250.00 AS Decimal(10, 2))) INSERT INTO [dbo].[MonthlySale] ([SaleId], [SellingDate], [Customer],[Email], [Product], [TotalPrice]) VALUES (8, N'2019-05-13 00:00:00', N'Mike',N'[email protected]', N'iPad', CAST(250.00 AS Decimal(10, 2))) INSERT INTO [dbo].[MonthlySale] ([SaleId], [SellingDate], [Customer],[Email], [Product], [TotalPrice]) VALUES (9, N'2019-05-20 00:00:00', N'Peter',N'[email protected]', N'Dell Laptop', CAST(350.00 AS Decimal(10, 2))) INSERT INTO [dbo].[MonthlySale] ([SaleId], [SellingDate], [Customer],[Email], [Product], [TotalPrice]) VALUES (10, N'2019-05-25 00:00:00', N'Peter',N'[email protected]', N'Asus Laptop', CAST(400.00 AS Decimal(10, 2))) SET IDENTITY_INSERT [dbo].[MonthlySale] OFF
डेटा जांचा जा रहा है
निम्न स्क्रिप्ट चलाकर नव निर्मित और आबादी वाले नमूना डेटाबेस ITSalesV2 की जाँच करें:
-- View monthly sales data SELECT s.SaleId ,s.SellingDate ,s.Customer ,s.Email ,s.Product ,s.TotalPrice FROM dbo.MonthlySale s
आउटपुट इस प्रकार है:
एक गैर-विशेषाधिकार प्राप्त उपयोगकर्ता बनाना
कृपया बिना लॉगिन के एक गैर-विशेषाधिकार प्राप्त उपयोगकर्ता बनाएं, जिसमें मासिक बिक्री तालिका पर केवल चयन अनुमति हो, जो इस लेख के लिए पूर्व-आवश्यकता के रूप में नकाबपोश डेटा देखने जा रहा है। ऐसा करने के लिए निम्न स्क्रिप्ट का उपयोग करें:
-- Create DataUser to have Select access to MonthlySale table CREATE USER DataUser WITHOUT LOGIN; GRANT SELECT ON MonthlySale TO DataUser;
मास्किंग स्थिति की जांच के लिए एक प्रक्रिया बनाना
यह आलेख यह भी मानता है कि नमूना डेटाबेस में एक संग्रहीत प्रक्रिया है जो हमें डेटाबेस तालिकाओं में कॉलम की गतिशील डेटा मास्किंग स्थिति दिखाती है:
-- Stored procedure to check dynamic data masking status CREATE PROC ShowMaskingStatus AS BEGIN SET NOCOUNT ON 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; END
डायनामिक डेटा मास्किंग प्रकार
SQL सर्वर में डायनेमिक डेटा मास्किंग के चार सामान्य प्रकार हैं:
1. डिफ़ॉल्ट डेटा मास्क
2. आंशिक डेटा मास्क
3. रैंडम डेटा मास्क
4. कस्टम स्ट्रिंग डेटा मास्क
अब हम सभी चार सामान्य प्रकार के डायनेमिक डेटा मास्किंग को लागू करने जा रहे हैं।
डिफ़ॉल्ट डेटा मास्किंग लागू करना
डिफ़ॉल्ट डेटा मास्किंग एक विशेष वर्ण के साथ सभी कॉलम मानों को कवर करके एक अनधिकृत उपयोगकर्ता से पूरी तरह से एक कॉलम छुपाता है जिससे कॉलम सामग्री का अनुमान लगाना बहुत मुश्किल हो जाता है।
व्यावसायिक आवश्यकता
अब मान लें कि आपको एक व्यावसायिक आवश्यकता प्राप्त होती है जिसमें कहा गया है कि इस जानकारी की संवेदनशीलता के कारण ग्राहकों के ई-मेल पते पूरी तरह से छिपे (मास्केड) होने चाहिए।
इस व्यावसायिक आवश्यकता को पूरा करने का सबसे अच्छा तरीका ईमेल कॉलम को मास्क करना है। डायनामिक डेटा मास्किंग (DDM) का उपयोग करना।
ई-मेल पता डिफ़ॉल्ट डेटा मास्किंग
हम ई-मेल पतों को छिपाने के लिए तालिका को इस प्रकार बदलने जा रहे हैं:
--Default dynamic data masking of Email column ALTER TABLE MonthlySale ALTER COLUMN Email varchar(200) MASKED WITH (FUNCTION = 'default()');
मास्किंग स्थिति की जांच करना
Microsoft दस्तावेज़ में संदर्भित T-SQL स्क्रिप्ट के आधार पर निम्न संग्रहीत कार्यविधि का उपयोग करके डायनामिक डेटा मास्किंग स्थिति की जाँच करें:
-- Checking dynamic data masking status EXEC ShowMaskingStatus
आउटपुट हमें दिखाता है कि कौन से कॉलम सफलतापूर्वक मास्क किए गए हैं:
ईमेल कॉलम को DataUser के रूप में देखना
इसके बाद, मासिक बिक्री (तालिका) को डेटायूज़र नामक एक कम-विशेषाधिकार प्राप्त उपयोगकर्ता के रूप में देखने के लिए चयन कथन निष्पादित करें, जिसके पास तालिका पर केवल चयन अनुमति है:
-- Execute SELECT as DataUser EXECUTE AS USER = 'DataUser'; -- View monthly sales SELECT s.SaleId,s.SellingDate,s.Customer,s.Email,s.Product,s.Product from dbo.MonthlySale s -- Revert the User back to what user it was before REVERT;
आउटपुट इस प्रकार है:
आंशिक डेटा मास्किंग लागू करना
आंशिक डेटा मास्किंग जैसा कि नाम से पता चलता है, एक अनधिकृत उपयोगकर्ता द्वारा कॉलम को देखने से आंशिक रूप से छुपाता है, विशेष वर्णों के साथ कॉलम मानों के कुछ हिस्से को कवर करता है, जिससे कॉलम सामग्री कुछ हद तक पठनीय हो जाती है लेकिन फिर भी अनुमान लगाना मुश्किल होता है।
व्यावसायिक आवश्यकता
अब एक व्यावसायिक आवश्यकता के बारे में सोचें जिसमें आपको ग्राहकों के नाम को आंशिक रूप से छिपाने के लिए कहा गया है ताकि नाम का केवल पहला अक्षर ही दिखाई दे। इस व्यावसायिक आवश्यकता को पूरा करने का सबसे अच्छा तरीका आंशिक गतिशील डेटा मास्किंग का उपयोग करके ग्राहक कॉलम को मास्क करना है।
ग्राहक नामों का आंशिक डेटा मास्किंग
हम ग्राहक कॉलम को आंशिक रूप से मास्क करने के लिए तालिका को इस प्रकार बदलने जा रहे हैं:
-- Partial data masking of Customer names ALTER TABLE MonthlySale ALTER COLUMN [Customer] ADD MASKED WITH (FUNCTION = 'partial(1,"XXXXXXX",0)')
मास्किंग स्थिति की जांच करना
डायनामिक डेटा मास्किंग स्थिति जांचें:
-- Checking dynamic data masking status EXEC ShowMaskingStatus
आउटपुट हमें दिखाता है कि कौन से कॉलम सफलतापूर्वक मास्क किए गए हैं:
ग्राहक कॉलम को DataUser के रूप में देखना
तालिका को एक परीक्षण उपयोगकर्ता के रूप में देखें DataUser जिसे नकाबपोश डेटा देखना चाहिए:
-- Execute SELECT as DataUser EXECUTE AS USER = 'DataUser'; -- View monthly sales as DataUser SELECT s.SaleId,s.SellingDate,s.Customer,s.Email,s.Product,s.Product from dbo.MonthlySale s -- Revert the User back to what user it was before REVERT;
आउटपुट इस प्रकार है:
रैंडम डेटा मास्किंग लागू करना
रैंडम डेटा मास्किंग एक कॉलम को एक अनधिकृत उपयोगकर्ता से बेतरतीब ढंग से छुपाता है, जो कॉलम की सामग्री का अनुमान लगाना बहुत मुश्किल बना देता है। कृपया याद रखें कि यादृच्छिक डेटा मास्किंग प्रकार केवल उन स्तंभों पर लागू होता है जो केवल संख्याओं को संग्रहीत करते हैं और इसे यादृच्छिकरण के लिए एक सीमा प्रदान करके निर्दिष्ट किया जा सकता है।
व्यावसायिक आवश्यकता
आपको एक व्यावसायिक आवश्यकता प्राप्त होती है जिसमें कहा गया है कि उत्पाद की कीमत को संख्याओं की एक यादृच्छिक श्रेणी के साथ छिपाया जाना चाहिए ताकि कम विशेषाधिकार वाले उपयोगकर्ताओं को गोपनीयता कारणों से उत्पाद की सटीक कीमतों का पता न चले। इस व्यवसाय विनिर्देश को पूरा करने का सबसे अच्छा तरीका यादृच्छिक गतिशील डेटा मास्किंग का उपयोग करके TotalPrice कॉलम को मास्क करना है।
कुल मूल्य कॉलम का रैंडम डेटा मास्किंग
तालिका को मासिक बिक्री में बदलें TotalPrice को यादृच्छिक रूप से निम्नानुसार मुखौटा करने के लिए:
--Random dynamic data masking of TotalPrice column ALTER TABLE MonthlySale ALTER COLUMN [TotalPrice] decimal(10,2) MASKED WITH (FUNCTION = 'random(1, 12)')
मास्किंग स्थिति की जांच करना
कृपया निम्न संग्रहीत कार्यविधि चलाकर गतिशील डेटा मास्किंग स्थिति की जाँच करें:
-- Checking dynamic data masking status EXEC ShowMaskingStatus
आउटपुट हमें दिखाता है कि कौन से कॉलम सफलतापूर्वक मास्क किए गए हैं:
TotalPrice कॉलम को DataUser के रूप में देखना
तालिका को अभी DataUser के रूप में देखें:
-- Execute SELECT as DataUser EXECUTE AS USER = 'DataUser'; -- View monthly sales SELECT s.SaleId,s.SellingDate,s.Customer,s.Email,s.Product,s.TotalPrice from dbo.MonthlySale s -- Revert the User back to what user it was before REVERT;
आउटपुट इस प्रकार है:
कृपया याद रखें कि यादृच्छिक संख्या उत्पन्न होने के कारण रैंडम डेटा मास्क्ड कॉलम के लिए आउटपुट भिन्न हो सकता है।
कस्टम स्ट्रिंग डेटा मास्किंग लागू करना
कस्टम स्ट्रिंग डेटा मास्किंग जैसा कि इसके नाम का तात्पर्य है, कॉलम को छिपाने के लिए कस्टम वर्ण जोड़ता है जिससे इसकी सामग्री का अनुमान लगाना बहुत मुश्किल हो जाता है। कृपया याद रखें कि कस्टम स्ट्रिंग डेटा मास्किंग का उपयोग वास्तविक कॉलम मानों को मास्क करने के लिए वर्ण को अनुकूलित करके आंशिक डेटा मास्किंग के संयोजन में किया जाता है। दूसरे शब्दों में, कस्टम स्ट्रिंग डेटा मास्किंग आंशिक डेटा मास्किंग का एक उन्नत रूप है।
व्यावसायिक आवश्यकता
उत्पाद कॉलम का केवल पहला और अंतिम वर्ण दिखाने के लिए एक व्यावसायिक आवश्यकता पर विचार करें, जबकि शेष वर्णों को हाइफ़न (-) के साथ छिपाया या मास्क किया जाना चाहिए। इस व्यवसाय विनिर्देश को पूरा करने का सबसे अच्छा तरीका आवश्यक कस्टम स्ट्रिंग के साथ आंशिक गतिशील डेटा मास्किंग का उपयोग करके उत्पाद कॉलम को मास्क करना है।
ग्राहक स्ट्रिंग डेटा डेटा बेचने का मास्किंग
तालिका को मासिक बिक्री में बदलें ताकि उत्पाद कॉलम को इस प्रकार मास्क किया जा सके:
--Custom string dynamic data masking of Product column ALTER TABLE MonthlySale ALTER COLUMN [Product] ADD MASKED WITH (FUNCTION = 'partial(1,"---",1)')
मास्किंग स्थिति की जांच करना
निम्न स्क्रिप्ट का उपयोग करके इस बिंदु पर गतिशील डेटा मास्किंग स्थिति की जांच करना उचित है:
-- Checking dynamic data masking status EXEC ShowMaskingStatus
आउटपुट उन सभी कॉलमों को दिखाता है जिन पर डायनेमिक डेटा मास्किंग को सफलतापूर्वक लागू किया गया है जैसा कि नीचे दिखाया गया है:
उत्पाद कॉलम को DataUser के रूप में देखना
तालिका को अभी DataUser के रूप में देखें:
-- Execute SELECT as DataUser EXECUTE AS USER = 'DataUser'; -- View monthly sales SELECT s.SaleId,s.SellingDate,s.Customer,s.Email,s.Product,s.TotalPrice from dbo.MonthlySale s -- Revert the User back to what user it was before REVERT;
आउटपुट इस प्रकार है:
बधाई हो! आपने सभी चार मास्किंग तकनीकों को सफलतापूर्वक लागू कर दिया है।
कृपया लागू डेटा मास्किंग प्रकारों को छोड़ने के लिए शुरुआती लोगों के लिए SQL सर्वर में डेटा मास्किंग लेख देखें।
सर्वोत्तम अभ्यास
कृपया निम्नलिखित बातें याद रखें:
1. डायनेमिक डेटा मास्किंग कॉलम डेटा को सुरक्षित या एन्क्रिप्ट नहीं करता है, इसलिए इसका उपयोग उस उद्देश्य के लिए नहीं किया जाना चाहिए।
2. संभावित उपयोगकर्ता जिसे नकाबपोश डेटा देखना चाहिए, उसके पास डेटा देखने के लिए बहुत सीमित पहुंच होनी चाहिए और उसे डेटा का दोहन करने के लिए अपडेट की अनुमति बिल्कुल भी नहीं दी जानी चाहिए।
3. संभावित उपयोगकर्ता केवल SELECT अनुमति के साथ भी सही मान का अनुमान लगाने के लिए संपूर्ण क्वेरी चला सकता है, इसलिए कृपया इससे सावधान रहें।
4. आप डिफ़ॉल्ट डायनेमिक मास्किंग का उपयोग करने के बजाय ई-मेल कॉलम को मास्क करने के लिए ALTER COLUMN EDD with MASKED (FUNCTION ='email()') का भी उपयोग कर सकते हैं।
5. आप लेन-देन रिपोर्ट में डेबिट कार्ड नंबर छिपाने के लिए कस्टम स्ट्रिंग डेटा मास्किंग का उपयोग केवल अंतिम दो या चार अंक दिखा कर कर सकते हैं जैसा आपने खरीदारी रसीदों में देखा होगा।
करने योग्य चीज़ें
अब जबकि आप सभी चार प्रकार के मास्किंग को लागू कर सकते हैं, कृपया अपने कौशल को और बेहतर बनाने के लिए निम्नलिखित चीजों को आजमाएं:
1. कृपया लेख SSRS रिपोर्ट्स डेवलपमेंट इन सिंपल टर्म्स में वॉकथ्रू का पालन करके एक SSRS रिपोर्ट विकसित करके एक नमूना डेटाबेस बनाएं, जो आंशिक डेटा मास्किंग का उपयोग करके बाकी को छुपाकर केवल लेखक के नामों का पहला अक्षर दिखाता है।
2। कृपया आलेख में संदर्भित एक नमूना डेटाबेस बनाने का प्रयास करें और स्कीमा स्नैपशॉट के माध्यम से डेटाबेस के एकाधिक संस्करण तैयार करें और फिर छात्र नामक एक परीक्षण उपयोगकर्ता बनाएं और इस परीक्षण उपयोगकर्ता के लिए सभी छात्रों के अंकों को छिपाने के लिए उपयुक्त गतिशील डेटा मास्किंग लागू करें।
3. कृपया यह सुनिश्चित करने के लिए डायनेमिक डेटा मास्किंग बनाने और छोड़ने का प्रयास करें कि आप SQL टेबल पर डायनेमिक डेटा मास्किंग को सफलतापूर्वक जोड़ और हटा सकते हैं।