Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Ошибка прикрепления файла  [new]
vma_mnt
Member

Откуда: Новокузнецк
Сообщений: 602
Имеется пользователь с авторизацией SQL

Имеется процедура отправки эл. почты

create procedure [dbo].[ХпОтправкаСообщенияЭлПочта] 
(@Email varchar(500), @Тема varchar(500), @ТекстСообщения varchar(500), @ПрикрепленныеФайлы varchar(2000))

as 

EXECUTE msdb.dbo.sp_send_dbmail 
  @profile_name = 'DbDoc'
, @recipients = @Email
, @subject = @Тема
, @body = @ТекстСообщения
, @file_attachments = @ПрикрепленныеФайлы


Пользователь является членом роли DataиaseMailUserRole в базе msdb

При выполнении команды отправки почты без вложения, почта уходит нормально
exec ХпОтправкаСообщенияЭлПочта 'mnt@rdtc.ru', 'Получен документ для исполнения', ''


При выполнении команды отправки почты с вложением
exec ХпОтправкаСообщенияЭлПочта 'mnt@rdtc.ru', 'Получен документ для исполнения', '', 'C:\DbDocFiles\03-1228.pdf'


появляется сообщение об ошибке
Сообщение 22051, уровень 16, состояние 1, строка 0
Невозможно осуществить олицетворение контекста безопасности соединения клиента. Для вложения файлов необходимо встроенное имя входа клиента.


Если дать пользователю права администратора SQL сервера, сообщение уходит нормально

Какие права надо добавить, чтобы пользователь-не администратор мог отправлять сообщения с вложением?
6 авг 12, 07:19    [12965956]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка прикрепления файла  [new]
invm
Member

Откуда: Москва
Сообщений: 9413
create credential + alter login для вашего сиквельного пользователя -- http://msdn.microsoft.com/ru-ru/library/ms189522.aspx.
Либо подписать процедуру ХпОтправкаСообщенияЭлПочта -- https://www.sql.ru/blogs/decolores/950
6 авг 12, 10:10    [12966324]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка прикрепления файла  [new]
vma_mnt
Member

Откуда: Новокузнецк
Сообщений: 602
C подписью процедуры не получается

Сертификат создается для конкретной базы данных
CREATE CERTIFICATE SecurityCertificate
ENCRYPTION BY PASSWORD = 'P@ssw0rds$houldBeReally$tr0ng'
WITH SUBJECT = 'For the very important things', 
EXPIRY_DATE = '20301231'


Соответственно, чтобы создать логин из сертификата, сертификат должен быть создан в бд master
-- Создаем логин из сертификата
CREATE LOGIN VirtualMailSender
FROM CERTIFICATE SecurityCertificate;


А для подписи процедуры он должен быть создан в рабочей базе данных
-- Подписываем процедуру сертификатом
ADD SIGNATURE TO dbo.ХпОтправкаСообщенияЭлПочта 
BY CERTIFICATE SecurityCertificate
WITH PASSWORD = 'P@ssw0rds$houldBeReally$tr0ng'


Ссылки ADD SIGNATURE TO MyDB.dbo.ХпОтправкаСообщенияЭлПочта не проходят
6 авг 12, 11:16    [12966677]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка прикрепления файла  [new]
vma_mnt
Member

Откуда: Новокузнецк
Сообщений: 602
И почему все так сложно закручено. Почему нельзя просто прицепить к телу сообщения указанные файлы и отправить.
6 авг 12, 13:42    [12967811]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка прикрепления файла  [new]
vma_mnt
Member

Откуда: Новокузнецк
Сообщений: 602
В результате манипуляций с инструкцией execute as

появилось вот такое сообщение


Сообщение 229, уровень 14, состояние 5, процедура xp_sysmail_attachment_load, строка 1
Запрещено разрешение "EXECUTE" на объект "xp_sysmail_attachment_load" базы данных "mssqlsystemresource", схемы "sys".

Что это за база mssqlsystemresource?
6 авг 12, 16:42    [12969454]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка прикрепления файла  [new]
invm
Member

Откуда: Москва
Сообщений: 9413
vma_mnt
И почему все так сложно закручено. Почему нельзя просто прицепить к телу сообщения указанные файлы и отправить.
Потому что есть такое понятие, как "безопасность".

В статье про подписание процедуры явно указано -- все объекты должны быть созданы в БД master. Так что создайте процедуру отправки, либо обертку для нее в master и уже там подписывайте.

Если такой вариант и вариант с сопоставлением логину учетных данных ОС не устраивают, можете использовать таблицу-очередь и джоб, отправляющий сообщения, или Service Broker.
6 авг 12, 16:49    [12969513]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка прикрепления файла  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 2996
vma_mnt
В результате манипуляций с инструкцией execute as

появилось вот такое сообщение


Сообщение 229, уровень 14, состояние 5, процедура xp_sysmail_attachment_load, строка 1
Запрещено разрешение "EXECUTE" на объект "xp_sysmail_attachment_load" базы данных "mssqlsystemresource", схемы "sys".

Что это за база mssqlsystemresource?


база mssqlsystemresource :-)

а по делу, не придумывайте. Если Вы хотите использовать execute as, то должны учитывать
Чтобы указать EXECUTE AS в имени входа, вызывающая сторона должна иметь разрешения IMPERSONATE для указанного имени входа
а это у Вас получится SA
прислушайтесь к совету invm
6 авг 12, 16:51    [12969534]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить