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

Откуда: Moscow
Сообщений: 1837
Решил поиграться сегодня с DatabaseMail и натолкнулся на несколько странное поведение для меня инструкции execute as.

Есть логин user1

Есть база, допустим [test]. К ней подмаплен данный логин под пользователем user1 (членство в ролях только public)
Также для данного логина сопоставлен пользователь user1 в базе msdb (дано членство в роли DatabaseMailUserRole)

Если конектится к сиквелу под этим логином и выполнять в запуск sp_send_dbmail то все норм.

Поехали дальше: есть логин user2 подмаплен в [test] как пользователь [user2] (членство в ролях тоже public)
пользователю дано право impersonate на user1

в контексте базы [test] пользователь выполняет
execute as user = 'user1'
exec [msdb].[dbo].[sp_send_dbmail] 
     --список аргументов

получаем ошибку что у пользователя нет прав на запуск процедуры.
проверяем контекст
use [test]
select suser_name(), user_name()


вывод: user1, user1

едем в msdb
use [msdb]
select suser_name(), user_name()


вывод: user1, guest

O_o

благо инстансов у меня много с различными настройками нашел базенку которая trustworthy on

а вот для нее в такой ситуации нормально запускает с базы под олицетворяемым контекстом
use [test2]
select suser_name(), user_name()

вывод: user1, user1
use [msdb]
select suser_name(), user_name()


вывод: user1, user1

И вот сегодня рылся рылся в справке и по execute as, и alter database, и по цепочкам владений хотя они тут явно не причем. Не нашел где у нас оно явно описано такое поведение. Ну или к концу дня совсем ослеп, ткните носом плз.
8 ноя 16, 00:17    [19868254]     Ответить | Цитировать Сообщить модератору
 Re: trustworthy и execute as  [new]
o-o
Guest
Вы же делаете execute as user, НЕ execute as login, а юзер он в пределах базы.
А вот выполняя это в базе trustworthy, если у овнера базы есть authenticate server, то execute as user уже действует как execute as login
8 ноя 16, 08:01    [19868610]     Ответить | Цитировать Сообщить модератору
 Re: trustworthy и execute as  [new]
o-o
Guest
Вот в документации :
Extending Database Impersonation by Using EXECUTE AS
8 ноя 16, 08:05    [19868617]     Ответить | Цитировать Сообщить модератору
 Re: trustworthy и execute as  [new]
o-o
Guest
Для эксперимента смените овнера трастворсной базы, обычный логин сделайте овнером, без роли сисадмин. И получите ситуацию номер 1,когда юзер с правом impersonate при execute as user в msdb попадет гостем, а не тем, кого имперсонэйтил
8 ноя 16, 08:10    [19868620]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить