Microsoft® ने SQL Server® में सुरक्षा पर ध्यान केंद्रित किया है, और लगभग सभी रिलीज़ में या तो मौजूदा सुविधाओं में वृद्धि हुई है या नई सुरक्षा सुविधाएँ पेश की हैं। SQL सर्वर 2016 में, Microsoft ने कई नई सुरक्षा सुविधाएँ पेश कीं, जो उपयोगकर्ताओं को उनके डेटा की सुरक्षा करने में मदद करती हैं, जिसमें पंक्ति-स्तर सुरक्षा, हमेशा एन्क्रिप्टेड और डायनेमिक डेटा मास्किंग शामिल हैं।
परिचय
अपने पिछले ब्लॉग में, मैंने SQL सर्वर 2016 में डायनामिक डेटा मास्किंग के बारे में लिखा था। इस ब्लॉग में, मैं पंक्ति-स्तर सुरक्षा (आरएलएस) सुविधा का परिचय देता हूं, जो आपको यह नियंत्रित करने में सक्षम बनाता है कि किन उपयोगकर्ताओं की तालिका में पंक्तियों तक पहुंच है। RLS आपको क्वेरी निष्पादित करने वाले उपयोगकर्ता की विशेषताओं के आधार पर डेटा पर प्रतिबंध लागू करने में सक्षम बनाता है। RLS आपको विभिन्न उपयोगकर्ताओं के लिए पूर्ण पारदर्शिता के साथ आसानी से डेटा तक पहुंच को नियंत्रित करने में मदद करता है।
आरएलएस की आवश्यकता
ऐसे समय होते हैं जब हमें चुनिंदा उपयोगकर्ताओं को केवल चुनिंदा डेटा वापस करने की आवश्यकता होती है। अतीत में, हमने दृश्य बनाकर और उन दृश्यों पर उपयोगकर्ता को अनुमति देकर ऐसा किया था। हालांकि, डेटा की बढ़ती मात्रा और उपयोगकर्ताओं की संख्या को समायोजित करने के लिए आवश्यक दृश्यों की संख्या के साथ यह दृष्टिकोण अप्रबंधनीय हो गया। नई परिस्थितियों में सुरक्षा आवश्यकता को पूरा करने के लिए SoMicrosoft ने RLS की शुरुआत की।
RLS तालिका में पंक्तियों तक पहुंच पर बारीक नियंत्रण को सक्षम बनाता है, जिससे आप आसानी से नियंत्रित कर सकते हैं कि कौन से उपयोगकर्ता किस डेटा को एप्लिकेशन में पूर्ण पारदर्शिता के साथ एक्सेस कर सकते हैं।
इस सुविधा के साथ, पंक्तियों को वर्तमान उपयोगकर्ता पहुंच अधिकारों के बजाय क्वेरी के निष्पादन संदर्भ के आधार पर फ़िल्टर किया जाता है। आप यह निर्धारित करने के लिए सुरक्षित तर्क नियम बना सकते हैं कि कौन सी उपयोगकर्ता कौन सी पंक्तियों को देख सकता है और किसी तालिका के लिए एक लचीली और मजबूत सुरक्षा नीति डिज़ाइन करके किसी भी पंक्ति (या डेटा) को प्रतिबंधित कर सकता है, जैसा कि निम्न छवि में दिखाया गया है:
छवि स्रोत: https://sqlwithmanoj.com/2015/07/13/implementing-row-level-security-rls-with-sql-server-2016/
आरएलएस गुण
आरएलएस में निम्नलिखित गुण हैं:
- सुंदर पहुंच भूमिका (विशिष्ट पंक्तियों तक पढ़ने और लिखने दोनों को नियंत्रित करें)
- आवेदन पारदर्शिता (कोई आवेदन परिवर्तन की आवश्यकता नहीं है)
- डेटाबेस के भीतर पहुंच को केंद्रीकृत करें
- कार्यान्वयन और रखरखाव में आसान
आरएलएस कैसे काम करता है
आरएलएस को लागू करने के लिए, आपको निम्नलिखित तत्वों पर विचार करने की आवश्यकता है:
- भविष्यवाणी समारोह
- सुरक्षा भविष्यवाणी करती है
- सुरक्षा नीति
निम्नलिखित अनुभाग इन वस्तुओं का वर्णन करते हैं।
प्रिडिकेट फंक्शन
एक विधेय फ़ंक्शन एक इन-लाइन तालिका मान फ़ंक्शन है जो यह जांचता है कि क्वेरी निष्पादित करने वाले उपयोगकर्ता के पास उस पर परिभाषित तर्क के आधार पर डेटा तक पहुंच है या नहीं। यह फ़ंक्शन 1
लौटाता है प्रत्येक पंक्ति के लिए जिसे उपयोगकर्ता को एक्सेस करने की अनुमति है।
सुरक्षा विधेय
सुरक्षा विधेय तालिका में विधेय फ़ंक्शन को बाध्य करने में मदद करता है। आरएलएस दो प्रकार के सुरक्षा विधेय का समर्थन करता है:फ़िल्टर विधेय और ब्लॉक भविष्यवाणी करता है। प्रेडिकेट फ़ंक्शन में परिभाषित तर्क के अनुसार फ़िल्टर प्रेडिकेट डेटा को बिना किसी त्रुटि के चुपचाप फ़िल्टर करता है।
SELECT
UPDATE
DELETE
ब्लॉक विधेय स्पष्ट रूप से एक त्रुटि उठाता है और उपयोगकर्ता को डेटा पर निम्नलिखित संचालन का उपयोग करने से रोकता है जो विधेय फ़ंक्शन तर्क का उल्लंघन करता है:
AFTER INSERT
AFTER UPDATE
BEFORE UPDATE
BEFORE DELETE
सुरक्षा नीति
RLS के लिए एक सुरक्षा नीति वस्तु बनाई जाती है जो सभी सुरक्षा विधेय को समूहीकृत करती है जो विधेय फ़ंक्शन को संदर्भित करती है।
यूज केस
आरएलएस का उपयोग कैसे किया जा सकता है, इसके कुछ डिज़ाइन उदाहरण यहां दिए गए हैं:
- एक अस्पताल एक सुरक्षा नीति बना सकता है जो नर्सों को केवल अपने मरीजों के लिए डेटा पंक्तियों को देखने की अनुमति देती है।
- बैंक किसी कर्मचारी के व्यवसाय प्रभाग या कंपनी में भूमिका के आधार पर वित्तीय डेटा पंक्तियों तक पहुंच को प्रतिबंधित करने के लिए एक नीति बना सकता है।
- एक बहु-किरायेदार एप्लिकेशन प्रत्येक टैनेंट की डेटा पंक्तियों को हर दूसरे टैनेंट की पंक्तियों से तार्किक रूप से अलग करने के लिए एक नीति बना सकता है। चूंकि डेटा फॉर्मैनी टैनेंट को एक ही तालिका में संग्रहीत किया जाता है, इसलिए प्रक्रिया अधिक कुशल होती है। प्रत्येक टैनेंट केवल अपनी डेटा पंक्तियों को देख सकता है।
आरएलएस लागू करें
आरएलएस को कैसे लागू किया जाए, इसका एक उदाहरण निम्नलिखित है:
चरण 1:डेटाबेस बनाने के लिए निम्न कोड चलाएँ RowFilter
और दो उपयोगकर्ताओं के साथ परीक्षण करने के लिए:
CREATE DATABASE RowFilter;
GO
USE RowFilter;
GO
CREATE USER userBrian WITHOUT LOGIN;
CREATE USER userJames WITHOUT LOGIN;
GO
चरण 2:उदाहरणों के साथ तालिका बनाने के लिए निम्न कोड चलाएँ और नए उपयोगकर्ताओं को चयन विशेषाधिकार प्रदान करें:
CREATE TABLE dbo.SalesFigures (
[userCode] NVARCHAR(10),
[sales] MONEY)
GO
INSERT INTO dbo.SalesFigures
VALUES ('userBrian',100), ('userJames',250), ('userBrian',350)
GO
GRANT SELECT ON dbo.SalesFigures TO userBrian
GRANT SELECT ON dbo.SalesFigures TO userJames
GO
चरण 3:फ़िल्टर विधेय फ़ंक्शन जोड़ने के लिए निम्न कोड चलाएँ:
CREATE FUNCTION dbo.rowLevelPredicate (@userCode as sysname)
RETURNS TABLE
WITH SCHEMABINDING
AS
RETURN SELECT 1 AS rowLevelPredicateResult
WHERE @userCode = USER_NAME();
GO
चरण 4:तालिका में विधेय फ़िल्टर जोड़ने के लिए निम्न कोड चलाएँdbo.बिक्री के आंकड़े :
CREATE SECURITY POLICY UserFilter
ADD FILTER PREDICATE dbo.rowLevelPredicate(userCode)
ON dbo.SalesFigures
WITH (STATE = ON);
GO
चरण 5:चरण 2 में जोड़े गए उपयोगकर्ता के साथ परिणामों का परीक्षण करने के लिए निम्न कोड चलाएँ:
EXECUTE AS USER = 'userBrian';
SELECT * FROM dbo.SalesFigures;
REVERT;
GO
यह कोड दो पंक्तियों को लौटाता है, जैसा कि नीचे दिखाया गया है:
(/article/uploadfiles/202207/2022070812111051.png)पी>
EXECUTE AS USER = 'userJames';
SELECT * FROM dbo.SalesFigures;
REVERT;
GO
यह कोड एक पंक्ति लौटाता है, जैसा कि नीचे दिखाया गया है:
(/article/uploadfiles/202207/2022070812111024.png)पी>
अनुमतियां
सुरक्षा नीतियां बनाने, बदलने या छोड़ने के लिए किसी भी सुरक्षा नीति में बदलाव की आवश्यकता होती है अनुमति।
सुरक्षा नीति बनाने या छोड़ने के लिए ALTER . की आवश्यकता होती है स्कीमा पर अनुमति।
इसके अतिरिक्त, प्रत्येक विधेय को निम्नलिखित अनुमतियों की आवश्यकता होती है, जिन्हें जोड़ा जाता है:
- चुनें और संदर्भ एएसए विधेय के रूप में उपयोग किए जाने वाले फ़ंक्शन पर अनुमतियां।
- द संदर्भ नीति के लिए बाध्य लक्ष्य तालिका पर अनुमति।
- द संदर्भ लक्ष्य तालिका से प्रत्येक कॉलम पर तर्कों का इस्तेमाल किया।
सुरक्षा नीतियां सभी उपयोगकर्ताओं पर लागू होती हैं, जिसमें डेटाबेस के मालिक (DBO) उपयोगकर्ता भी शामिल हैं। DBO उपयोगकर्ता सुरक्षा नीतियों को बदल या छोड़ सकते हैं। हालांकि, सुरक्षा नीतियों में उनके परिवर्तनों का ऑडिट किया जा सकता है। उच्च-विशेषाधिकार प्राप्त उपयोगकर्ताओं के मामले में जैसे sysadmin
या db_owner
, आपको समस्यानिवारक या डेटा सत्यापित करने के लिए सभी पंक्तियों को देखने की आवश्यकता है, इसलिए आपको इसकी अनुमति देने के लिए सुरक्षा नीति लिखनी होगी।
यदि कोई सुरक्षा नीति SCHEMABINDING = OFF
. के साथ बनाई गई है , तो उपयोगकर्ताओं के पासSELECT
. होना चाहिए या EXECUTE
विधेय फ़ंक्शन पर अनुमति और लक्ष्य तालिका को क्वेरी करने के लिए विधेय फ़ंक्शन के भीतर उपयोग की जाने वाली कोई अतिरिक्त तालिका, दृश्य या फ़ंक्शन। यदि कोई सुरक्षा नीति SCHEMABINDING = ON
. के साथ बनाई गई है , जो कि डिफ़ॉल्ट है, तब इन अनुमति जांचों को छोड़ दिया जाता है जब उपयोगकर्ता लक्ष्य तालिका को क्वेरी करते हैं।
SQL Server 2016 RLS को संशोधित करना
किसी नीति के लिए SQL सर्वर RLS को अक्षम करने के लिए निम्न क्रिया करें:
- सुरक्षा नीति बदलें फ़िल्टर का उपयोग करें
State = off
के साथ ।
फ़िल्टर और सुरक्षा नीति छोड़ने के लिए निम्न कार्य करें:
- छोड़ें सुरक्षा नीति फ़िल्टर का उपयोग करें ।
- ड्रॉप फ़ंक्शन dbo.rowlevelPredicate ।
सर्वोत्तम अभ्यास
Microsoft इन सर्वोत्तम प्रथाओं का सुझाव देता है:
- हमने अत्यधिक अनुशंसा की है कि आप RLS ऑब्जेक्ट (विधेय फ़ंक्शन और सुरक्षा नीति) के लिए एक अलग स्कीमा बनाएं।
- किसी भी सुरक्षा नीति में बदलाव करें अनुमति अत्यधिक विशेषाधिकार प्राप्त उपयोगकर्ताओं (जैसे सुरक्षा नीति प्रबंधक) के लिए अभिप्रेत है। सुरक्षा नीति प्रबंधक को चयन की आवश्यकता नहीं है टेबल पर अनुमति जो वे सुरक्षित रखते हैं।
- संभावित रनटाइम त्रुटियों से बचने के लिए विधेय कार्यों में प्रकार रूपांतरणों से बचें।
- प्रदर्शन में गिरावट से बचने के लिए जहां भी संभव हो, विधेय कार्यों में पुनरावृत्ति से बचें। क्वेरी ऑप्टिमाइज़र प्रत्यक्ष रिकर्सन का पता लगाने का प्रयास करता है। हालांकि, अप्रत्यक्ष पुनरावर्तन (जैसे कि जब कोई दूसरा फ़ंक्शन विधेय फ़ंक्शन को कॉल करता है) को खोजने की गारंटी नहीं है।
- प्रदर्शन को अधिकतम करने के लिए विधेय कार्यों में अत्यधिक टेबल जॉइन का उपयोग करने से बचें।
आरएलएस में सीमाएं और प्रतिबंध
आरएलएस पर लागू होने वाली कुछ सीमाएं निम्नलिखित हैं:
- विधेय फ़ंक्शन को
SCHEMABINDING
. के साथ बनाया जाना चाहिए . यदि कोई फ़ंक्शनSCHEMABINDING
. के बिना बनाया गया है , और आप इसे सुरक्षा नीति से जोड़ने का प्रयास करते हैं, यह एक त्रुटि उत्पन्न करता है। - अनुक्रमित दृश्य उस तालिका पर नहीं बनाए जा सकते जिस पर RLS लागू किया गया है।
- आरएलएस के लिए इन-मेमोरी टेबल समर्थित नहीं हैं।
- पूर्ण-पाठ अनुक्रमणिका समर्थित नहीं हैं।
निष्कर्ष
SQL सर्वर 2016 में RLS सुविधा के साथ, आप अनुप्रयोग स्तर पर परिवर्तन किए बिना डेटाबेस स्तर पर रिकॉर्ड के लिए सुरक्षा प्रदान कर सकते हैं। आप अपने डेटाबेस में डेटा मैनिपुलेशन लैंग्वेज (डीएमएल) कोड को बदलने की आवश्यकता के बिना, अपने मौजूदा कोड के साथ एक विधेय फ़ंक्शन और नई सुरक्षा नीति सुविधा का उपयोग करके आरएलएस को लागू कर सकते हैं।
कोई टिप्पणी करने या प्रश्न पूछने के लिए फ़ीडबैक टैब का उपयोग करें।
विशेषज्ञ प्रशासन, प्रबंधन और कॉन्फ़िगरेशन के साथ अपने परिवेश को अनुकूलित करें
रैकस्पेस की एप्लिकेशन सेवाएं(RAS) विशेषज्ञ अनुप्रयोगों के व्यापक पोर्टफोलियो में निम्नलिखित पेशेवर और प्रबंधित सेवाएं प्रदान करते हैं:
- ईकामर्स और डिजिटल अनुभव प्लेटफॉर्म
- एंटरप्राइज रिसोर्स प्लानिंग (ईआरपी)
- बिजनेस इंटेलिजेंस
- बिक्री बल ग्राहक संबंध प्रबंधन (सीआरएम)
- डेटाबेस
- ईमेल होस्टिंग और उत्पादकता
हम वितरित करते हैं:
- निष्पक्ष विशेषज्ञता :हम तत्काल मूल्य प्रदान करने वाली क्षमताओं पर ध्यान केंद्रित करते हुए आपकी आधुनिकीकरण यात्रा को सरल और मार्गदर्शन करते हैं।
- कट्टर अनुभव ™:हम पहले एक प्रक्रिया को जोड़ते हैं। प्रौद्योगिकी दूसरा। व्यापक समाधान प्रदान करने के लिए समर्पित तकनीकी सहायता के साथ दृष्टिकोण।
- बेजोड़ पोर्टफोलियो :हम व्यापक क्लाउड अनुभव लागू करते हैं ताकि आपको सही क्लाउड पर सही तकनीक को चुनने और परिनियोजित करने में मदद मिल सके।
- फुर्तीली डिलीवरी :हम आपसे मिलते हैं जहां आप अपनी यात्रा में हैं और सफलता को अपने साथ संरेखित करते हैं।
आरंभ करने के लिए अभी चैट करें।