SQL Server 代理和 sp_send_dbmail 權限失敗
我已經設置了一個 SQL Server 代理作業來呼叫
sp_send_dbmail
某個數據庫中某個表的非常簡單的選擇。在目標數據庫的屬性 > 權限中,數據庫角色“public”具有select
權限。工作執行良好,電子郵件到達,一切順利。問題是,如果我關閉令人擔憂的慷慨“公共”
select
權限並嘗試添加 SQLServerAgent 使用者(這是執行代理的使用者和擁有代理作業的使用者)並授予他們select
權限,作業會失敗此錯誤消息:無法初始化 sqlcmd 庫,錯誤號為 -2147467259。
$$ SQLSTATE 42000 $$(錯誤 22050)
任何人都可以為我闡明這一點嗎?我懷疑可能以某種方式涉及不同的使用者。我無法讓 SQL Server Profiler 執行(它未安裝)並且我無權訪問伺服器來安裝它。
似乎 SQL 伺服器代理使用者執行 sql cmd 有問題。它使用 sql cmd 執行查詢以附加到電子郵件中。
請嘗試賦予代理使用者數據庫郵件使用者角色。exec sp_addrolemember ‘DatabaseMailUserRole’, ‘domain\agentuser’
我認為您的問題應該解決兩種情況:
- 缺少適當權限的 SQL Server 代理帳戶;
- 沒有足夠權限發送您希望的電子郵件的使用者。
SQL Server 代理帳戶
您可以在此答案中查看另一個問題,SQL Server 代理服務帳戶應該是 sysadmin 伺服器角色的成員,因此該帳戶不應該存在任何限制。請驗證您是否已正確配置。
沒有足夠權限發送電子郵件的使用者
我能夠在我的實驗室環境中重現您的錯誤(使用不是 SQL Server 代理帳戶的帳戶時),我可以像這樣更正它:
--After creating a SQL Server login ColumboMail I ran the following: USE msdb; CREATE USER ColumboMail FOR LOGIN ColumboMail; ALTER ROLE DatabaseMailUserRole ADD MEMBER [ColumboMail]; USE LabDB; CREATE USER ColumboMail FOR LOGIN [ColumboMail]; GRANT SELECT ON MyTable TO [ColumboMail];
數據庫郵件配置對象文件說
此外,sp_send_dbmail 儲存過程的 EXECUTE 權限僅授予 DatabaseMailUserRole 的成員。系統管理員必須將使用者添加到 DatabaseMailUserRole 數據庫角色,使用者才能發送電子郵件。