SQL सर्वर समस्या के रूप में जाँच करें


13

मैं अपनी संग्रहीत प्रक्रिया का उपयोग करने की कोशिश करते हुए कुछ याद कर रहा हूं EXECUTE AS। संग्रहीत प्रक्रिया डेटा को पढ़ रही है source_db, इसे एकत्र करती है और परिणाम को स्टोर करती है target_db

सपा में ही है target_db। मेरे पास एक समर्पित लॉगिन है और इसे उपयोगकर्ताओं के लिए दोनों में source_dbऔर target_dbsp के मालिक के लिए मैप करता है (इसलिए लॉगिन app_agentमें source_dbऔर इसके target_dbलिए एक उपयोगकर्ता है app_agent)।

अगर मैं लॉग इन करता हूं app_agent, और निष्पादित करता हूं

EXEC target_db.app_agent_schema.import_data

सब कुछ ठीक काम करता है। लेकिन अगर मैं बदल गया

ALTER PROCEDURE app_agent_schema.import_data WITH EXECUTE AS OWNER` (or `AS SELF`) 

और इसे क्रियान्वित करने की कोशिश करो, यह फेंकता है

सर्वर प्रिंसिपल "app_agent" वर्तमान सुरक्षा संदर्भ के तहत डेटाबेस "source_db" तक पहुंचने में सक्षम नहीं है।

मैं SQL Server 2008 का उपयोग कर रहा हूं।

क्या कोई मेरी त्रुटि को इंगित कर सकता है?

धन्यवाद

अपडेट कुछ शोध करने के बाद, मैंने पाया कि ALTER DATABASE target_db SET TRUSTWORTHY ONसमस्या हल करती है, लेकिन यह मेरे लिए सही समाधान नहीं लगता है ...


1
मुझे लगता है कि उत्तर डेटाबेस - लेवल क्रॉस-डेटाबेस स्वामित्व श्रृंखला विकल्प का उपयोग कर रहा है । मैं आपके परिदृश्य में त्रुटि को पुन: उत्पन्न करने में सक्षम था, लेकिन यह जानने के लिए पर्याप्त विवरण नहीं दिए गए हैं कि क्या मैंने इसे पुन: प्रस्तुत किया है ... सीडीओसी विकल्प मेरे लिए काम नहीं करता है, लेकिन इसे आज़माएं और देखें कि क्या ऐसा होता है।
जॉन सीगेल

जवाबों:


24

यह EXECUTE AS के उपयोग से डेटाबेस प्रतिरूपण को विस्तारित करने में समझाया गया है । EXECUTE AS संदर्भ केवल वर्तमान डेटाबेस में विश्वसनीय है और इसे अन्य डेटाबेस पर फैलाने की अनुमति विशेषाधिकार हमले वेक्टर का एक वृद्धि है।

दो समाधान हैं, दोनों ऊपर वर्णित लेख में वर्णित हैं:

  • आसान डेटाबेस डेटाबेस को चिह्नित करना है ALTER DATABASE [source_db] SET TRUSTWORTHY ON;:। हालांकि आसान है, भी रूप में यह बनाता में खतरनाक है dboकी source_dbएक जिस वास्तविक sysadmin

  • सुरक्षित एक कोड साइनिंग का उपयोग है, उदाहरण के लिए किसी अन्य डेटाबेस में एक प्रक्रिया कॉल करें देखें । यह अधिक जटिल है, लेकिन 100% buletproff सुरक्षा है।


0

कौन सा उपयोगकर्ता ALTER PROCEDURE कमांड चलाता है? इसने उस उपयोगकर्ता के लिए स्वामी (स्व) पहुंच स्तर निर्धारित किया हो सकता है, न कि आप जिसे चाहते थे।


वही उपयोगकर्ता जिसने प्रक्रिया बनाई ( app_agent)। अगर मेरे पास app_agentबिना द्वारा बनाई गई प्रक्रिया है execute as owner/self, तो लॉग इन करें app_agent, एसपी ठीक से निष्पादित करता है। अगर मैं EXECUTE AS SELF(फिर से, उसी उपयोगकर्ता) को जोड़ता हूं , और यहां तक ​​कि लॉग इन करता app_agentहूं, तो मुझे मिलता है...is not able to access the database...
a1ex07
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.