अतिरेक की जांच करने के लिए उन्हें छोड़ने के बिना तालिकाओं को कैसे छिपाया / अक्षम किया जाए?


12

मुझे एक पुरानी विरासत प्रणाली को बनाए रखना है और विस्तारित करना है जिसमें webservice विधियां और डेटाबेस टेबल शामिल हैं जो अब उपयोग नहीं किए जाते हैं। चूंकि मुझे पूरी तरह से यकीन नहीं है कि टेबल वास्तव में बेमानी हैं, इसलिए मैं उन्हें छोड़ने से डरता हूं।

क्या उन्हें छोड़ने के बिना एक ही प्रभाव प्राप्त करने के लिए कोई अन्य तरीका है (तालिकाओं का उपयोग किसी भी अधिक नहीं किया जा सकता है)? मेरा विचार उन्हें Deletedवर्तमान डिफ़ॉल्ट से एक अलग स्कीमा (जैसे ) में स्थानांतरित करना था dbo

IF NOT EXISTS (SELECT * FROM sys.schemas WHERE name = 'Deleted')
BEGIN
   EXEC('CREATE SCHEMA Deleted')
END

ALTER SCHEMA Deleted TRANSFER dbo.TableName;

क्या कोई अन्य विकल्प है या स्कीमा दृष्टिकोण में कोई कमियां हैं?

जवाबों:


7

क्या उन्हें प्राप्त करने के बिना समान (तालिकाओं का उपयोग अब और नहीं किया जा सकता) प्राप्त करने का कोई अन्य तरीका है?

एक स्कीमा परिवर्तन एक बहुत तेज़ संचालन है - बस मेटाडेटा परिवर्तन की आवश्यकता है। मूल विचार मुझे आरोन बर्ट्रेंड के ब्लॉग - स्कीमा स्विच-ए-रूओ से मिला था ।

आप मेरे उत्तर के चरणों का अनुसरण कर सकते हैं

जाहिर है कि वहाँ अन्य तरीके हैं जैसे कि sp_rename N'old table ', N'new table' या केवल तालिका के लिए अनुमतियाँ अस्वीकृत हैं।


मुझे यकीन नहीं था कि मुझे क्या जवाब देना चाहिए क्योंकि सभी मददगार हैं। मैं हारून के लेख को नहीं जानता था, इसलिए मैंने इसे स्वीकार कर लिया है क्योंकि इसमें अधिक informations हैं (भले ही केवल लिंक हो)।
टिम श्मेल्टर

@TimSchmelter खुशी है कि आपने इसे उपयोगी पाया। यहां यह दोहराने का कोई मतलब नहीं है कि लेख या मेरा उत्तर (जुड़ा हुआ) क्या है। इसीलिए मैंने इसका संदर्भ दिया है।
परिजन शाह १

12

कुछ अन्य विकल्पों में सिर्फ तालिकाओं का नाम बदलना है, या यदि उनके पास अनुक्रमित अनुक्रमित हैं, तो आप संकुल सूचकांक को अक्षम कर सकते हैं।


धन्यवाद। मुझे नहीं पता था कि क्लस्टर किए गए इंडेक्स को अक्षम करना तालिका को अनुपयोगी बनाता है। इन दृष्टिकोणों (+ स्कीमा) के पेशेवरों और विपक्ष क्या हैं?
टिम श्मेल्टर

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

किसी तालिका को छोड़ने से पहले, या किसी तालिका से स्तंभ को छोड़ने से पहले, मैं अक्सर "_deprecated" या कुछ ऐसे नाम को जोड़कर नाम बदल देता हूं। फिर अगर कोई त्रुटि नहीं है, तो इसे संदर्भित करने के लिए कुछ भी नहीं होना चाहिए।
जय

अनुमतियाँ परिवर्तन अस्थिर हैं। यदि किसी एप्लिकेशन को चलाने वाला सेवा खाता डीबीओ, या उससे भी बदतर sysadmin है, तो यह किसी भी प्रकार के DENY को पूरी तरह से अनदेखा कर देगा। उम्मीद है कि वे नहीं हैं, लेकिन ऐसा होता है।
केनेथ फिशर

6

भूमिका (s) / समूह (s) / खाता (खातों) की तालिका से अनुमतियों को हटा दें जो [हो सकता है] इसका उपयोग कर रहे हों।

अगर कुछ भी ऊपर उड़ता है, तो उन्हें वापस रखो [जल्दी से]।

संकेत: इन परिवर्तनों को करने के लिए स्क्रिप्ट का उपयोग करना वास्तव में, वास्तव में अच्छा विचार होगा।


एक गैर-उत्पादन डेटाबेस पर परीक्षण के रूप में। ;) उम्मीद है, यह ओपी के लिए स्पष्ट था, यद्यपि।
jpmc26

@ jpmc26। मैं पहले एक गैर-उत्पादन डेटाबेस में परीक्षण करूंगा। लेकिन समस्या यह है कि मैं यह जानना चाहता हूं कि क्या फ़ंक्शंस या डेटाबेस ऑब्जेक्ट्स का उपयोग बाहर से किया जाता है (न केवल webservice विधियों के माध्यम से, बल्कि सीधे डेटाबेस या कंपनी के अन्य स्थानों में व्यवस्थापक टूल पर भी)।
टिम श्मेल्टर

हम्म। यदि आप डीबीए द्वारा सीधे डीबी पहुंच की तलाश कर रहे हैं, तो ऐसा लगता है कि लॉगिंग क्रम में है। यह बहुत संभव नहीं हो सकता है कि आप मैनुअल और काम से गैर-ठेस में एक ही उपयोग देखेंगे। मुझे वास्तव में यकीन नहीं है कि इन ऑपरेशनों को लॉग करना कितना आसान होगा, लेकिन यदि आपके पास ठेस में लॉग था, तो आप इसका उपयोग करने के लिए विश्लेषण कर सकते हैं।
jpmc26

@ jpmc26: यह ठीक है अगर उन लोगों के चेहरे पर कमियां आएंगी, तो वे इसकी रिपोर्ट करेंगे। ग्राहकों के साथ ठीक नहीं है, लेकिन यह रोलआउट से पहले परीक्षण प्रणाली पर जाँच की जा सकती है।
टिम श्मेल्टर

3

अनुमतियाँ निकालना आम तौर पर काम नहीं करने वाला है क्योंकि आप CERTAIN नहीं हो सकते हैं कि किसी के पास अनुमतियां नहीं हैं। संभवतः एक समूह, भूमिका या यहां तक ​​कि क्योंकि वे sysadmin हैं (हालांकि चलो आशा नहीं है)।

तालिकाओं के लिए आप उन्हें अक्षम कर सकते हैं। और यह एक त्वरित प्रक्रिया है। हालाँकि उन्हें सक्षम करने के लिए आपको उनका पुनर्निर्माण करना होगा और एक बड़ी तालिका के लिए जो आपको काफी समय लग सकता है।

आपका सर्वश्रेष्ठ दांव ऑब्जेक्ट को एक नए स्कीमा में ले जाने वाला है (जैसा कि आपने सुझाव दिया है) या ऑब्जेक्ट को फिर से नाम दें। ये दोनों ऑपरेशन त्वरित और आसान दोनों हैं और पूर्ववत करने के लिए। दोनों दिशाओं में अनुमतियां भी यथावत रहेंगी।

एक अतिरिक्त कदम जो आप उठा सकते हैं वह है ऑब्जेक्ट के विस्तारित गुणों में "टीबीडी नोट" जोड़ना । जब आपने परिवर्तन किया है, और / या आपके पास ऐसा कोई भी नोट हो सकता है जिस पर आपको लगता है कि इससे छुटकारा पाना सुरक्षित है।

सभी ने कहा कि मैं कुछ दिनों के लिए एक विस्तारित ईवेंट सत्र (या प्रोफाइलर ट्रेस) चलाऊंगा ताकि यह सुनिश्चित हो सके कि आपके पास उपयोग की जाने वाली सभी वस्तुएँ हैं। आप सत्र को केवल ऑब्जेक्ट नाम तक सीमित कर सकते हैं और जब इसे ओवरहेड को कम करने के लिए स्पर्श किया गया था। यह भी सुनिश्चित करें कि आप महीने के अंत के दोनों ओर कुछ दिनों के लिए इस सत्र को चलाते हैं और संभवतः तिमाही का अंत भी सुनिश्चित करें कि आपके पास सब कुछ है।


3

फिल डब्ल्यू सुझाव के अनुसार अनुमतियों को हटा दें।

तालिकाओं का उपयोग करने वाली किसी भी संग्रहीत कार्यविधि से अनुमतियाँ भी निकालें। SQL सर्वर में, (मैं दूसरों के बारे में नहीं जानता) अनुमतियाँ कॉलिंग ऑब्जेक्ट (जैसे संग्रहीत कार्यविधि) से कॉल की गई वस्तु (जैसे तालिका) के लिए जंजीर से जकड़ी हुई हैं।


कार्य सभी उपकरण, फ़ंक्शंस, ऑब्जेक्ट, क्वेरीज़ (यहां तक ​​कि दूरस्थ डेटाबेस में) को विफल करने देना था जो इन तालिकाओं तक पहुंचने का प्रयास करते हैं। अगर मुझे एक संग्रहित प्रक्रिया को संशोधित करना है, तो मुझे पहले से ही यह जानना होगा कि यह इसका उपयोग करता है। या क्या यह निर्धारित करने का कोई सरल तरीका है कि एक संग्रहीत प्रक्रिया द्वारा तालिका का उपयोग किया जाता है?
टिम श्मेल्टर

मैंने संग्रहीत प्रक्रिया को संशोधित करने का सुझाव नहीं दिया, केवल इसकी EXECUTE अनुमति को हटा दिया। जैसा कि आप कहते हैं, यदि आवश्यक हो तो अनुमति को बहाल करना आसान है। आप देख सकते हैं कि किसी संग्रहीत कार्यविधि द्वारा तालिकाओं का उपयोग क्या किया जाता है: SQL सर्वर प्रबंधन स्टूडियो, ऑब्जेक्ट एक्सप्लोरर में, अपने डेटाबेस का चयन करें -> प्रोग्रामबिलिटी -> संग्रहीत कार्यविधियाँ। एक स्प्रो नाम पर राइट-क्लिक करें और दृश्य निर्भरता चुनें। उन वस्तुओं का चयन करें जिन पर [स्प्रो नाम] निर्भर करता है।
पीटर बिल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.