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

Откуда:
Сообщений: 19
Здравствуйте.
Есть необходимсть выполнить от имени пользователя test.dbo процедуру msdb.dbo.sp_send_dbmail.
Как-то можно дать права на исполнение msdb.dbo.sp_send_dbmail пользователю test.dbo?
И более общий вопрос.
Есть БД test.
Есть БД msdb, которая содержит "сервисные" процедуры и функции СУБД. Но как дать пользователям БД test права на использование соответствующих сервисов? Это не схемы разные, это разные БД, которые есть "самостоятельные миры".
Пока я считаю, что права делигируются или предоставляются путем создания общего логина для пользователей в двух и более базах данных.
Что-то как-то не так ....
Спасибо.
10 дек 09, 15:37    [8047475]     Ответить | Цитировать Сообщить модератору
 Re: Как дать права пользователю некоторой БД на объект msdb  [new]
Glory
Member

Откуда:
Сообщений: 104760
BOL
Execute permissions for sp_send_dbmail default to all members of the DatabaseMailUser database role in the msdb database.

=AlexeyAB

Пока я считаю, что права делигируются или предоставляются путем создания общего логина для пользователей в двух и более базах данных.

Правильно считаете. А если явного пользователя нет, то в дело вступает зарезервированный пользователь guest. Если он, конечно, разрешен в базе
10 дек 09, 15:43    [8047521]     Ответить | Цитировать Сообщить модератору
 Re: Как дать права пользователю некоторой БД на объект msdb  [new]
AlexeyAB
Member

Откуда:
Сообщений: 19
Glory, еще раз спасибо.

Все хорошо, но ...
Попытка дать пользователю msdb.dbo роль 'DatabaseMailUserRole'
дает следующий результат:
------------------------------------------------------------------------
TITLE: Microsoft SQL Server Management Studio
------------------------------
Add member failed for DatabaseRole 'DatabaseMailUserRole'. (Microsoft.SqlServer.Smo)
------------------------------
ADDITIONAL INFORMATION:
An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo)
------------------------------
Cannot use the special principal 'dbo'. (Microsoft SQL Server, Error: 15405)
------------------------------------------------------------------------

Удалось сделать пользователя msdb.dbo владельцем схемы 'DatabaseMailUserRole', но это не помогло. Попытка выполнить процедуру дает тот же результат:
EXECUTE permission was denied on the object 'sp_send_dbmail', database 'msdb', schema 'dbo'.

Причина "упрямого" использования 'dbo' в том, что вызов 'sp_send_dbmail' надо делать из процедуры, которая WITH EXECUTE AS SELF. А это сделано чтобы реальный пользователь подключаясь к БД любым клиентом отправлял почту только с параметрами и содержанием, формируемым внутри процедуры.

Вариант типа WITH EXECUTE AS login = 'sa' не проходит, поскольку реальный пользователь не имеет право "переименоваться" и давать такое право нельзя (иначе накой весь "огород").
Вот такая чепуха получается ...
10 дек 09, 16:17    [8047808]     Ответить | Цитировать Сообщить модератору
 Re: Как дать права пользователю некоторой БД на объект msdb  [new]
Glory
Member

Откуда:
Сообщений: 104760
AlexeyAB
Glory, еще раз спасибо.

Все хорошо, но ...
Попытка дать пользователю msdb.dbo

У dbo и так есть абсолютно все права на все.
И совершенно логично, что у него нельзя ни отнять прав, ни добавить новых


AlexeyAB

Причина "упрямого" использования 'dbo' в том, что вызов 'sp_send_dbmail' надо делать из процедуры, которая WITH EXECUTE AS SELF. А это сделано чтобы реальный пользователь подключаясь к БД любым клиентом отправлял почту только с параметрами и содержанием, формируемым внутри процедуры.

А просто сделать логину пользователя в msdb что мешает ?
10 дек 09, 16:21    [8047854]     Ответить | Цитировать Сообщить модератору
 Re: Как дать права пользователю некоторой БД на объект msdb  [new]
AlexeyAB
Member

Откуда:
Сообщений: 19
Glory
А просто сделать логину пользователя в msdb что мешает ?


Если я сделаю пользователя в msdb для логина пользователя, то пользователь получит неограниченный доступ к сервисам СУБД. Например, сможет слать любую почту на любые адреса любого содержания. И сможет это сделать скриптом, тоесть массово (спам).
Я планировал дать пользователю право выполнять специальную процедуру, где формируются сообщения по правилам системы (содержание, адреса) и уже из процедуры вызывать msdb.dbo.sp_send_dbmail.
10 дек 09, 16:34    [8047978]     Ответить | Цитировать Сообщить модератору
 Re: Как дать права пользователю некоторой БД на объект msdb  [new]
Glory
Member

Откуда:
Сообщений: 104760
- EXECUTE AS OWNER
- владельцем процедуры сделать dbo
- на обеих базах включить DB_CHAINING и TRUSTWORTHY
10 дек 09, 16:43    [8048053]     Ответить | Цитировать Сообщить модератору
 Re: Как дать права пользователю некоторой БД на объект msdb  [new]
AlexeyAB
Member

Откуда:
Сообщений: 19
Glory, СПАСИБО!
Заработало ....
Мудрено сделано, однако ...
Теперь еще надо исследовать возможные "побочные" эффекты.
10 дек 09, 17:36    [8048540]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить