एक नियम के रूप में, यदि आप इस स्कीमा में ऑब्जेक्ट बनाना चाहते हैं, तो आपको स्पष्ट रूप सेdbo
स्कीमा निर्दिष्ट करना चाहिए ।
जैसा कि आप हैं db_owner
, आपका डिफ़ॉल्ट स्कीमा है dbo
, इसलिए जब आप ऑब्जेक्ट बनाते समय dbo स्कीमा निर्दिष्ट नहीं करते हैं तो कोई समस्या नहीं है। लेकिन अन्य (विंडोज) उपयोगकर्ताओं के लिए यह समान नहीं है।
आपके उपयोगकर्ता इसके सदस्य हैं Windows group
जिनका कोई डिफ़ॉल्ट स्कीमा नहीं है। इस मामले में संबंधित उपयोगकर्ता और स्कीमा तब बनाए जाते हैं जब उपयोगकर्ता कोई वस्तु बनाता है, इसे यहां प्रलेखित किया गया है: क्रीएट स्कीमा (लेनदेन-एसक्यूएल)
इंप्लिक्ट स्कीम्स एंड यूजर क्रिएशन
कुछ मामलों में एक उपयोगकर्ता डेटाबेस उपयोगकर्ता खाते (डेटाबेस में एक डेटाबेस प्रिंसिपल) के बिना एक डेटाबेस का उपयोग कर सकता है। यह निम्नलिखित स्थितियों में हो सकता है:
एक लॉगिन नियंत्रण सर्वर विशेषाधिकार है।
एक विंडोज उपयोगकर्ता के पास एक व्यक्तिगत डेटाबेस उपयोगकर्ता खाता (डेटाबेस में एक डेटाबेस प्रिंसिपल) नहीं होता है, लेकिन एक डेटाबेस को विंडोज समूह के एक सदस्य के रूप में एक्सेस करता है जिसका डेटाबेस उपयोगकर्ता खाता (विंडोज समूह के लिए एक डेटाबेस प्रिंसिपल) होता है।
जब एक डेटाबेस उपयोगकर्ता खाते के बिना एक उपयोगकर्ता किसी मौजूदा स्कीमा को निर्दिष्ट किए बिना एक ऑब्जेक्ट बनाता है, तो डेटाबेस प्रिंसिपल और डिफ़ॉल्ट स्कीमा स्वचालित रूप से उस उपयोगकर्ता के लिए डेटाबेस में बनाया जाएगा। निर्मित डेटाबेस प्रिंसिपल और स्कीमा का वही नाम होगा जो उस उपयोगकर्ता के नाम का होता है जो SQL सर्वर से कनेक्ट करते समय उपयोग किया जाता है (SQL सर्वर प्रमाणीकरण लॉगिन नाम या विंडोज उपयोगकर्ता नाम)।
यह व्यवहार उन उपयोगकर्ताओं को अनुमति देने के लिए आवश्यक है जो विंडोज समूहों पर आधारित हैं और ऑब्जेक्ट बनाने के लिए। हालाँकि यह स्कीमा और उपयोगकर्ताओं के अनजाने निर्माण में परिणाम कर सकता है। जब भी संभव हो स्पष्ट रूप से डेटाबेस प्रिंसिपल बनाएं और डिफ़ॉल्ट स्कीमा असाइन करें। या दो या तीन-भाग ऑब्जेक्ट नाम का उपयोग करके डेटाबेस में ऑब्जेक्ट्स बनाते समय एक मौजूदा स्कीमा को स्पष्ट रूप से बताएं।
समस्या को हल करने के लिए सभी योर उपयोगकर्ता-विंडोज समूहों के dbo
रूप में स्कीमा निर्दिष्ट करें default schema
या ऑब्जेक्ट बनाते समय स्कीमा को स्पष्ट रूप से लिखें। हमेशा।