7

मैं जानना चाहता हूं कि SQL सर्वर के भीतर अनुमतियां कैसे सेट करें, मेरे आवेदन लॉगिन/भूमिका को msdb.dbo.sp_send_dbmail का उपयोग करके ईमेल भेजने में सक्षम होने के लिए।किसी भिन्न डेटाबेस में लॉगिन के लिए SQL सर्वर डेटाबेस मेल प्रक्रियाओं तक पहुंच कैसे प्राप्त करें?

मेरे पास एक डेटाबेस MyDb है, जो उपयोगकर्ता MyUser है जो AppRole भूमिका का सदस्य है। मेरे पास संग्रहीत प्रक्रिया myProc है जो msdb.dbo.sp_send_dbmail पर कॉल करती है। अगर मैं निष्पादित myProc जबकि sa रूप में लॉग इन यह सब ठीक काम करता है, लेकिन अगर मैं पर अमल करते हुए MyUser रूप में लॉग इन करने पर मुझे त्रुटि मिलती है:

Msg 229, Level 14, State 5, Procedure sp_send_dbmail, Line 1
The EXECUTE permission was denied on the object 'sp_send_dbmail', database 'msdb', schema 'dbo'.

मेरे डेटाबेस भरोसेमंद पर नहीं है, इसलिए मुझे लगता है कि मैं कर सकते हैं ' टी एक अलग उपयोगकर्ता का प्रतिरूपण करने के लिए EXECUTE के रूप में उपयोग करें, उदाहरण के लिए MyProc के रूप में EXNUTE के साथ बनाएँ ... (MSDN reference)

इसलिए मुझे लगता है कि मुझे अपने उपयोगकर्ता को एमएसडीबी के भीतर भी उपयोगकर्ता बनाना है, लेकिन क्या मैं इसे रोल स्तर पर कर सकता हूं या मुझे प्रत्येक को बनाने की ज़रूरत है मेरे डेटाबेस उपयोगकर्ता भी msdb में उपयोगकर्ता?

डेटाबेस मेल प्रोफ़ाइल जो मैं उपयोग कर रहा हूं वह सार्वजनिक पर सेट है, इसलिए मुझे नहीं लगता कि यह प्रोफ़ाइल अनुमतियों से संबंधित है।

+1

मैं समाप्त हो गया बस msdb भीतर उन के रूप में मेरे उन का निर्माण। सादगी के लिए मैं @Remus Rusanu प्रमाण पत्र के सुझाव का उपयोग नहीं करना चाहता था हालांकि एक अलग वातावरण में जो एक अच्छा विकल्प हो सकता है। यदि आपके पास बहुत से डेटाबेस उपयोगकर्ता हैं तो एक डीबी उपयोगकर्ता का प्रतिरूपण करने के लिए EXECUTE AS का उपयोग करना संभव हो सकता है और फिर बस उस उपयोगकर्ता को msdb तक पहुंच प्रदान करें - मुझे उस विकल्प को देखने की आवश्यकता नहीं थी। – Rory

उत्तर

2

आप EXECUTE AS का उपयोग कर सकते हैं और अपनी प्रक्रिया पर हस्ताक्षर कर सकते हैं और फिर msdb में EXECUTE अनुमति देने के लिए हस्ताक्षर प्रमाण पत्र का उपयोग कर सकते हैं। Call a procedure in another database from an activated procedure, साथ ही साथ Signing Procedures with Certificates देखें।

+0

मुझे उल्लेख किया जाना चाहिए था: ऐप को ग्राहकों की एक श्रृंखला में तैनात किया गया है, इसलिए हस्ताक्षर प्रक्रिया जटिल हो जाती है। लेकिन अन्यथा एक अच्छा विकल्प है। – Rory

+0

मुझे यकीन नहीं है कि मैं इसका पालन क्यों करता हूं। क्या तैनाती प्रक्रिया (एमएसआई इंस्टॉल या सेटअप) प्रक्रिया की प्रावधान संभाल नहीं सकती है, आवश्यक अनुमतियों को हस्ताक्षर और अनुदान दे सकती है? –

+0

सिद्धांत रूप में हां, व्यावहारिक रूप से मुझे डीबीए और वातावरण की एक बड़ी श्रृंखला से निपटने के दौरान बेहतर सरल मिला है, इसलिए मैं प्रमाणपत्र आदि के मार्ग को नीचे नहीं जाना पसंद करूंगा। – Rory

1

आप एमएसडीबी को केवल MyUser सार्वजनिक पहुंच प्रदान करने में सक्षम होना चाहिए और फिर उस उपयोगकर्ता को sp_send_dbmail proc पर निष्पादन पहुंच प्रदान करने में सक्षम होना चाहिए। आप उपयोगकर्ता को स्वयं जोड़ सकते हैं या एमएसडीबी में कस्टम भूमिका निभा सकते हैं और उन सभी उपयोगकर्ताओं को जोड़ सकते हैं जिन्हें sp_send_dbmail में निष्पादन की आवश्यकता है।

1

microsoft के अनुसार आपको उपयोगकर्ताओं को "msdb डेटाबेस में डेटाबेसमेल उपयोगकर्ता डेटाबेस भूमिका" के लिए अनुमति देने की आवश्यकता है।

+0

और ऐसा करने से पहले, मेरा प्रत्येक डेटाबेस उपयोगकर्ता भी msdb में उपयोगकर्ता? – Rory

+0

आप सही हैं, यह एक अच्छी तरह से विचार नहीं किया गया था - मेरी माफी। – Tony

0

आप डेटाबेस भूमिका देने की जरूरत है -> databaseusermailuserRole

enter image description here

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