SQL सर्वर में, आप किसी दृश्य को पहली बार बनाते समय एन्क्रिप्ट कर सकते हैं, या आप एन्क्रिप्शन को शामिल करने के लिए बाद में इसे बदल सकते हैं।
टी-एसक्यूएल के साथ एक दृश्य बनाने के लिए, आप CREATE VIEW
का उपयोग करते हैं वाक्य - विन्यास। इसे एन्क्रिप्ट करने के लिए, आप WITH ENCRYPTION
जोड़ें तर्क।
ALTER VIEW
. का उपयोग करते समय आप मौजूदा दृश्य को एन्क्रिप्ट करने के लिए भी इसी तर्क का उपयोग कर सकते हैं ।
एन्क्रिप्टेड व्यू का टेक्स्ट किसी भी कैटलॉग व्यू में सीधे तौर पर दिखाई नहीं देता है। इसलिए, दृश्य की परिभाषा को उन उपयोगकर्ताओं द्वारा नहीं देखा जा सकता है जिनके पास सिस्टम टेबल या डेटाबेस फ़ाइलों तक पहुंच नहीं है।
WITH ENCRYPTION
का उपयोग करना दृश्य को SQL सर्वर प्रतिकृति के भाग के रूप में प्रकाशित होने से भी रोकता है।
उदाहरण 1 - एक एन्क्रिप्टेड दृश्य बनाएं
एन्क्रिप्टेड दृश्य बनाने का एक उदाहरण यहां दिया गया है।
CREATE VIEW dbo.v_Cats WITH ENCRYPTION AS SELECT CatId, CatName, Phone FROM dbo.Cats; GO
इसे एन्क्रिप्ट करने का हिस्सा है WITH ENCRYPTION
. अगर मैं इसे एन्क्रिप्ट नहीं करना चाहता तो मैं उस तर्क को आसानी से हटा सकता था।
उस दृश्य को बनाने के बाद, अब जब मैं sys.sql_modules
. का उपयोग करता हूं सिस्टम कैटलॉग दृश्य इसकी परिभाषा देखने के लिए, मुझे NULL मिलता है।
SELECT definition FROM sys.sql_modules WHERE object_id = OBJECT_ID('dbo.v_Cats');
परिणाम:
+--------------+ | definition | |--------------| | NULL | +--------------+
मुझे (बहिष्कृत) sys.syscomments
. के साथ एक ही परिणाम मिलता है कैटलॉग व्यू।
SELECT text FROM sys.syscomments WHERE id = OBJECT_ID('v_Cats');
परिणाम:
+--------+ | text | |--------| | NULL | +--------+
मुझे एक समान परिणाम मिलता है, भले ही मैं किस टी-एसक्यूएल पद्धति का उपयोग दृश्य की परिभाषा प्राप्त करने का प्रयास करने के लिए करता हूं।
और जब मैं दृश्य को स्क्रिप्ट करने का प्रयास करता हूं तो मुझे Azure डेटा स्टूडियो में त्रुटि संदेश मिलता है:
No script was returned when scripting as Create on object View
और अगर मैं इसे SSMS, DBeaver, या किसी अन्य GUI डेटाबेस प्रबंधन सॉफ़्टवेयर में देखने का प्रयास करता तो मुझे एक समान संदेश मिलता।
उदाहरण 2 - मौजूदा दृश्य में एन्क्रिप्शन जोड़ें
यदि आप किसी मौजूदा दृश्य को एन्क्रिप्ट करना चाहते हैं, तो ALTER VIEW
. का उपयोग करें एक ही परिभाषा के साथ। दूसरे शब्दों में, मैं पहला उदाहरण ले सकता हूं, और CREATE
. को प्रतिस्थापित कर सकता हूं ALTER
. के साथ ।
ALTER VIEW dbo.v_Cats WITH ENCRYPTION AS SELECT CatId, CatName, Phone FROM dbo.Cats; GO
यह स्पष्ट रूप से मानता है कि शेष दृश्य की परिभाषा बिल्कुल मौजूदा दृश्य के समान है।
यह सुनिश्चित करने का सबसे आसान तरीका है कि आप एक ही परिभाषा का उपयोग कर रहे हैं, यदि यह मौजूद है, तो "स्क्रिप्ट ऐज़ ऑल्टर" विकल्प का उपयोग करके मौजूदा दृश्य को स्क्रिप्ट करने के लिए अपने GUI टूल का उपयोग करना है। अन्यथा आप "स्क्रिप्ट के रूप में बनाएँ" का उपयोग कर सकते हैं, फिर जब परिभाषा दिखाई देती है, तो बदलें CREATE
ALTER
. के साथ .
यदि आपके पास केवल एक कमांड लाइन इंटरफ़ेस है, तो आप sys.sql_modules
. को क्वेरी कर सकते हैं मौजूदा परिभाषा प्राप्त करने के लिए देखें (जैसे पिछले उदाहरण में)। फिर आप परिभाषा को कॉपी कर सकते हैं और CREATE
. को बदल सकते हैं ALTER
. के साथ ।
एक बार ऐसा करने के बाद, आप WITH ENCRYPTION
जोड़ सकते हैं और इसे फिर से चलाएँ।
उदाहरण 3 - अनेक गुण जोड़ना
एन्क्रिप्शन कई विशेषताओं में से एक है जिसे आप अपने विचार की परिभाषा में शामिल कर सकते हैं। यदि आपको एकाधिक विशेषताओं को निर्दिष्ट करने की आवश्यकता है, तो उन्हें अल्पविराम से अलग करें।
उदाहरण के लिए, यदि आप एन्क्रिप्शन का उपयोग करना चाहते हैं और आप स्कीमा बाइंडिंग निर्दिष्ट करना चाहते हैं, तो आपको इन्हें अल्पविराम से अलग की गई सूची के रूप में जोड़ना होगा।
ALTER VIEW dbo.v_Cats WITH ENCRYPTION, SCHEMABINDING AS SELECT CatId, CatName, Phone FROM dbo.Cats; GO