2

MSSQL 2005 内でデータベース メールをセットアップしました。サーバーの管理者アカウントから、SQL Server エージェント ジョブを介して電子メールを送信できました。しかし、Web アプリケーションのデータベースにアクセスできるログイン経由でメールを送信しようとすると、メールを送信できません。

データベース メールへのアクセスを設定する最適な方法は何ですか?

メールを送信したい 2 つのシナリオがあります。

  1. SQL Server エージェントを介してジョブをスケジュールし、何らかのプロセスを実行してから電子メールを送信するストアド プロシージャを実行します。(これは問題ありませんでした)
  2. 電子メールを送信できる別のストアド プロシージャを呼び出す Web アプリケーションからストアド プロシージャを呼び出します。(これは私の権限の問題です)

可能な解決策

  1. ログインにアクセス許可を付与する唯一の方法は、ログインをmsdbデータベースにマップし、 publicおよびDatabaseMailUserRoleを付与することです。これにより、msdbデータベースへのアクセスが大幅に増えると思われるため、これは非常に懸念されます。

  2. 送信したい電子メールをテーブルに保存し、SQL Server エージェント ジョブでそのテーブルを頻繁に調べて、キューに入っている電子メールを送信します。このように、Web アプリケーションのデータベース ログインは [msdb].[dbo].[sp_ send _dbmail] 呼び出しを実行しないため、 msdbデータベースへのアクセス許可は必要ありません。

他の解決策はありますか?

4

2 に答える 2

1

EXECUTE AS OWNERオプションを使用してストアドプロシージャを作成できるはずです。これにより、呼び出し元ではなく所有者のコンテキストで実行されます。

CREATE PROCEDURE [dbo].[sp_SendMail]
(
    @To nvarchar(1000),
    @Subject nvarchar(100),
    @Body nvarchar(max)
)
WITH EXECUTE AS OWNER
AS
BEGIN
    exec msdb.dbo.sp_send_dbmail @profile_name = 'MailProfile', 
                @recipients = @To, 
                @subject = @Subject, 
                @body = @Body
END
于 2008-12-31T18:07:13.457 に答える
0

私は同じことをしようとしていますが、実行しています

GRANT EXECUTE ON dbo.sp_SendMail TO User1

この問題は修正されていません。この手順を機能させているのは、追加していないことだけです。

EXECUTE AS OWNER

(「WITHENCRYPTION」のみで作成しています)そして、このプロシージャを実行するユーザーをmsdbDatabaseMailUserRoleロールに追加します。

USE msdb
GO
EXEC sp_adduser @loginame='USERNAME', @grpname='DatabaseMailUserRole'
GO

ありがとう

于 2009-06-01T22:04:33.777 に答える