डेटाबेस 'मालिक' का उद्देश्य क्या है?


46

आज एक सर्विस ब्रोकर समस्या का निवारण करते समय, मुझे पता चला कि डेटाबेस मालिक एक कर्मचारी का विंडोज लॉगिन था, जिसने कंपनी छोड़ दी थी। उसका लॉगिन हटा दिया गया था और इस प्रकार क्वेरी सूचनाएं विफल हो रही थीं।

माना जाता है कि इससे निपटने के लिए सबसे अच्छा अभ्यास डेटाबेस के मालिक को 'सा' बनाना है। हमने इसे बदल दिया और इसने कतार को साफ कर दिया।

मेरा (बहुत प्राथमिक) प्रश्न: डेटाबेस मालिक क्या है और इसका उद्देश्य क्या है?


आपने डेटाबेस के मालिक को 'सा' में बदलने के बारे में कैसे जाना? मैं स्थानीय सरकार के लिए काम करने वाला एक जीआईएस टेक हूं। पुराने जीआईएस टेक को निकाल दिया गया था और यहां आसपास के बहुत कम लोग जीआईएस के बारे में ज्यादा जानते हैं। मैं खुद को डेटाबेस संपादित करने की अनुमति नहीं दे सकता क्योंकि मैं मालिक नहीं हूं। मैं स्वामित्व कैसे बदलूं?

जवाबों:


53

एक तरफ 'dbo' (एक उपयोगकर्ता) और 'db_owner' (एक निश्चित भूमिका) के डेटाबेस अवधारणाओं और दूसरी तरफ 'डेटाबेस मालिक' की उदाहरण अवधारणा के बीच कुछ भ्रम है। 'Dbo' और 'db_owner' को अक्सर 'डेटाबेस का मालिक' कहा जाता है। डेटाबेस के मालिक के बारे में जो आप पूछ रहे हैं, उसमें सर्वर प्रिंसिपल डेटाबेस का मालिक है।

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

चूंकि डेटाबेस एक सर्वर स्तर पर सुरक्षित है, जो इस प्रकार है कि यह डिफ़ॉल्ट रूप से, प्राथमिक प्रिंसिपल के स्वामित्व में होगा, जिसने क्रिएट डेटा स्टेट जारी किया था। अर्थात। दिवंगत कर्मचारी का एनटी लॉगिन।

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

मूल NT लॉगिन के स्वामित्व वाले एक securable (डेटाबेस) बनाने के कम से कम ज्ञात साइड इफेक्ट पहले कई जला दिया है। नियम प्रत्येक प्रतिभूतियों के लिए समान हैं, लेकिन कुछ कारक DATABASE स्वामी के मुद्दों को बढ़ाते हैं:

  • अन्य सर्वर स्तर सेक्युरेबल्स (समापन बिंदु, सर्वर भूमिका, लॉगिन) बहुत कम उपयोग किए जाते हैं, चारों ओर चले जाते हैं आदि।
  • डेटाबेस स्तर के प्रतिभूतियां आमतौर पर dbo(डेटाबेस प्रिंसिपल), या कुछ अन्य डेटाबेस प्रिंसिपल के स्वामित्व में होती हैं, और इस तरह मालिक डेटाबेस के साथ होते हैं
  • NT प्राथमिक प्रिंसिपल के लिए डेटाबेस स्वामित्व डिफ़ॉल्ट होने से एक समस्‍या का मुद्दा बनता है (स्वामी AD द्वारा प्रबंधित एक NT SID है और डेटाबेस फ़ाइलों के साथ यात्रा नहीं करता है, NT खाता अंगूठे का निशान आदि आदि हो सकता है)
  • सबसे महत्वपूर्ण बात: डेटाबेस के मालिक के पास महत्वपूर्ण दुष्प्रभाव हैं, विशेष रूप से EXECUTE AS context। यह बाद की समस्या है जो अधिकांश उपयोगकर्ताओं को जला देती है। चूंकि सेवा ब्रोकर EXECUTE AS का व्यापक उपयोग करता है (संदेश वितरण में एक अंतर्निहित EXECUTE AS संदर्भ है, साथ ही कतार सक्रियण जिसमें स्पष्ट है) आमतौर पर सेवा ब्रोकर उपयोगकर्ता हैं जो पहले इस समस्या का पता लगाते हैं।

BTW, Kudos अपनी मूल समस्या की जांच और ठीक करने के लिए :)


13

डेटाबेस ownerएक समय पहले (उचित) स्कीमा SQL SQL 2005 में शुरू किया गया था के लिए वापस फेंक का एक सा है।

मूल रूप से एक डेटाबेस मालिक डेटाबेस का डिफ़ॉल्ट dbo(डेटाबेस मालिक) होता है, डेटाबेस के साथ ही डेटाबेस ऑब्जेक्ट होता है

से SQL Server 2000 डॉक्स ...

वह dboउपयोगकर्ता है जिसने डेटाबेस में सभी गतिविधियों को करने के लिए अनुमतियाँ निहित की हैं।

SQL सर्वर के पुराने संस्करणों में, जब एक स्कीमा एक ऑब्जेक्ट को "खुद" नहीं कर सकती थी ( या यह कहा जाना चाहिए कि सभी ऑब्जेक्ट, टेबल, व्यू, आदि के स्वामित्व थे dboऔर कोई अन्य स्कीमा नहीं थे ) यह एक के लिए आवश्यक था "उपयोगकर्ता" इसे स्वयं करने के लिए ... यह यह कहे बिना जाना चाहिए कि कुछ को डेटाबेस की आवश्यकता क्यों है (या सामान्य रूप से अनुमतियाँ बल्कि मुश्किल होगी।)

इसलिए, SQL सर्वर (या उन्नत डेटाबेस) के पुराने संस्करणों में तकनीकी रूप से यह "फू" तालिका नहीं थी यह dboमालिक होने के साथ "dbo.Foo" तालिका थी ।

SQL सर्वर 2005 के आगमन के साथ आपके पास स्कीमा स्वामित्व वाली डेटाबेस ऑब्जेक्ट हो सकते हैं जैसे कि आपके पास "बार" नाम का एक स्कीमा है और "फू" नाम की तालिका ... यह इस bar.Fooप्रकार है ...

SELECT * FROM bar.Foo WHERE etc = 'blah`;

मुश्किल हिस्सा यह इस तथ्य के साथ आता है कि डेटाबेस बनाने वाला उपयोगकर्ता स्वचालित रूप से मालिक के रूप में सेट होता है जो कर्मचारी के साथ मुद्दों को आगे बढ़ाता है, आदि।

इसलिए इसे या तो saखाते में परिवर्तित करना सबसे अच्छा अभ्यास है , या शायद (मेरे अनुभव में) एक डोमेन खाते के लिए जिसे किसी संगठन के ऑप्स / आईटी टीम द्वारा प्रशासित किया जा सकता है।

यह लेख चीजों को करने के पुराने "मालिक" तरीके और नए "स्कीमा" आधारित स्वामित्व प्रणाली के बीच अंतर को विराम देता है।

मालिकों और स्कीमा के बीच के अंतर को समझने के लिए, आइए कुछ समय वस्तु स्वामित्व की समीक्षा करने में व्यतीत करें। जब कोई ऑब्जेक्ट SQL Server 2000 या उससे पहले बनाया जाता है, तो ऑब्जेक्ट का स्वामी होना चाहिए। ज्यादातर समय, मालिक "dbo" है, जिसे डेटाबेस के मालिक के रूप में भी जाना जाता है।


@RemusRusanu, 'स्कीमा बनाम स्वामी' उदाहरण का उपयोग कर रहा था, लेकिन यह समझने का एक साधन था कि 'मालिक' SQL सर्वर में अंतर्निहित क्यों है। मैं आपके उत्तर की सराहना करता हूँ! अच्छी तरह से कहा गया है ... हालांकि मैं इसे "इसलिए" इस उदाहरण / उत्तर को नीचा नहीं मानता हूं। :)
जस्टिन जेनकिंस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.