powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Доступ к sp_send_dbmail
23 сообщений из 23, страница 1 из 1
Доступ к sp_send_dbmail
    #34167140
SharOfff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Клиент работает в конексте накоторой Application Role некоторой БД. При обращении к msdb.dbo.sp_send_dbmail получает "Разрешение EXECUTE запрещено для объекта "sp_send_dbmail", базы данных "msdb", схемы "dbo".".
Как корректно разруливается такай ситуация? Наделять правами Application Role можно только в пределах её БД.

Спасибо за наводки!
...
Рейтинг: 0 / 0
Доступ к sp_send_dbmail
    #34167156
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если аппроль, то сделать в базе обертку и настроить Cross Database Ownership Chaining
...
Рейтинг: 0 / 0
Доступ к sp_send_dbmail
    #34167233
SharOfff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что значит "сделать в базе обертку"?
...
Рейтинг: 0 / 0
Доступ к sp_send_dbmail
    #34167256
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SharOfffЧто значит "сделать в базе обертку"?
Сделать процедуру, которая в свою очередь будет вызывать sp_send_dbmail.
...
Рейтинг: 0 / 0
Доступ к sp_send_dbmail
    #34167343
SharOfff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо вам, добрый человек!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Доступ к sp_send_dbmail
    #35625917
kensi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гавриленко Сергей Алексеевич SharOfffЧто значит "сделать в базе обертку"?
Сделать процедуру, которая в свою очередь будет вызывать sp_send_dbmail.

У меня такая ситуация, пользователь правит данные во вьюшке сответсвенно исправляются данные в таблице, вызывается тригер, в котором вызывается процедура (обертка sp_send_dbmail).

У пользователя есть права только на вьюшку и когда доходит до выполения sp_send_dbmail вылазиет ошибка "The EXECUTE permission was denied on the object 'sp_send_dbmail', database 'msdb', schema 'dbo'.". Как выход можно включить данного пользователя в роль DatabaseMailUserRole, но пользователей очень много, поэтому хотелось бы найти выход попроще...

Я думал оберка поможет, может я чтото делают не так или есть другой выход, подскажите пожалуста.
...
Рейтинг: 0 / 0
Доступ к sp_send_dbmail
    #35626501
Mnior
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EXECUTE AS?
...
Рейтинг: 0 / 0
Доступ к sp_send_dbmail
    #35627034
kensi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пробовал через Execute as но это выполняется только из под админа, если пробует выполнить другой пользователь, говрит что у него нет прав, а как выдать права на execute as немогу найти
...
Рейтинг: 0 / 0
Доступ к sp_send_dbmail
    #35627050
Mnior
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевичсделать в базе оберткуCREATE PROCEDURE ... WITH EXECUTE AS ...Гавриленко Сергей Алексеевичи настроить Cross Database Ownership ChainingALTER DATABASE [...] SET DB_CHAINING ON
...
Рейтинг: 0 / 0
Доступ к sp_send_dbmail
    #35628794
kensi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
все вроде так и сделал создал обертку with execute as 'логин со всеми правами'

DB_CHAINING тоже включен так теперь начал выдвать ошибку, что нет прав The EXECUTE permission was denied on the object 'sp_send_dbmail', database 'msdb', schema 'dbo'

чето я совсем уже запутался
...
Рейтинг: 0 / 0
Доступ к sp_send_dbmail
    #35628967
Mnior
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BOLЧтобы отправить почтовое сообщение Database Mail, необходимо быть пользователем базы данных msdb и членом роли базы данных DatabaseMailUserRole в базе данных msdb. Чтобы добавить пользователей или группы msdb в эту роль, используйте среду SQL Server Management Studio или выполните следующую инструкцию для пользователя или роли, которым требуется отправить сообщение Database Mail.
Код: plaintext
EXEC msdb.dbo.sp_addrolemember @rolename = 'DatabaseMailUserRole', @membername = '<user or role name>' ;
...
Рейтинг: 0 / 0
Доступ к sp_send_dbmail
    #35629687
kensi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
это сделано, и когда я запускаю обертку созданую без execute as от имени пользователя добаленого в роль DataBaseMailUserRole то все работает, а если создать обертку с execute as от имени этого же пользователя то пише что у него нет прав на sp_send_dbmail
...
Рейтинг: 0 / 0
Доступ к sp_send_dbmail
    #35631702
Mnior
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё делают ALTER DATABASE [...] SET TRUSTWORTHY ONBOLМодули базы данных (например пользовательские функции или хранимые процедуры), которые используют контекст олицетворения , могут обращаться к ресурсам, находящимся вне базы данных.Пусть меня побьют, если я ошибся. Но перевод читается двояко. Хотя я бы сразу так ответил, про TRUSTWORTHY, но Гавриленко Сергей Алексеевич, навёл сомнения. Надеюсь, kensi, вы их и развеете.
...
Рейтинг: 0 / 0
Доступ к sp_send_dbmail
    #35634276
kensi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спешу развееть, ваши сомнения все заработало, огромное спасибо...было еще проблемка с владельцами БД, но ее сам решил...
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Доступ к sp_send_dbmail
    #36544509
Rebelint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня похожий вопрос:

Есть процедура которая
Код: plaintext
with execute as owner
в ней вызывается
Код: plaintext
EXEC  msdb.dbo.sp_send_dbmail....

такая же ошибка, как у автора.
Делаю
Код: plaintext
EXEC msdb.dbo.sp_addrolemember @rolename = 'DatabaseMailUserRole', @membername = 'dbo' ;

Говоритавтор
Сообщение 15405, уровень 11, состояние 1, процедура sp_addrolemember, строка 84
Невозможно использовать специального участника "dbo".
...
Рейтинг: 0 / 0
Доступ к sp_send_dbmail
    #36544523
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rebelint
Делаю
Код: plaintext
EXEC msdb.dbo.sp_addrolemember @rolename = 'DatabaseMailUserRole', @membername = 'dbo' ;

Говоритавтор
Сообщение 15405, уровень 11, состояние 1, процедура sp_addrolemember, строка 84
Невозможно использовать специального участника "dbo".
dbo и так имеет все права в базе. Потому что является владельцем базы
Поэтому ему нельзя ни назначить права, ни отобрать их
...
Рейтинг: 0 / 0
Доступ к sp_send_dbmail
    #36545237
Rebelint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в таком случае почему сервер сообщает что нет прав?
...
Рейтинг: 0 / 0
Доступ к sp_send_dbmail
    #36545251
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rebelintв таком случае почему сервер сообщает что нет прав?
В сообщении не говорится об отсутствии прав у dbo. dbo там фигурирует только как часть полного имени объекта, к которому нет прав
...
Рейтинг: 0 / 0
Доступ к sp_send_dbmail
    #36548309
Rebelint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ладно. как сделать чтобы у меня были права?
...
Рейтинг: 0 / 0
Доступ к sp_send_dbmail
    #36562414
Rebelint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давайте по порядку.
Есть пользователь сервера Домен\User . Добавляю его в свою базу. Добавляю его в базу MSDB.
Делаю
Код: plaintext
EXEC msdb.dbo.sp_addrolemember @rolename = 'DatabaseMailUserRole', @membername = 'домен\user' ;

Делаю хранимку

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
ALTER PROCEDURE [dbo].[Import_Terminal]
	(@....., @....
	)
	with execute as 'Домен\User'
AS
....
EXEC  msdb.dbo.sp_send_dbmail
    @profile_name = 'Рассылка',
    @recipients ='it.vasya@домен.ru;',
    @query = @QueryText ,
    @importance = 'High',
    @subject = 'Автоматическое уведомление'
    

Выполняю
Код: plaintext
 exec Import_Terminal  1 , 11088 

После чего
авторСообщение 229, уровень 14, состояние 5, процедура sp_send_dbmail, строка 1
Запрещено разрешение "EXECUTE" на объект "sp_send_dbmail" базы данных "msdb", схемы "dbo".

Если убрать with execute as 'Домен\User', то хранимка выполняется, но из под исполняющего пользователя, а не из под User.
...
Рейтинг: 0 / 0
Доступ к sp_send_dbmail
    #36562416
Rebelint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чего не хватает?
...
Рейтинг: 0 / 0
Доступ к sp_send_dbmail
    #36570878
лоллл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чего написано, того и не хватает, а именно прав пользователя 'Домен\User' в базе msdb на EXECUTE процедуры dbo.sp_send_dbmail. Учимся читать =)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Доступ к sp_send_dbmail
    #39931695
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
лоллл
Чего написано, того и не хватает, а именно прав пользователя 'Домен\User' в базе msdb на EXECUTE процедуры dbo.sp_send_dbmail. Учимся читать =)


Вхождение в роль DatabaseMailUserRole как раз и дает эти права.

Так что надо смотреть - под тем ли пользователем идет выполнение, к примеру...

P.S
Только потом заметил сколько времение с того сообщения прошло... А не удалить написанное пером...
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Доступ к sp_send_dbmail
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]