Sql-Server

SQL Server 代理和 sp_send_dbmail 權限失敗

  • March 6, 2022

我已經設置了一個 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 數據庫角色,使用者才能發送電子郵件。

引用自:https://dba.stackexchange.com/questions/283145