2009-10-09 9 views
5

क्या एसक्यूएल सर्वर डेटाबेस तक पहुंचने वाले System.Data.SqlClient कोड का उपयोग कर केवल पढ़ने की अनुमति लागू करना संभव है?क्या एसकएल कॉमांड के साथ केवल पढ़ने के व्यवहार को लागू करना संभव है?

मैं विश्वसनीय उपयोगकर्ताओं को एक वेब साइट पर अपने स्वयं के चयन विवरण लिखने की अनुमति देना चाहता हूं।

नहीं मैं यहाँ ट्रोलिंग नहीं कर रहा हूं! स्पष्ट समाधान डेटाबेस में एक पठनीय उपयोगकर्ता बनाने के लिए हैं, और कनेक्शन स्ट्रिंग में उन प्रमाणपत्रों का उपयोग करें, और निश्चित रूप से केवल एक बेवकूफ वेबपृष्ठ में एक SQL कथन स्वीकार करता है। यह एक उपयोगकर्ता परिनियोजन मुद्दा है, मैं किसी और को सही तरीके से सेट करने के लिए भरोसा नहीं करता हूं और यह जांचने के लिए कोड लिखना नहीं चाहता हूं कि रीडोनली कनेक्शन स्ट्रिंग केवल पढ़ने योग्य है।

एक समाधान एसक्यूएल को पार्स करना होगा और यह सत्यापित करना होगा कि यह एक पठनीय आदेश है, या ऐसा कुछ करने के लिए। मैं क्या करना चाहता हूं जैसे कुछ करना;

SqlConnection conn = new SqlConnection(myConnectionString, Flags.Readonly) 

अद्यतन एसए विशेषाधिकार के साथ एक कनेक्शन स्ट्रिंग को देखते हुए, "पासवर्ड के साथ उपयोगकर्ता blah बनाने = xxx" "मेरी-db" "बनाने लॉगिन blah" "अनुदान का उपयोग करने के लिए blah mytable पर चुनें"। फिर एक नया कनेक्शन स्ट्रिंग बनाओ।

उत्तर

2

नहीं, यह सुनिश्चित करने के लिए कोई अंतर्निहित सुविधा नहीं है कि अंतिम उपयोगकर्ता क्रियाओं के दुष्प्रभाव नहीं हैं। हालांकि यह आपके परिदृश्य में आसान हो सकता है, लेकिन यदि इसका असंभव नहीं है, तो इसका सामान्य उद्देश्य कार्यान्वयन अविश्वसनीय रूप से जटिल होगा। क्या होगा यदि चयन कथन एक यूडीएफ का उपयोग करता है जिसके दुष्प्रभाव हैं?

+0

प्रश्न के उत्तर के लिए धन्यवाद –

+1

EXEC ('DR' + 'OP' + 'Tab' + 'LE' + 'Us' + 'ers') का जवाब देने के लिए धन्यवाद। –

2

आप एक लेनदेन और हमेशा रोलबैक का उपयोग कर सकते हैं? (लेकिन सुनिश्चित करें कि निष्पादित एसक्यूएल प्रतिबद्ध नहीं है)

5

SQL सर्वर में एक नया लॉगिन बनाएं और केवल उस तालिका को अनुमति दें जो आप टेबल पर चाहते हैं। फिर कनेक्शन स्ट्रिंग में एप्लिकेशन उस लॉगिन का उपयोग करता है। आप इसे अपनी पोस्ट में एक स्पष्ट समाधान के रूप में उल्लेख करते हैं लेकिन मुझे नहीं लगता कि आप इसे इस तरह क्यों नहीं करना चाहते हैं।

+1

yup, यह जाने का सबसे आसान तरीका है - डेटाबेस पर अनुमतियों को संभालें, फिर भी कोई फर्क नहीं पड़ता कि यह उपयोगकर्ता डेटा तक कैसे पहुंचता है, वह कभी भी –

+0

धन्यवाद को नुकसान नहीं पहुंचा सकता - यह वही है जो मैं करूंगा लेकिन मैं चाहता था पता है कि कोड के लिए केवल –

1

एक और डेटाबेस बनाएं, संभवतः रात का बैकअप बहाल करें, इसलिए यह एक दिन पुराना है। केवल उपयोगकर्ताओं को इस डेटाबेस तक पहुंचने की अनुमति दें। फिर उपयोगकर्ता अपने भयानक प्रश्नों के साथ उत्पादन को धीमा नहीं कर सकते हैं या अगर आपकी सुरक्षा विफल हो जाती है और बदलाव किया जाता है तो वास्तव में कुछ भी नुकसान पहुंचा सकता है।

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

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