58

मैं एसक्यूएल सर्वर 2008उपयोगकर्ता द्वारा परिभाषित तालिका प्रकारों पर EXECUTE अनुमति अस्वीकार कर दी गई है?

में User-Defined Table Types बारे में एक प्रश्न हम एसक्यूएल सर्वर 2008 पर हमारे अपने टेबल प्रकार परिभाषित ASP.NET अनुप्रयोग में से एक की जरूरत उन्हें संग्रहित प्रक्रियाओं में पैरामीटर के रूप में उपयोग करने के लिए के लिए है (जब

The EXECUTE permission was denied on the object 'ourTableType', database 'ourDatabase', schema 'ourSchema'.

: ASP.NET अनुप्रयोग में एसक्यूएल कमांड को क्रियान्वित हम है कि जब हम ASP.NET से Sql आदेश (संग्रहीत प्रक्रिया निष्पादित) चलाने के हम कोई त्रुटि मिलती है संग्रहीत प्रक्रिया के लिए पैरामीटर see here for an example)

समस्या यह है के रूप में DataTable ऑब्जेक्ट पारित

ऐसा क्यों है? हमें उपयोगकर्ता द्वारा परिभाषित तालिका प्रकारों पर अनुमति सेट करने की आवश्यकता क्यों है? संग्रहीत प्रक्रिया पर केवल अनुमति सेट करने के लिए पर्याप्त क्यों नहीं है? और अगर हमें इसे सेट करना है, तो कोई फर्क नहीं पड़ता कि, EXECUTE कोई भी गुण विंडो में सेट करने के लिए अनुमति प्रकार क्यों नहीं है (मैं केवल Control, References, Take Ownership, View Definition देख सकता हूं)?

मुझे यह भी समझ में नहीं आता है कि गुण विंडो में Control पर सेटिंग अनुमति हल करती है और संग्रहीत प्रक्रिया बिना किसी समस्या के चलती है।

+3

संभव डुप्लिकेट ([एक संग्रहीत प्रक्रिया में टेबल महत्वपूर्ण पैरामीटर अनुमतियां अस्वीकृत त्रुटि पर अमल हो जाता है] http://stackoverflow.com/questions/2244217/table-valued-parameter-in-a-stored-procedure- होट-निष्पादन-अनुमतियां-अस्वीकार-एरो) –

+0

धन्यवाद! मैंने खोज की है लेकिन स्पष्ट रूप से पर्याप्त नहीं है:/ – Janez

+0

अंत में 'AS dbo' डालने का प्रयास करें। इस तरह: 'प्रकार पर अनुदान EXEC :: [स्कीमा]। [टाइपनाम] [उपयोगकर्ता] AS dbo'। मेरे लिए काम किया – Jonathan

उत्तर

132

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

GRANT EXEC ON TYPE::[schema].[typename] TO [User] 
GO 
की
+0

यह मेरे लिए काम करता था जब मेरे पास एक ही समस्या थी। – mwgriffith

+3

आपने दिन बचाया। उपवास और गोल्ड स्टार! – granadaCoder

+5

मेरा 2 सेंट: आपके कनेक्शन प्रमाणीकरण तंत्र के आधार पर, आपको सार्वजनिक समूह को निष्पादित करना पड़ सकता है। तो आपका अनुदान इस तरह दिखेगा: टाइप पर अनुदान EXEC :: [स्कीमा]। [टाइपनाम] से [सार्वजनिक] जाओ – dotnetguy

2

यदि आपकी संग्रहीत प्रक्रिया गतिशील एसक्यूएल का उपयोग कर रही है, जिसका अर्थ है @sql उत्पन्न होता है और फिर exec @sql के माध्यम से निष्पादित किया जाता है, तो आपको अंतर्निहित तालिकाओं पर अनुमति की आवश्यकता होगी।

एक कार्य-आसपास modify to stored procedure to run as a different user है। यदि आप इसे एसईएलएफ के रूप में चलाते हैं, तो यह संग्रहीत प्रो के निर्माता के नीचे भाग जाएगा, जो बेहद खतरनाक है। फिर भी, यदि आप कोई अन्य विकल्प होता है:

CREATE PROCEDURE dbo.usp_Demo 
WITH EXECUTE AS SELF 
+1

Thx इसे इंगित करने के लिए। लेकिन संग्रहीत प्रक्रिया में इसमें कोई गतिशील एसक्यूएल नहीं है। केवल सामान्य 'INSERT INTO' और'UPDATE' तालिका विवरण जिनके लिए इस उपयोगकर्ता की सभी अनुमतियां हैं जिनकी उन्हें आवश्यकता है। इसके अलावा इस उपयोगकर्ता/लॉगिन को इस डेटाबेस से कनेक्ट करने में सक्षम होने के लिए इस एएसपी.NET एप्लिकेशन के लिए विशेष रूप से आरक्षित/बनाया गया है और केवल संग्रहीत प्रक्रियाओं को निष्पादित करता है (आदि नहीं बनाते, निर्माता हमेशा "sa'' है)। – Janez

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