2010-02-11 11 views
17

से इनकार किया अनुमतियों मैं जब एक संग्रहीत प्रक्रिया मानकोंटेबल महत्वपूर्ण पैरामीटर त्रुटि

EXECUTE अनुमति ऑब्जेक्ट 'ValidationErrors पर मना कर दिया था के रूप में एक मेज महत्वपूर्ण पैरामीटर है कि बुला त्रुटि निम्न मिल पर अमल हो जाता है

CREATE TYPE [dbo].[ValidationErrors] AS TABLE(
    [ErrorMessage] [varchar](255) NOT NULL 
) 

उपयोगकर्ता संग्रहीत प्रक्रिया को क्रियान्वित करने संग्रहीत प्रक्रिया पर विशेषाधिकार पर अमल किया है: '

ValidationErrors एक TVP निम्नलिखित बयान के साथ बनाई गई है। हालांकि, मुझे अभी भी उपरोक्त त्रुटि मिलती है। कोई विचार?

उत्तर

32

मुझे लगता है कि आपको इस प्रकार के उपयोगकर्ता अनुमतियां भी प्रदान करने की आवश्यकता हो सकती है। प्रकार के लिए अनुमति देने के लिए

संदर्भ:
SQL 2005
SQL 2008

अद्यतन:
पुन: आप आप sproc पर अनुमतियाँ जब प्रकार पर अनुमति प्रदान करने के लिए है क्यों। मैं निश्चित कारण पता नहीं है, लेकिन BOL का कहना है:

sp_addtype का उपयोग कर द्वारा बनाई उपयोगकर्ता परिभाषित प्रकारों के विपरीत, सार्वजनिक डेटाबेस भूमिका स्वतः प्रकार है कि द्वारा बनाई गई हैं पर दें संदर्भ की अनुमति दे दी नहीं है CREATE प्रकार का उपयोग कर। यह अनुमति अलग से दी जानी चाहिए।

अद्यतन 2: अनुमतियाँ निष्पादित अनुदान के लिए, आप SSMS में इस चलाने चाहते हैं:

GRANT EXECUTE ON TYPE::dbo.ValidationErrors TO SomeUser; 
+0

मैंने ऑब्जेक्ट को "नियंत्रण" अनुमति दी और ऐसा लगता है कि यह ठीक काम कर रहा है। बस "संदर्भ" और "परिभाषा देखें" जोड़ना मदद नहीं करता था। व्यक्तिगत रूप से, मैं आवश्यकता को समझ नहीं पा रहा हूं क्योंकि यह एक प्रकार है और आम तौर पर जब संग्रहीत प्रक्रिया निष्पादन प्रदान किया जाता है, संदर्भित वस्तुओं को विशिष्ट अनुमतियों की आवश्यकता नहीं होती है। हालांकि, इस तथ्य के साथ कुछ ऐसा हो सकता है कि उपयोगकर्ता "सार्वजनिक" भूमिका में है। कोई विचार? – chiefbrownbotom

+0

क्या आपने EXECUTE अनुमतियां (नियंत्रण के बजाए) देने का प्रयास किया था? कोशिश कर सकते हैं कि – AdaTheDev

+2

को नियंत्रित करने से पहले मुझे एसक्यूएल प्रबंधन स्टूडियो से निष्पादित करने के लिए कोई जगह नहीं मिली। मैंने केवल उन लोगों को देखा जो मैंने ऊपर सूचीबद्ध किए हैं। क्या मुझे यह देने के लिए टी-एसक्यूएल का उपयोग करना है? – chiefbrownbotom

2

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

यह मेरे लिए काम किया RoleOrMember

को यह जो आपको आश्चर्य हो सकता है की तरह कुछ देखेंगे ...

DECLARE @p1 TABLE AS YourTableType 
INSERT INTO @p1 (col1, col2, col3) VALUES ('val1','val2','val3') 
INSERT INTO @p1 (col1, col2, col3) VALUES ('val1','val2','val3') 
... 
EXEC usp_YourStoredProc @p1 
1

अनुदान प्रकार :: schema.mytabletype पर नियंत्रण; ऊपर टिप्पणी में @chiefbrownbotom के लिए बहुत धन्यवाद।

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