2012-04-06 15 views
8

क्या के बीच diffrence है ...एसक्यूएल सर्वर निष्पादित प्रतिरूपण

execute as user = 'testuser' 

और

execute as login = 'testuser' 

मैं इन लॉगिन के तहत एक क्रॉस डेटाबेस प्रक्रिया को क्रियान्वित कर रहा हूँ और यह लॉगिन नहीं बल्कि के रूप में exececute साथ काम करता है उपयोगकर्ता के रूप में निष्पादित करें। यह कह रहा है कि सर्वर प्रिंसिपल "testuser" सुरक्षितता संदर्भ के तहत डेटाबेस "xxx" तक पहुंचने में सक्षम नहीं है।

जब मैं SELECT SYSTEM_USER दोनों आदेशों मैं देख रहा हूँ यह 'testuser'

उत्तर

11

execute as login पूरा सर्वर को प्रतिरूपण प्रदान करता है पर सेट किया जाता है कि, के बाद से लॉगिन एक सर्वर के स्तर पर आने के बाद। चूंकि उपयोगकर्ताओं को प्रति डेटाबेस परिभाषित किया जाता है, execute as user प्रतिरूपण केवल एक विशिष्ट डेटाबेस पर लागू होता है, यही कारण है कि जब आप डेटाबेस को पार करते हैं तो आपको त्रुटि दिखाई देती है।

3

के रूप में निष्पादित करने के लिए उदाहरण वर्तमान डेटाबेस के स्तर पर है:

बनाएं प्रक्रिया dbo.MyProcedure के साथ मालिक

रूप में निष्पादित करें

इस मामले में आप मॉड्यूल के मालिक का प्रतिरूपण कर रहे हैं। आप एसईएलएफ का प्रतिरूपण भी कर सकते हैं, या उपयोगकर्ता मॉड्यूल को बना या बदल सकता है या ... अपूर्ण कॉलर, जो वर्तमान उपयोगकर्ता की अनुमतियों को लेने के लिए मॉड्यूल को सक्षम करेगा, या ... प्रतिरूपण ओवेनर, जो प्रक्रिया के मालिक की अनुमति या कहा जा रहा है ... प्रतिरूपण 'user_name', जो एक विशिष्ट उपयोगकर्ता का प्रतिरूपण करेगा या ... प्रतिरूपण 'login_name' के साथ एक विशिष्ट लॉगिन का प्रतिरूपण करेगा।

संग्रहित प्रक्रियाओं की तरह वस्तुओं पर अनुमति की स्थापना पर निष्पादित "GRANT के साथ पूरा किया जा सकता है के लिए;।
हालांकि, अगर आप भी दोनों लॉगिन और उपयोगकर्ता स्तर पर सुरक्षा अधिकार देने के लिए चाहते हो सकता है आप यह निर्धारित करना चाहते हैं और केवल अनुदान। उन ऑब्जेक्ट्स के लिए आवश्यक अधिकार जिनके लिए एक्सेस (जैसे निष्पादन) की आवश्यकता होती है। "EXECUTE AS" क्षमता का उपयोग करने पर विचार करें जो किसी अन्य उपयोगकर्ता के प्रतिरूपण को सक्षम बनाता है कोड को निष्पादित करने के लिए आवश्यक सभी अनुमतियां प्रदान करने के लिए आवश्यक अनुमतियों को सत्यापित करने के लिए सभी अंतर्निहित वस्तुओं (उदाहरण के लिए टेबल) के अधिकार। EXECUTE AS को संग्रहित प्रो, फ़ंक्शंस, ट्रिगर्स इत्यादि में जोड़ा जा सकता है

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

इस उदाहरण में मदद मिल सकती यह सब स्पष्ट:

NoPrivUser नामक एक उपयोगकर्ता एक डेटाबेस के लिए सार्वजनिक उपयोग के साथ बनाएं (उदाdbadb)

उपयोग [गुरु] GO बनाएं प्रवेश [NoPrivUser] के साथ पासवर्ड = N'ABC5% ', DEFAULT_DATABASE = [dbadb], CHECK_EXPIRATION = पर, CHECK_POLICY = पर GO उपयोग [DBAdb] GO लॉग इन के लिए उपयोगकर्ता [NoPrivUser] बनाएं [NoPrivUser] जाओ

नोट: इस प्रक्रिया के निर्माता या स्वामी को लक्ष्य डेटाबेस के भीतर तालिका अधिकार बनाने की आवश्यकता होगी।

उपयोग DBAdb बनाएं प्रक्रिया dbo.MyProcedure जाना के साथ मालिक रूप में निष्पादित के रूप में नहीं मौजूद है (का चयन करें * sys.objects से कहां object_id = object_id (एन '[dbo] .MyTable') और में टाइप करें (N'U ')) CREATE TABLE MyTable (PKid पूर्णांक, स्तम्भ 1 चार (10)) INSERT INTO MyTable मान (1,' ABCDEF ')

पर dbo.MyProcedure को NoPrivUser GO

GRANT EXEC ; जाओ

- अब अपने डेटाबेस सर्वर में NoPrivUser के रूप में लॉग इन करें और निम्न चलाएं।

उपयोग dbadb जाना

EXEC dbo.MyProcedure

(1 पंक्ति (यों) प्रभावित)

अब से नई तालिका जबकि NoPrivuser के रूप में लॉग ऑन चयन करने के लिए प्रयास करें।

आप मिल जाएगा निम्नलिखित:

SELECT * MyTable से जाना

संदेश 229, स्तर 14, राज्य 5, पंक्ति 1 चयन अनुमति वस्तु पर मना कर दिया था 'MyTable', डेटाबेस ' डीबीएडीबी ', स्कीमा' डीबीओ '।

यह उम्मीद की जाती है कि जब आप NoPrivUser के रूप में लॉग ऑन करते हैं तो आप केवल स्वामी के सुरक्षा संदर्भ के तहत प्रक्रिया चलाते हैं।
NoPrivUser वास्तव में तालिका को पढ़ने का कोई अधिकार नहीं है। बस प्रक्रिया को निष्पादित करने के लिए जो पंक्तियां बनाता है और प्रविष्ट करता है।

निष्पादित एएस क्लॉज के साथ संग्रहित प्रक्रिया ऑब्जेक्ट स्वामी के संदर्भ में चलती है। यह कोड सफलतापूर्वक dbo बनाता है। MyTable और पंक्तियों को सफलतापूर्वक डाला जाता है। इस उदाहरण में, उपयोगकर्ता "NoPrivUser" में तालिका को संशोधित करने, या इस तालिका में किसी भी डेटा को पढ़ने या संशोधित करने के लिए पूर्ण अधिकार नहीं हैं।
यह इस प्रक्रिया के संदर्भ में कोडित इस विशिष्ट कार्य को पूरा करने के लिए आवश्यक अधिकारों को ही लेता है।

संग्रहीत प्रक्रियाओं को बनाने की यह विधि जो उन कार्यों को निष्पादित कर सकती हैं जिनके लिए स्थायी रूप से उन अधिकारों को असाइन किए बिना उच्च सुरक्षा अधिकारों की आवश्यकता होती है।

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