2009-07-16 17 views
31

में त्रुटि मेरे पास डेटाबेस है और डेटाबेस के "उत्पाद" नामक तालिका में कुछ फ़ील्ड जोड़ने के लिए एक एसक्यूएल स्क्रिप्ट है। यह क्यों त्रुटि हो गई हैऑब्जेक्ट नहीं ढूंढ सकता क्योंकि यह अस्तित्व में नहीं है या आपके पास अनुमति नहीं है, SQL सर्वर

Cannot find the object "Products" because it does not exist or you do not have permissions 

और मैं इसे हल करने के लिए क्या करना चाहिए:

लेकिन जब मैं इस स्क्रिप्ट पर कार्य कर रहा हूँ, मैं निम्नलिखित त्रुटि हो रही है?

+0

है जो *** एसक्यूएल स्क्रिप्ट *** है? – Kiquenet

+0

यह अनुमतियों से संबंधित हो सकता है। क्या उपयोगकर्ता db_owner भूमिका का सदस्य है? – Tarzan

उत्तर

54

क्या आप वाकई सही डेटाबेस के खिलाफ स्क्रिप्ट निष्पादित कर रहे हैं? एसक्यूएल सर्वर प्रबंधन स्टूडियो में आप डेटाबेस आप टूलबार में से एक पर एक ड्रॉप-डाउन बॉक्स में के खिलाफ क्वेरी चल रहे हैं बदल सकते हैं, या आप इस के साथ आपकी क्वेरी शुरू कर सकते हैं:

USE SomeDatabase 
5

उपयोगकर्ता आप कर रहे हैं क्या इस स्क्रिप्ट को निष्पादित करने के तहत उस तालिका को भी देख रहा है ??

select top 1 * from products 

क्या आपको इसके लिए कोई आउटपुट मिलता है ??

यदि हां: क्या इस उपयोगकर्ता को तालिका को संशोधित करने की अनुमति है, यानी ALTER TABLE आदि जैसी डीडीएल स्क्रिप्ट निष्पादित करें? आम तौर पर, नियमित उपयोगकर्ताओं के पास यह उन्नत अनुमतियां नहीं होती हैं।

1

आप प्रक्रिया पर राइट क्लिक कर सकते हैं, गुणों का चयन कर सकते हैं और देख सकते हैं कि आपकी लॉगिन आईडी में कौन सी अनुमतियां दी गई हैं। फिर आप "निष्पादन" मैन्युअल रूप से जांच सकते हैं और proc के लिए अनुमति बदल सकते हैं।

या स्क्रिप्ट को यह यह होगा:

GRANT EXECUTE ON OBJECT::dbo.[PROCNAME] 
    TO [ServerInstance\user]; 

GRANT ALTER ON OBJECT::dbo.[PROCNAME] 
    TO [ServerInstance\user]; 
+0

प्रक्रिया चल रही है ... समस्या तालिका तक पहुंच है, प्रक्रिया नहीं। –

46

मैं एक कारण है क्यों यह होगा मिल गया। उपयोगकर्ता उपयुक्त अनुमतियों की थी, लेकिन संग्रहीत प्रक्रिया एक TRUNCATE बयान शामिल हैं:

TRUNCATE TableName

के बाद से TRUNCATE प्रवेश के बिना आइटम को हटा देता है, तो आप (जाहिरा तौर पर) ऊंचा अनुमतियाँ जरूरत है एक संग्रहीत प्रक्रिया है कि इसमें निष्पादित करने के लिए। हम करने के लिए बयान बदल दिया है:

TableName

से हटा दें ... और त्रुटि दूर चला गया!

+1

ट्रंकेट स्टेटमेंट भी मेरे लिए एक मुद्दा था। इसे छंटनी के लिए उचित अनुमतियां जोड़ना। – Andrew

+2

यह एक एसक्यूएल सर्वर बग के रूप में लॉग किया जाना चाहिए। त्रुटि संदेश "ऑब्जेक्ट एक्स नहीं ढूंढ सकता ..." लेकिन समस्या x से भिन्न ऑब्जेक्ट की अनुमतियों से संबंधित है। नहीं, त्रुटि संदेश नहीं है "ऑब्जेक्ट एक्स नहीं मिला क्योंकि यह अस्तित्व में नहीं है। या, आपके पास अनुमति नहीं है।"। यद्यपि यह अस्तित्वहीन त्रुटि संदेश एक सुराग का थोड़ा और अधिक दे सकता है, फिर भी यह एक त्रुटि संदेश के रूप में उपयोगी नहीं है जो अनुमति समस्या के साथ सही वस्तु को इंगित करता है। – Sam

+0

यह मेरी समस्या थी - यह मेरे स्थानीय उपयोगकर्ता से पूरी तरह से काम करता था, लेकिन उत्पादन वातावरण में सेवा-खाते का उपयोग नहीं करता - धन्यवाद! – Harpunius

2

यह भी संभव हो सकता है कि आप अपनी प्रवेश स्कीमा में "उत्पाद" बनाया है और आप कदम इस मुद्दे

को हल करने के लिए एक अलग स्कीमा (शायद DBO)

में एक ही निष्पादित करने के लिए कोशिश कर रहे थे 1) प्रबंधन स्टूडियो खोलें 2) ऑब्जेक्ट को एक्सप्लोरर में ढूंढें और उस स्कीमा की पहचान करें जिसके अंतर्गत आपकी ऑब्जेक्ट है? (यह आपके ऑब्जेक्ट नाम से पहले टेक्स्ट है)। अपने "dbo" और मेरे वस्तु नाम के नीचे छवि में कार्रवाई स्थिति

highlighted part is schema name

है अगर आपको ऐसा लगता है कि "yourcompanydoamin \ yourloginid" देख तो आप चाहिए आप अनुमति है जो विशिष्ट स्कीमा पर संशोधित करने और नहीं कर सकता कोई अन्य स्कीमा।

आप इस तरह के [dbo.Product] बजाय [dbo].[Product] के रूप में एक मेज संदर्भित लिखने में कोई गलती की वजह से "Ownership and User-Schema Separation in SQL Server"

2

यह भी हो सकता है का उल्लेख कर सकते।

0

मेरे मामले में मैं एक मैं उम्मीद कर रहा था की तुलना में एक अलग उपयोगकर्ता के तहत चल रहा था।

मैं कनेक्शन स्ट्रिंग मैं pypyodbc.connect() के लिए पारित रूप में 'DRIVER={SQL Server};SERVER=...;DATABASE=...;Trusted_Connection=false;User Id=XXX;Password=YYY' था, लेकिन कनेक्शन अभी भी Windows उपयोगकर्ता है कि स्क्रिप्ट चलाने के क्रेडेंशियल्स का उपयोग किया गया था (मैं इस एसक्यूएल सर्वर प्रोफाइलर का उपयोग कर और गलत uid/पासवर्ड संयोजन की कोशिश कर रहा द्वारा सत्यापित - जिसके परिणामस्वरूप अपेक्षित त्रुटि नहीं हुई)।

मैं आगे इस में खुदाई करने के लिए नहीं करने का फैसला, समस्या का समाधान हो जोड़ने का यह बेहतर तरीका का उपयोग करने जा के बाद से:

conn = pypyodbc.connect(driver='{SQL Server}', server='servername', database='dbname', uid='userName', pwd='Password') 
0

मैं ठेस से एक मेज कॉपी करने के लिए देव लेकिन एक त्रुटि प्राप्त करने की कोशिश कर रहा है: "ऑब्जेक्ट एक्स नहीं मिला क्योंकि यह अस्तित्व में नहीं है या आपके पास अनुमति नहीं है।"

हालांकि, तालिका मौजूद था, और इसलिए मैं अनुमतियाँ किया मैं सा के रूप में चल रहा था।

समस्या वास्तव में CONTRAINTS के साथ थी। मैं पुराने_XXX महीने पहले DEV पर तालिका का नाम बदलूंगा। लेकिन जब मैंने प्रोडी से मूल एक को कॉपी करने की कोशिश की, तो Defaut Constraint नामों का संघर्ष हुआ।

त्रुटि संदेश

+1

आपको अपने उत्तर को समझने में आसान बनाने के लिए कुछ प्रतिलिपिबद्ध कोड जोड़ना चाहिए। –

+0

क्षमा करें, मैं केवल एसएसआईएस जीयूआई का उपयोग करता हूं। क्या स्क्रीनशॉट के गुच्छा के बिना इसे व्यक्त करने का कोई तरीका है? –

संबंधित मुद्दे

 संबंधित मुद्दे