SQL सर्वर प्रिंसिपल "dbo" मौजूद नहीं है,


192

मुझे निम्नलिखित त्रुटि प्राप्त हो रही है

Cannot execute as the database principal because the principal "dbo" 
does not exist, this type of principal cannot be impersonated,
or you do not have permission.

मैं इसके बारे में पढ़ता हूं ALTER AUTHORIZATION, लेकिन मुझे पता नहीं है कि यह किस डेटाबेस में हो रहा है। यह त्रुटि बहुत बार बाहर हो रही है, और हर दिन लगभग 1GB त्रुटि लॉग बढ़ता है।


1
यह शायद डीबीए साइट के लिए एक सवाल है, लेकिन यदि आप त्रुटि के बारे में अधिक जानकारी देते हैं, तो यह मदद करता है कि त्रुटि क्या है, यानी कमांड को निष्पादित नहीं किया जा सकता है। और इस प्रश्न सहित इस त्रुटि के लिए बहुत सारे खोज परिणाम हैं ; क्या आपने उन्हें देखा है और क्या वे आपकी स्थिति और विन्यास से किसी भी तरह से मेल खाते हैं?
१६:१२ पर पॉन्डलाइफ़

जवाबों:


410

मैंने डेटाबेस स्वामी को सेट करके इस समस्या को हल किया। इस मुद्दे से पहले मेरे डेटाबेस का कोई मालिक नहीं था। Sysadmin खाते के स्वामी को सेट करने के लिए अपने डेटाबेस में इस कमांड को निष्पादित करें:

use [YourDatabaseName] EXEC sp_changedbowner 'sa'

6
यहां देखें विस्तृत लेख: sqlserver-help.com/tag/…
orberkov

8
@hurleystylee, आपके समाधान ने वास्तव में मेरे लिए अच्छा काम किया। मेरे DB में एक मालिक btw था।
कीवान सदरलोदाबाई

मुझे भी यही समस्या आ रही है। मैंने @hurleystylee द्वारा निष्पादित क्वेरी को चलाने की कोशिश की है, लेकिन इसने कुछ भी नहीं किया। जब मैंने चेक किया dboथा तब भी db_owner था और मैं DBO को कुछ भी नहीं बता सकता था। यह वास्तव में निराशाजनक है। मैं एक चीज़ नहीं बदल सकता।
वरीमु मुरिगी

@hurleystylee कृपया संपादन पर विचार करें और उत्तर को पूरक करें ताकि लोगों को कमांड सिंटैक्स का पता लगाने के लिए टिप्पणियों को देखना न पड़े।
यूलिसिस अल्वेस

2
@hurleystylee हाँ, मैंने देखा कि उसने किया था। मुझे लगता है कि इस तरह जवाब अपने आप ही पूरा हो जाता है।
उलेइसेस अल्वेस

111

यहां छवि विवरण दर्ज करें

रेखांकन करें।

डेटाबेस राइट क्लिक -> गुण -> फाइलें -> डेटाबेस मालिक का चयन करें -> चयन [सा] - ठीक है


एक बार फिर इस उत्तर को वापस संदर्भित करके मेरी समस्या हल कर दी।
teapeng

बिल्कुल सही किया! धन्यवाद!
alejandrob

हमने DB को अलग SQL उदाहरण से पुनर्स्थापित किया था। मैंने इस कदम का पालन किया और यह काम किया .. धन्यवाद!
dotnetavalanche


11

यह तब भी हो सकता है जब डेटाबेस एक अलग SQL सर्वर या इंस्टेंस से पुनर्स्थापित होता है। उस स्थिति में, डेटाबेस में सुरक्षा प्रिंसिपल 'dbo' SQL सर्वर पर सुरक्षा प्रिंसिपल के समान नहीं है, जिस पर db को पुनर्स्थापित किया गया था। मुझसे मत पूछो कि मुझे यह कैसे पता है ...


क्या मैं आपसे पूछ सकता हूं कि इसे कैसे हल किया जाए? योग्य, ठीक यही मैं करने की कोशिश कर रहा हूं। अलग-अलग सर्वर के बीच डेटाबेस आरेखों को स्थानांतरित करें और फिर डेटाबेस को लागू करें। .Bak फ़ाइल आयात करने के बाद मुझे यह त्रुटि मिली और आरेख फ़ोल्डर को खोलने का प्रयास किया गया।
गनलिंगलर

1
अरे, यह मेरे लिए काम किया: dba.stackexchange.com/questions/50690/...
ironstone13

@ ironstone13 ने मेरे लिए काम नहीं किया। मुझे संदेश मिला कि मैं dbo
Wairimu Murigi

8

इसे करने का दूसरा तरीका

ALTER AUTHORIZATION 
ON DATABASE::[DatabaseName]
TO [A Suitable Login];

6

चयनित उत्तर और कुछ अन्य सभी अच्छे हैं। मैं सिर्फ एक अधिक SQL शुद्ध विवरण देना चाहता हूं। यह एक ही समाधान के लिए आता है कि कोई (वैध) डेटाबेस मालिक नहीं है।

डेटाबेस स्वामी खाता dboजो त्रुटि में वर्णित है, हमेशा डेटाबेस के साथ बनाया जाता है। तो यह अजीब लगता है कि यह मौजूद नहीं है, लेकिन आप दो चयनों (या एक लेकिन चलो इसे सरल रखें) के साथ जांच कर सकते हैं।

SELECT [name],[sid] 
FROM [DB_NAME].[sys].[database_principals]
WHERE [name] = 'dbo'

जो dboDB_NAME डेटाबेस में उपयोगकर्ता का SID दिखाता है और

SELECT [name],[sid] 
FROM [sys].[syslogins]

इस SQL ​​सर्वर आवृत्ति के लिए सभी लॉगिन (और उनके SID) दिखाने के लिए। ध्यान दें कि यह किसी भी db_name उपसर्ग को नहीं लिखा है, ऐसा इसलिए है क्योंकि हर डेटाबेस में उस दृश्य में समान जानकारी है।

तो ऊपर त्रुटि के मामले में SID के साथ लॉगिन नहीं होगा जो डेटाबेस dbo उपयोगकर्ता को सौंपा गया है।

जैसा कि ऊपर बताया गया है कि आमतौर पर दूसरे कंप्यूटर से डेटाबेस को पुनर्स्थापित करते समय होता है (जहां डेटाबेस और डीबो उपयोगकर्ता अलग-अलग लॉगिन द्वारा बनाए गए थे)। और आप स्वामित्व को मौजूदा लॉगिन में बदलकर इसे ठीक कर सकते हैं।


2

यदि उपरोक्त काम नहीं करता है, तो निम्न का प्रयास करें। इसने मेरे लिए समस्या का हल तब भी किया जब मालिक को डेटाबेस के लिए अच्छी तरह से परिभाषित किया गया था।

SQL Server 2008 प्रतिकृति के साथ विफल: प्रक्रिया 'sp_replcmds' निष्पादित नहीं कर सकी


0

सुरक्षा के तहत, प्रिंसिपल को "लॉगिन के बिना SQL उपयोगकर्ता" के रूप में जोड़ें, इसे प्रिंसिपल के समान नाम के साथ स्कीमा बनाएं और फिर सदस्यता में इसे db_owner बनाते हैं।


इसने SSMS 2017
Zimano

0

जब गलती से दर्पण में डेटाबेस कनेक्शन स्ट्रिंग - एक हा सेटअप में प्राथमिक डेटाबेस नहीं, तब भी यह त्रुटि थी।


0

जैसा कि संदेश ने कहा, आपको अपने उपयोगकर्ता के लिए स्वामी के रूप में अनुमति निर्धारित करनी चाहिए। तो आप निम्नलिखित का उपयोग कर सकते हैं:

ALTER AUTHORIZATION 
ON DATABASE::[YourDBName]
TO [UserLogin];

आशा है कि मददगार! टिप्पणी छोड़ें यदि यह आपके लिए ठीक है।

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