मैं निम्नलिखित सेटअप मिल गया है:समस्या "रूप में निष्पादित करें"
वहाँ कई तालिकाओं है कि चलाता उन पर सेट (है कि इतिहास डेटा एकत्र) के साथ एक एसक्यूएल सर्वर DB है। ये ट्रिगर EXECUTE AS 'HistoryUser'
के साथ सीएलआर संग्रहीत प्रक्रियाएं हैं। HistoryUser
उपयोगकर्ता लॉगिन के बिना डेटाबेस में एक साधारण उपयोगकर्ता है। इसमें सभी तालिकाओं से पढ़ने और इतिहास तालिका में लिखने के लिए पर्याप्त अनुमतियां हैं।
जब मैं डीबी बैकअप लेता हूं और फिर इसे किसी अन्य मशीन पर पुनर्स्थापित करता हूं (इस मामले में वर्चुअल मशीन, लेकिन इससे कोई फर्क नहीं पड़ता), ट्रिगर्स अब और काम नहीं करते हैं। वास्तव में, उपयोगकर्ता के लिए कोई प्रतिरूपण अब और काम नहीं करता है। यहां तक कि एक साधारण बयान इस तरह के रूप में
exec ('select 3') as user='HistoryUser'
एक त्रुटि पैदा करता है:
Cannot execute as the database principal because the principal "HistoryUser" does not exist, this type of principal cannot be impersonated, or you do not have permission.
मैं read in MSDN अगर डीबी मालिक एक डोमेन उपयोगकर्ता है कि इस से हो सकता है, लेकिन यह नहीं है। और यहां तक कि अगर मैं इसे किसी और चीज में बदलता हूं (उनके अनुशंसित समाधान) यह समस्या बनी हुई है।
यदि मैं लॉगिन के बिना कोई अन्य उपयोगकर्ता बनाता हूं, तो मैं इसे प्रतिरूपण के लिए ठीक से उपयोग कर सकता हूं। जो है, यह सिर्फ ठीक काम करता है:
create user TestUser without login
go
exec ('select 3') as user='TestUser'
मैं उन सभी ट्रिगर पुन: नहीं करना चाहते, इसलिए वहाँ किसी भी तरह से मैं कैसे मौजूदा HistoryUser
काम कर सकते हैं?
टक्कर: क्षमा करें, लेकिन इस थोड़े जरूरी है ...
Nop, मदद नहीं करता है। –