2012-06-18 9 views
10

मेरा आवेदन (सी #, एएसपी.Net) डीबी में डेटा डालने, अपडेट करने और हटाने की जरूरत है, और संग्रहीत प्रक्रियाओं को चलाता है। मुझे इसे डीबी स्कीमा को संशोधित करने से रोकने की ज़रूरत है - संग्रहित प्रक्रियाओं में कोई बदलाव नहीं, बनाने या छोड़ने, कोई बदलाव करने वाली सारणी नहीं।SQL सर्वर उपयोगकर्ता को डेटा डालने/अपडेट/हटाने के लिए अनुमति कैसे दें, लेकिन स्कीमा को परिवर्तित नहीं करें?

आवेदन उपयोगकर्ता को मुझे अनुमति देने के लिए किस अनुमति संयोजन की आवश्यकता है? बस 'चयन' काम नहीं करेगा, क्योंकि इसे तालिकाओं में डेटा डालने/अपडेट/हटाने की आवश्यकता है।

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

एसएसएमएस के साथ SQL सर्वर 2008 आर 2 का उपयोग करना।

उत्तर

18

तुम सच में वस्तु स्तर पर इस को नियंत्रित करना चाहते हैं, तो आप कर सकते हैं:

GRANT SELECT,UPDATE,INSERT,DELETE ON dbo.table TO user; 

स्कीमा स्तर पर:

GRANT SELECT,UPDATE,INSERT,DELETE ON SCHEMA::dbo TO user; 

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

GRANT EXEC ON dbo.procedure TO user; 

इसी प्रकार यदि आप एक विशिष्ट स्कीमा में सभी प्रक्रियाओं पर कार्यकारी अनुमति देना चाहते हैं, तो आप कह सकते हैं:

GRANT EXEC ON SCHEMA::dbo TO user; 

एक अपवाद तब होता है जब आपकी संग्रहीत प्रक्रिया गतिशील SQL उत्पन्न करती है। उन मामलों में आपको गतिशील SQL निष्पादन के संदर्भ में अंतर्निहित तालिकाओं पर अनुमतियां लागू करने की आवश्यकता हो सकती है, या आप EXECUTE AS OWNER का उपयोग करने में सक्षम हो सकते हैं।

+0

'अपडेट' और 'डिलीट' अनुमति देने की अनुमति देने से उपयोगकर्ता उस तालिका को बदल और छोड़ देगा? साथ ही, क्या मैं प्रति तालिका के बजाय स्कीमा पर अनुमतियां दे सकता हूं? – jprusakova

+1

तालिका में डेटा का संदर्भ, अद्यतन और हटाएं, न कि डेटा स्वयं। आप हमेशा यह कोशिश कर सकते हैं। और हां मैंने एक उदाहरण पोस्ट किया है जहां आप प्रति ऑब्जेक्ट की बजाय स्कीमा को प्रभावित कर सकते हैं (यदि आप बाद में टेबल जोड़ते हैं तो सहायक हो सकता है, अनुमतियां विरासत में प्राप्त होती हैं, जब तक कि आप उस तालिका को जोड़ना नहीं चाहते जिसे उपयोगकर्ता * तक पहुंच नहीं लेता है, तो आपको उस तालिका पर स्पष्ट रूप से इनकार करने की आवश्यकता होगी)। –

+0

धन्यवाद, यह मदद करता है! – jprusakova

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