带附件的 sp_send_dbmail

Ada*_*Dev 5 sql-server-2008 security

SQL Server 2008,通过 SQL Server 身份验证连接。

我有一个存储过程在DatabaseA其调用sp_send_dbmailmsdb同一个文件附件的电子邮件。该文件在数据库服务器上,而不是在远程文件共享上。

正在使用的SQL Server的帐户没有系统管理员,但的确属于DatabaseMailUserRolemsdb

发送没有附件的电子邮件是可以的,但是当存在附件时,我收到一个错误:

无法模拟客户端连接安全上下文。附加文件需要集成的客户端登录

有一些关于此的文章/帖子,但有些似乎在说相互矛盾的事情。我一直在研究模拟,并且在 中的存储过程中起作用的一件事是DatabaseA执行以下操作:

EXECUTE AS LOGIN = 'sa' -- or any account with sysadmin privileges
EXECUTE msdb..sp_send_dbmail ....
REVERT
Run Code Online (Sandbox Code Playgroud)

我没想到这会起作用,因为我想发送附件,您需要使用 Windows 身份验证。但是它确实有效,但这意味着需要授予权限较低的 SQL Server 帐户来模拟 sa(或其他系统管理员帐户)。

在将 DBA 的噩梦释放到野外之前,做我作为开发人员的尽职调查......

我的问题是:允许通过 SQL Server(非系统管理员)进行身份验证的用户在不打开安全漏洞的情况下从本地数据库服务器磁盘发送电子邮件附件的好/安全方法什么?

更新:

回复:凭据

我创建了一个新的 Windows 登录,通过 SSMS 为该帐户创建凭据,将这些凭据映射到我的有限权限 SQL Server 帐户。我收到错误:

消息 22051,级别 16,状态 1,第 0 行
无法模拟客户端连接安全上下文。
附加文件需要集成的客户端登录

我肯定错过了什么!

Rem*_*anu 3

您需要使用凭据

凭据是包含连接到 SQL Server 外部资源所需的身份验证信息(凭据)的记录。此信息由 SQL Server 内部使用。大多数凭据包含 Windows 用户名和密码。

凭据中存储的信息使通过 SQL Server 身份验证连接到 SQL Server 的用户能够访问服务器实例外部的资源。当外部资源是 Windows 时,用户将被验证为凭据中指定的 Windows 用户。

通过这种方式,您可以将发送邮件的 SQL 登录名与具有附件文件访问权限的 NT 凭据关联起来。