2009-07-28 15 views
22

पर चयन अनुमति अस्वीकार कर दी गई थी, मैं विजुअल स्टूडियो 2008 और SQL सर्वर 2008 का उपयोग कर C# ASP.NET पर पिछले 7 महीनों के लिए काम कर रहा हूं।ऑब्जेक्ट 'पता', डेटाबेस 'CNET_85731', स्कीमा 'डीबीओ'

आज, मैं अपने आवेदन जो पहले से चल रहा था का हिस्सा चल रहा था और मैं निम्नलिखित त्रुटि मिली:

चयन अनुमति वस्तु 'पता', डेटाबेस 'CNET_85731' पर मना कर दिया था, स्कीमा 'dbo'।

मैं अपने कोड के माध्यम से चला गया और पता चला कि इस त्रुटि को निम्नलिखित उपयोगकर्ता नियंत्रण में की वजह से किया जा रहा था:

protected void sdsAddressesList_Selected(object sender, SqlDataSourceStatusEventArgs e) 
{ 
    if (e.AffectedRows == 0) 
    { 
     ddlAddresses.Items.Insert((0), new ListItem("No Billing Addresses", "0")); 
    } 
} 

SQLDataSource परिभाषित किया गया है इस प्रकार है:

<asp:SqlDataSource ID="sdsAddressesList" runat="server" OnSelecting="sdsAddressesList_Selecting" OnSelected="sdsAddressesList_Selected" 
    SelectCommand="SELECT [AddressId], [ZipPostalCode], ZipPostalCode + '&nbsp;--&nbsp;' + Address1 AS CombinedAddress FROM [Address] WHERE ([CustomerID] = @CustomerID AND [IsBillingAddress] = @IsBillingAddress) ORDER BY [ZipPostalCode]" 
    ConnectionString="<%$ ConnectionStrings:eCoSysConnection %>"> 
    <SelectParameters> 
     <asp:Parameter Name="CustomerID" Type="Int32" /> 
     <asp:Parameter Name="IsBillingAddress" Type="Boolean" /> 
    </SelectParameters> 
</asp:SqlDataSource> 

असल में, क्या नियंत्रण करता है [पता] तालिका से लॉग ऑन उपयोगकर्ता के लिए पते की एक सूची पुनर्प्राप्त करें और फिर ड्रॉप डाउन सूची ddlAddresses को पॉप्युलेट करें।

पता तालिका में डेटाबेस में शेष तालिकाओं के समान सभी अनुमतियां हैं। मेरे पास लगभग 60 टेबल हैं और लगभग 200 संग्रहीत प्रक्रियाएं सभी चुपके से काम कर रही हैं, आदि कोई समस्या नहीं है। इस मुद्दे को छोड़कर। पृथ्वी पर क्या चल रहा है? मैंने डेटाबेस या तालिका अनुमतियों में कोई बदलाव नहीं किए हैं।

क्या कोई मेरी मदद कर सकता है।

सादर

वाल्टर

+0

क्या कनेक्शन स्ट्रिंग सही डेटाबेस पर इंगित कर रही है (जिसमें एक उचित अनुमति सेटअप है)? – shahkalpesh

+0

हां। web.config में कनेक्शन स्ट्रिंग निम्नानुसार है: <नाम जोड़ें = "eCoSysConnection" कनेक्शनस्ट्रिंग = "सर्वर = पॉजिटिववेक-यूडब्ल्यू \ SQLSERVER2008STD; एकीकृत सुरक्षा = सही; डेटाबेस = CNET_85731" प्रदाता नाम = "सिस्टम। डेटा। SQL क्लाइंट"/> मैं हर समय डेटाबेस तक पहुंचने के लिए इस समान कनेक्शन स्ट्रिंग का उपयोग करता हूं। –

+0

क्या आपके विंडोज लॉगिन के साथ कुछ भी बदल गया है जो एसक्यूएल सर्वर से जुड़ा हुआ है? – shahkalpesh

उत्तर

14

खैर मुझे यकीन है कि क्या मूल कारण अपने डाटाबेस उपयोगकर्ता के लिए इनकार किया चयन की अनुमति के लिए था नहीं कर रहा हूँ, लेकिन अगर आप इस चलाने के लिए और फिर यह वास्तव में फिर से, कहीं भी साथ काम करता है तो रेखा, आपकी चयन अनुमति वास्तव में मिटा दी गई थी।

GRANT SELECT ON [dbo].[Address] TO [your user name here] 

अच्छी खबर यह है कि अनुमतियां जादुई रूप से गायब नहीं होती हैं; बुरी खबर कुछ है (या तो टूलिंग या अन्यथा) वास्तव में या तो अनुमतियों को हटा या रद्द कर दिया था।

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

+0

हाय EPiddy, हाँ, मैं सहमत हूं, अनुमतियां गायब नहीं होती हैं। मैं के रूप में निम्नलिखित की कोशिश की सुझाव: GRANT चुनी गईं [dbo] [पता] [POSITIVECODE-UW \ ASPNET] को जहां 'POSITIVECODE-UW \ ASPNET' ASPNET खाते है।। कमांड सफलतापूर्वक SQL सर्वर पर पूरा हुआ, लेकिन दुर्भाग्य से, मुझे अभी भी एक ही त्रुटि मिलती है: ऑब्जेक्ट 'पता', डेटाबेस 'CNET_85731', स्कीमा 'डीबीओ' पर चयन अनुमति अस्वीकार कर दी गई थी। आपके सुझाव के लिए धन्यवाद। वाल्टर –

+0

मैंने संग्रहित प्रक्रिया में SELECT कमांड डालने और SqlDataSource से संग्रहित प्रक्रिया को कॉल करने का भी प्रयास किया। कुछ भी तो नहीं। मैं सिर्फ स्ट्रॉ पर कसकर चिपक रहा हूँ। –

+1

यह मेरे लिए काम करता है .. धन्यवाद – Muthukumar

3

, एक त्वरित गूगल था इस लिंक Link

यह

select object_name(major_id) as object, 
user_name(grantee_principal_id) as grantee, 
user_name(grantor_principal_id) as grantor, 
permission_name, 
state_desc 
from sys.database_permissions 
where major_id = object_id('Users') 
and class = 1 

अपने डेटाबेस पर चल रहा है पता चलता है अनुमतियाँ क्या मौजूद देखने के लिए, आप हो सकता है के रूप में पाया एक इनकार चयन

संपादित करें

select object_name(major_id) as object, 
user_name(grantee_principal_id) as grantee, 
user_name(grantor_principal_id) as grantor, 
permission_name, 
state_desc 
from sys.database_permissions 
WHERE state_desc = 'DENY' 

एक चल रहे SQL 2k8 बॉक्स को खोजने के लिए प्रबंधित, और इसे चलाया, यह नई क्वेरी सभी अस्वीकारियों को दिखाएगी। इसके अलावा वर्तमान में चयनित डेटाबेस में सभी तालिकाओं

+0

धन्यवाद पोस्टमैन। मैंने यह प्रश्न चलाया और यह 0 पंक्तियों को वापस कर दिया। मुझे लगता है कि यह सही है? –

+0

संपादन देखें, अधिक उपयोगी जानकारी वापस करनी चाहिए – PostMan

+0

तालिका को छोड़ना और फिर से बनाना या तो काम नहीं करता था। –

59

समस्या राज्यों के रूप में, "का चयन अनुमति वस्तु 'पता' पर मना कर दिया था पर, डेटाबेस 'CNET_85731', स्कीमा सभी अनुमतियों को देखने के लिए कहां खंड बाहर ले कोशिश, 'डीबीओ' '।

मुझे आश्चर्य है कि आप काफी बस इस तरह से हल कर सकते हैं:

  • ओपन SQL सर्वर प्रबंधन स्टूडियो
  • नेविगेट डेटाबेस 'CNET_85731' >> सुरक्षा के लिए >> उपयोगकर्ता
  • सही एक पर क्लिक करें जो आप अपने कोड
  • में उपयोग कर रहे हैं और आखिरकार, "डेटाबेस रोल सदस्यता" अनुभाग के अंदर बस 'db_datareader' चुनें।

अब, मुझे उम्मीद है कि आपको यह त्रुटि फिर से नहीं मिलनी चाहिए।

+7

या 'db_datareader'uncheck' db_denydatareader ' – CodingBarfield

+5

चुनने के बजाय धन्यवाद। अनचेकिंग 'db_denydatareader' और 'db_denydatawriter' ने मेरे लिए काम किया। – jiminy

+1

नहीं, यह मेरे मामले में मदद नहीं करता है। "उपयोगकर्ता को अनुदान का चयन करें" की आवश्यकता है, EPIDys उत्तर देखें। – AGuyCalledGerald

4

अपने SQL सर्वर प्रबंधन स्टूडियो में, अपने डेटाबेस पर राइट क्लिक करें, फिर अनुमति क्लिक करें, फिर उपयोगकर्ता का चयन करें, फिर चयन करें, संपादित करें, अपडेट करें और हटाएं। स्रोत http://go4answers.webhost4life.com/Example/select-permission-denied-object-159536.aspx

0

यदि यह आपको SQL सर्वर प्रबंधन स्टूडियो के भीतर त्रुटि देता है तो बस SQL ​​सर्वर प्रबंधन स्टूडियो को व्यवस्थापक के रूप में चलाएं जो काम करना चाहिए।

0

अपनी कनेक्शन स्ट्रिंग के निम्न भाग को हटाएं;

In‌​tegrated Security=True;

और सबकुछ मेरे लिए ठीक काम करता है।

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