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

Откуда:
Сообщений: 40
Добрый день!
Люди добрые, подскажите кто знает, в чем может быть проблема.
Стоит задача, дать возможность пользователю программы отправлять почту при помощи SQL

Имею сервер :
+
автор
Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64) 
	Oct 19 2012 13:38:57 
	Copyright (c) Microsoft Corporation
	Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)

Настроил в нем Database Mail и всё нужное для рассылки.
Проштудировал это : sp_send_dbmail
и это : Устранение неполадок
Поскольку я админ, то из под меня скрипт рассылки отрабатывает.
А под другими пользователями - не хочет.
Хотя вроде все условия настройки выполнил, юзеров в роль DatabaseMailUserRole добавил.

Но при попытке выполнить запрос под другим юзером, пишет, что ему не хватает прав.
Начал копать, хочу запустить скрипт под указаннм юзером - не работает.
При этом даже если в подмене указываю себя - тоже пишет, что не хватает прав.

Хотя если запускаю процедуру sp_send_dbmail просто под собой :
+

print 'До запуска : ' + USER_name() + ' <> ' + SUSER_name()

--EXECUTE AS USER = 'firma\admin';
--print 'Во время запуска: ' + USER_name() + ' <> ' + SUSER_name()

EXEC msdb.dbo.sp_send_dbmail
       -- Созданный профиль администратора почтовых рассылок
             @profile_name = 'DBMail Profile',
       -- Адрес получателя
             @recipients ='admin@firma.ru' ,
       -- Текст письма
             @body = ' TEST BODY автоматическая рассылка',
       -- Тема
             @subject =  ' TEST SUBJ автоматическая рассылка'

--REVERT; 
print 'После запуска: ' + USER_name() + ' <> ' + SUSER_name()



На выходе получаю :
автор
До запуска : dbo <> firma\admin
Mail (Id: 1063) queued.
После запуска: dbo <> firma\admin

Видно, что отработало и письмо ушло.

Теперь снимаю комментарий в том скрипте и назначаю любого пользователя, например себя же.
EXECUTE AS USER = 'firma\admin';


На выходе имею ошибку прав доступа.
автор
До запуска : dbo <> firma\admin
Во время запуска: firma\admin <> firma\admin
Msg 229, Level 14, State 5, Procedure sp_send_dbmail, Line 1
The EXECUTE permission was denied on the object 'sp_send_dbmail', database 'msdb', schema 'dbo'.

После запуска: dbo <> firma\admin

Но ведь это же я же, тот же самый !
Чего ему не так ?

Не понимаю, как нужно настроить права, чтобы процедура их съела.
Знает кто-нить ?
Буду благодарен за любые пинки в нужную строну )
28 янв 16, 17:23    [18741546]     Ответить | Цитировать Сообщить модератору
 Re: права для почты - загадка  [new]
Glory
Member

Откуда:
Сообщений: 104760
Mike_Gl
Хотя вроде все условия настройки выполнил,

Откуда вы взяли список этих условий ?

Mike_Gl
Но ведь это же я же, тот же самый !
Чего ему не так ?

зачем вам EXECUTE AS, если вы по-вашим словам уже выдали все нужные права ?

Mike_Gl
Не понимаю, как нужно настроить права, чтобы процедура их съела.
Знает кто-нить ?

https://msdn.microsoft.com/ru-ru/library/ms190307(v=sql.120).aspx раздел Permissions
28 янв 16, 17:26    [18741570]     Ответить | Цитировать Сообщить модератору
 Re: права для почты - загадка  [new]
aleks2
Guest
The EXECUTE permission was denied on the object 'sp_send_dbmail', database 'msdb', schema 'dbo'.

Ну дык дай права явно и посмотри: чо будет?
28 янв 16, 17:26    [18741574]     Ответить | Цитировать Сообщить модератору
 Re: права для почты - загадка  [new]
rootman
Member

Откуда:
Сообщений: 114
http://blogs.msdn.com/b/sqlagent/archive/2011/02/02/sql-database-mail-security-feature-of-databasemailuserrole.aspx
Посмотрите тут.
28 янв 16, 17:32    [18741608]     Ответить | Цитировать Сообщить модератору
 Re: права для почты - загадка  [new]
o-o
Guest
Mike_Gl
Но ведь это же я же, тот же самый !

ничего не тот же.
если вы админ, то в msdb вы dbo.
а никакое не firma\admin.
и зачем интересно выводить, что юзер логину не равен?
USER_name()  -- user
SUSER_name() -- login
28 янв 16, 17:37    [18741637]     Ответить | Цитировать Сообщить модератору
 Re: права для почты - загадка  [new]
o-o
Guest
перевожу:
чтобы запускать "от себя", надо писать
EXECUTE AS USER = 'dbo';

ошибка уйдет, но выдать IMPERSONATE на овнера базы это подарить db_owner-а.
28 янв 16, 17:50    [18741713]     Ответить | Цитировать Сообщить модератору
 Re: права для почты - загадка  [new]
Mike_Gl
Member

Откуда:
Сообщений: 40
Glory
Mike_Gl
Хотя вроде все условия настройки выполнил,

Откуда вы взяли список этих условий ?

Здесь же, как вы и указали : https://msdn.microsoft.com/ru-ru/library/ms190307(v=sql.120).aspx раздел Permissions
и на Хабре : http://habrahabr.ru/post/132902/

Glory
Mike_Gl
Но ведь это же я же, тот же самый !
Чего ему не так ?

зачем вам EXECUTE AS, если вы по-вашим словам уже выдали все нужные права ?

Для эксперимента, если я знаю, что у меня права есть, то при выполнении команды EXEC AS они должны остаться.
Но не остались :-(

aleks2
The EXECUTE permission was denied on the object 'sp_send_dbmail', database 'msdb', schema 'dbo'.
Ну дык дай права явно и посмотри: чо будет?

Попробовал, дал - не сработало.
Может и правда не везде указал, что нужно ...

rootman
http://blogs.msdn.com/b/sqlagent/archive/2011/02/02/sql-database-mail-security-feature-of-databasemailuserrole.aspx
Посмотрите тут.

Спасибо!
С работы уже выгоняют, дома почитаю.


o-o
Mike_Gl
Но ведь это же я же, тот же самый !

ничего не тот же.
если вы админ, то в msdb вы dbo.
а никакое не firma\admin.
и зачем интересно выводить, что юзер логину не равен?
USER_name()  -- user
SUSER_name() -- login

Интересная мысль. Не подумал об этом.
а в выводе не то чтобы "не равен", просто как разделитель между двумя значениями.
Тем более что когда "вживую", то действительно не равен, а если EXEC AS , то равен


o-o
перевожу:
чтобы запускать "от себя", надо писать
EXECUTE AS USER = 'dbo';

ошибка уйдет, но выдать IMPERSONATE на овнера базы это подарить db_owner-а.


Нет-нет, дарить ничего нельзя.
Пользователи у нас мягко скажем недостойны почетного звания dbo.
Я и сам то до него еще не очень... ))
28 янв 16, 17:58    [18741767]     Ответить | Цитировать Сообщить модератору
 Re: права для почты - загадка  [new]
Glory
Member

Откуда:
Сообщений: 104760
Mike_Gl
Для эксперимента, если я знаю, что у меня права есть, то при выполнении команды EXEC AS они должны остаться.
Но не остались :-(

Это вы тоже где-то хабре нашли ? Или сами придумали ?
28 янв 16, 18:00    [18741781]     Ответить | Цитировать Сообщить модератору
 Re: права для почты - загадка  [new]
Mike_Gl
Member

Откуда:
Сообщений: 40
Glory
Mike_Gl
Для эксперимента, если я знаю, что у меня права есть, то при выполнении команды EXEC AS они должны остаться.
Но не остались :-(

Это вы тоже где-то хабре нашли ? Или сами придумали ?

Сам придумал :-/
Не надо смеяться, я хотел проверить, что другой пользователь имеет права на отправку.
Этот пользователь является членом роли DatabaseMailUserRole.
Т.е. если я открываю эту роль, то вижу в списке мемберов нужного юзера, но при выполнении запроса получает ошибку прав доступа.
Мне нужно как-то проверить, что другой юзер может отправлять почту.

....
пока писал, пришла мысль, может надо вместо
EXECUTE AS USER ...
сделать
EXECUTE AS LOGIN ...

Вы знаете - так получилось !!!

Правда я пока не очень понял, из-за чего, в чем разница между user и login.
dbo - это же схема ?
когда-то давно читал, что до 2000 версии, это действительно был user, но потом понятие расширили до схемы.
и как то мне представлялось, что теперь user и должен быть login`ом или как-то очень близко.

в принципе ветку можно закрывать. проблема решилась.
пойду читать мануалы
29 янв 16, 09:17    [18743874]     Ответить | Цитировать Сообщить модератору
 Re: права для почты - загадка  [new]
Mike_Gl
Member

Откуда:
Сообщений: 40
P.S.
И вообще вводят людей в заблуждение:
автор
Users who are not the member of DatabaseMailUserRole cannot send emails
(как вот тут:Security Feature of DatabaseMailUserRole)

Пишут же "Users", а не "Logins"
Вот я и писал в запросе Exec as USER..
29 янв 16, 09:23    [18743906]     Ответить | Цитировать Сообщить модератору
 Re: права для почты - загадка  [new]
Glory
Member

Откуда:
Сообщений: 104760
Mike_Gl
Пишут же "Users", а не "Logins"
Вот я и писал в запросе Exec as USER..

Ничего, что юзеры есть только в базах и права имеют только в своей базе ?
29 янв 16, 09:27    [18743920]     Ответить | Цитировать Сообщить модератору
 Re: права для почты - загадка  [new]
guuuest
Guest
Mike_Gl
Стоит задача, дать возможность пользователю программы отправлять почту при помощи SQL


Может быть стоит рассмотреть вариант давать пользователям права не на sp_send_dbmail, а на свою процедуру, которая будет вызывать sp_send_dbmail.
Это позволит сделать использование возможности более контролируемым.
Снимет вопрос с раздачей прав, поскольку наверняка уже есть куча процедур, которые используются из программы, значит сделаете права для новой процедуры по аналогии.
29 янв 16, 09:28    [18743927]     Ответить | Цитировать Сообщить модератору
 Re: права для почты - загадка  [new]
guuuest
Guest
Mike_Gl
Настроил в нем Database Mail и всё нужное для рассылки.
Хотя вроде все условия настройки выполнил, юзеров в роль DatabaseMailUserRole добавил.


А у вас профиль Database Mail открытый или закрытый? И правильно ли настроена безопасность профилей?

"Профили могут быть открытыми или закрытыми.Личный профиль может быть доступен только для определенных пользователей или ролей.Открытый профиль позволяет любому пользователю или роли с правами доступа к базе данных обслуживания почты (msdb) отправлять электронную почту с использованием этого профиля."

https://msdn.microsoft.com/ru-ru/library/hh245116(v=sql.120).aspx#ProfileSecurityPublic
29 янв 16, 09:49    [18744035]     Ответить | Цитировать Сообщить модератору
 Re: права для почты - загадка  [new]
Mike_Gl
Member

Откуда:
Сообщений: 40
Glory
Mike_Gl
Пишут же "Users", а не "Logins"
Вот я и писал в запросе Exec as USER..

Ничего, что юзеры есть только в базах и права имеют только в своей базе ?

Да, действительно, как-то не обращал раньше на это внимания.
сейчас сижу читаю: CREATE USER
Столько нового узнаю )
29 янв 16, 10:10    [18744142]     Ответить | Цитировать Сообщить модератору
 Re: права для почты - загадка  [new]
Mike_Gl
Member

Откуда:
Сообщений: 40
guuuest
Mike_Gl
Стоит задача, дать возможность пользователю программы отправлять почту при помощи SQL


Может быть стоит рассмотреть вариант давать пользователям права не на sp_send_dbmail, а на свою процедуру, которая будет вызывать sp_send_dbmail.
Это позволит сделать использование возможности более контролируемым.
Снимет вопрос с раздачей прав, поскольку наверняка уже есть куча процедур, которые используются из программы, значит сделаете права для новой процедуры по аналогии.

Интересный поворот.
Попробую...
спасибо.

guuuest
А у вас профиль Database Mail открытый или закрытый? И правильно ли настроена безопасность профилей?

"Профили могут быть открытыми или закрытыми.Личный профиль может быть доступен только для определенных пользователей или ролей.Открытый профиль позволяет любому пользователю или роли с правами доступа к базе данных обслуживания почты (msdb) отправлять электронную почту с использованием этого профиля."

https://msdn.microsoft.com/ru-ru/library/hh245116(v=sql.120).aspx#ProfileSecurityPublic

Профиль делал как открытый и по дефолту.
Но если честно, совсем досконально не разобрался в этом механизме.
сделал просто по пунктам по инструкции на хабре - рассылка заработала.
А вот как можно на пользователя привязывать разные профили - пока не понял.
И для чего это может быть нужно, не смог представить. Нужно отправить почту... какая разница пользователю, через какой профиль оно уйдет ? Главное, чтобы было доставлено адресату.
29 янв 16, 11:15    [18744472]     Ответить | Цитировать Сообщить модератору
 Re: права для почты - загадка  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Mike_Gl,

не надо пользователям давать прямой доступ. Разрешите им доступ к таблице, в которую они будут помещать необходимые атрибуты, а для отсылки настройте Job, вызывающий процедуру отправки.
29 янв 16, 12:39    [18744960]     Ответить | Цитировать Сообщить модератору
 Re: права для почты - загадка  [new]
Mike_Gl
Member

Откуда:
Сообщений: 40
Владислав Колосов
Mike_Gl,

не надо пользователям давать прямой доступ. Разрешите им доступ к таблице, в которую они будут помещать необходимые атрибуты, а для отсылки настройте Job, вызывающий процедуру отправки.

Спасибо, тоже вариант.
Они совсем прямого доступа не имеют, в любом случае работают через программный интерфейс, под который я подкладываю хранимую процедуру. Самостоятельно запустить ее или получить доступ к SQL Server`у они не могут.
29 янв 16, 12:57    [18745036]     Ответить | Цитировать Сообщить модератору
 Re: права для почты - загадка  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4264
Mike_Gl
И для чего это может быть нужно, не смог представить. Нужно отправить почту... какая разница пользователю, через какой профиль оно уйдет ?

Пользователи и почтовые сервера могут быть разными.
Не всем пользователям может быть дан доступ на некоторые почтовые сервера.
29 янв 16, 15:31    [18746132]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить