मेरे सहयोगी को अपना स्कीमा कैसे मिला?


14

मेरे पास एक संग्रहीत प्रक्रिया है:

  • जाँचता है कि क्या कोई तालिका मौजूद है और यदि हां, तो उसे छोड़ देता है।
  • उस तालिका को फिर से बनाता है
  • फिर उस तालिका को लगभग 30 प्रश्नों से भरता है।

जब मैं (DB Owner) इस proc को रन करता हूं, तो सब कुछ इच्छानुसार काम करता है। जब मेरा सहकर्मी ऐसा करता है, जिसके पास सक्रिय निर्देशिका में भूमिका के माध्यम से इस डेटाबेस पर डीआरओपी / सृजन अधिकार हैं, तो कई चीजें गलत हो जाती हैं। मेरा मन क्या है?

तालिका के निर्माण में dboनाम से पहले स्कीमा स्पष्ट रूप से निर्दिष्ट नहीं था । इसके परिणामस्वरूप तालिका नामक domain\cowork_id.table_name_hereतालिका बनाई गई। उस तालिका के अलावा उनके व्यक्तिगत स्कीमा में भी बनाया जा रहा है, अब उनके पास डेटाबेस पर भी वह स्कीमा है (यह खरीद को चलाने से पहले नहीं देखा गया)।

क्या हुआ? SQL सर्वर उपयोगकर्ता के स्कीमा में तालिकाएँ क्यों बनाता है इसके बजाय dboजब वह निर्दिष्ट नहीं है?


जवाबों:


26

एक नियम के रूप में, यदि आप इस स्कीमा में ऑब्जेक्ट बनाना चाहते हैं, तो आपको स्पष्ट रूप सेdbo स्कीमा निर्दिष्ट करना चाहिए ।

जैसा कि आप हैं db_owner, आपका डिफ़ॉल्ट स्कीमा है dbo, इसलिए जब आप ऑब्जेक्ट बनाते समय dbo स्कीमा निर्दिष्ट नहीं करते हैं तो कोई समस्या नहीं है। लेकिन अन्य (विंडोज) उपयोगकर्ताओं के लिए यह समान नहीं है।

आपके उपयोगकर्ता इसके सदस्य हैं Windows groupजिनका कोई डिफ़ॉल्ट स्कीमा नहीं है। इस मामले में संबंधित उपयोगकर्ता और स्कीमा तब बनाए जाते हैं जब उपयोगकर्ता कोई वस्तु बनाता है, इसे यहां प्रलेखित किया गया है: क्रीएट स्कीमा (लेनदेन-एसक्यूएल)

इंप्लिक्ट स्कीम्स एंड यूजर क्रिएशन

कुछ मामलों में एक उपयोगकर्ता डेटाबेस उपयोगकर्ता खाते (डेटाबेस में एक डेटाबेस प्रिंसिपल) के बिना एक डेटाबेस का उपयोग कर सकता है। यह निम्नलिखित स्थितियों में हो सकता है:

एक लॉगिन नियंत्रण सर्वर विशेषाधिकार है।

एक विंडोज उपयोगकर्ता के पास एक व्यक्तिगत डेटाबेस उपयोगकर्ता खाता (डेटाबेस में एक डेटाबेस प्रिंसिपल) नहीं होता है, लेकिन एक डेटाबेस को विंडोज समूह के एक सदस्य के रूप में एक्सेस करता है जिसका डेटाबेस उपयोगकर्ता खाता (विंडोज समूह के लिए एक डेटाबेस प्रिंसिपल) होता है।

जब एक डेटाबेस उपयोगकर्ता खाते के बिना एक उपयोगकर्ता किसी मौजूदा स्कीमा को निर्दिष्ट किए बिना एक ऑब्जेक्ट बनाता है, तो डेटाबेस प्रिंसिपल और डिफ़ॉल्ट स्कीमा स्वचालित रूप से उस उपयोगकर्ता के लिए डेटाबेस में बनाया जाएगा। निर्मित डेटाबेस प्रिंसिपल और स्कीमा का वही नाम होगा जो उस उपयोगकर्ता के नाम का होता है जो SQL सर्वर से कनेक्ट करते समय उपयोग किया जाता है (SQL सर्वर प्रमाणीकरण लॉगिन नाम या विंडोज उपयोगकर्ता नाम)।

यह व्यवहार उन उपयोगकर्ताओं को अनुमति देने के लिए आवश्यक है जो विंडोज समूहों पर आधारित हैं और ऑब्जेक्ट बनाने के लिए। हालाँकि यह स्कीमा और उपयोगकर्ताओं के अनजाने निर्माण में परिणाम कर सकता है। जब भी संभव हो स्पष्ट रूप से डेटाबेस प्रिंसिपल बनाएं और डिफ़ॉल्ट स्कीमा असाइन करें। या दो या तीन-भाग ऑब्जेक्ट नाम का उपयोग करके डेटाबेस में ऑब्जेक्ट्स बनाते समय एक मौजूदा स्कीमा को स्पष्ट रूप से बताएं।

समस्या को हल करने के लिए सभी योर उपयोगकर्ता-विंडोज समूहों के dboरूप में स्कीमा निर्दिष्ट करें default schemaया ऑब्जेक्ट बनाते समय स्कीमा को स्पष्ट रूप से लिखें। हमेशा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.