मैं उस मुद्दे के समाधान के लिए आया हूं। पता नहीं क्यों यह काम करेगा लेकिन कभी कम नहीं। :)यह निश्चित रूप से सुरक्षा के बारे में है।
मैंने जांच की है कि SQL एजेंट डोमेन उपयोगकर्ता की ओर से चल रहा है, जैसे DOMAIN\User इसमें सर्वर पर व्यवस्थापक अधिकारों का पूरा सेट है ('sysadmin' सर्वर भूमिका, आदि)। SQL सर्वर स्वयं उसी उपयोगकर्ता के अंतर्गत चल रहा है।
कार्य का चरण जिसमें sp_send_dbmail . पर कॉल शामिल है एक ही DOMAIN\User . के अंतर्गत चलता है ।
मैंने यह भी पता लगाया है कि sp_send_dbmail . के क्वेरी भाग को चलाते समय यह निष्पादित करने का प्रयास करता हैexec xp_logininfo 'DOMAIN\User' सक्रिय निर्देशिका के विरुद्ध जाँच करने के लिए यदि वह उपयोगकर्ता ठीक है। और आश्चर्य:कुछ निश्चित रूप से ठीक नहीं है। इस चेक के साथ समाप्त होता है:
Msg 15404, Level 16, State 19, Server SQLC002INS02\SQLC002INS02, Line 1
Could not obtain information about Windows NT group/user 'DOMAIN\User.', error code 0x2.
कुछ संभावना के साथ इसका मतलब यह हो सकता है कि उस उपयोगकर्ता के पासवर्ड की समय सीमा समाप्त हो गई है या उपयोगकर्ता लॉक हो गया है या उस व्यक्ति के लिए कोई अन्य सुखद चीजें नहीं हैं।
मैंने फैसला किया कि एजेंट के लिए उपयोगकर्ता को बदलना जोखिम भरा है। इसलिए मैं 'sa' की ओर से मेल भेजने के लिए आया हूं जिसमें समान 'sysadmin' सर्वर भूमिका है लेकिन SQL प्राधिकरण और इस AD जाँच चरण को छोड़ देता है।
ऐसा लगता है कि एक उपयोगकर्ता वास्तविक व्यवस्थापक से उसके लिए खतरनाक कोड चलाने के लिए कहने के लिए व्यवस्थापक होने का दिखावा करता है :)
तो इस नौकरी का अंतिम कोड पहला और एकमात्र चरण जैसा दिखता है:
execute as login = 'sa'
exec msdb.dbo.sp_send_dbmail
@profile_name = 'profile_name',
@recipients = '[email protected]',
@body = 'body',
@subject = 'subj',
--Parameters that refers to attached file
@attach_query_result_as_file = 1,
@query_result_header = 0,
@query_result_no_padding = 1,
@query = 'select 1',
@query_attachment_filename = 'test.csv'
revert