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

Откуда:
Сообщений: 2
Доброго времени суток, пытаюсь разобраться в примере приведенном в следующей статье:
http://msdn.microsoft.com/en-us/library/ms188304.aspx

Вот скрипт создающий и настраивающий базы Marketing и Sales.

create login MarketingDBO WITH PASSWORD = '1'
GO

create database Marketing 
GO

Use Marketing
GO

exec sp_changedbowner 'MarketingDBO'
GO

--Create user under which we will execute stored procedure
create user MarketingExec WITHOUT LOGIN
GO

--Configure Sales database
create login SalesDBO WITH PASSWORD = '1'
GO

create database Sales 
GO

Use Sales
GO

exec sp_changedbowner 'SalesDBO'
GO

CREATE TABLE [dbo].[SalesStat]
(
	[data] [nchar](10) NULL
)
GO

--Create stored procedure in Marketing
Use Marketing
GO

CREATE PROCEDURE dbo.GetSalesProjections
WITH EXECUTE AS 'MarketingExec'
AS
BEGIN
	select * from sys.user_token
	SELECT * from Sales.dbo.SalesStat
END
GO

--Configure environment for cross-database access
USE Marketing
GO

-- Make Marketing DB trusted
ALTER DATABASE Marketing SET TRUSTWORTHY ON;
GO

USE Sales
GO

create user MarketingDBO FOR LOGIN MarketingDBO
GO

GRANT AUTHENTICATE TO [MarketingDBO]
GO

GRANT SELECT ON [dbo].[SalesStat] TO [MarketingDBO]
GO


Выполняем данный скрипт от sa
Далее логинимся от MarketingDBO пароль 1

и вызываем процедуру Marketing.GetSalesProjections

USE Marketing
GO

exec dbo.GetSalesProjections
GO


И получаем следующую ошбику:
Результат sys.user_token:
5 0x010500000000000903000000F06300B14EC42B44A8034F4CE419F798 MarketingExec SQL USER GRANT OR DENY
0 0x010500000000000904000000F6698AD2F9669343A2A3197A54FF564A public ROLE GRANT OR DENY
1 0x65FECA20B1FD2E4E8F4CE6B7B5750C30 dbo SQL USER AUTHENTICATOR
16384 0x01050000000000090400000000000000000000000000000000400000 db_owner ROLE AUTHENTICATOR

Msg 916, Level 14, State 1, Procedure GetSalesProjections, Line 7
The server principal "S-1-9-3-2969592816-1143718990-1280246696-2566330852." is not able to access the database "Sales" under the current security context.


Если я правильно понимаю принципы, то пользователю AUTHENTICATOR в базе данных Sales должны быть даны права на Authenticate. Для этого в базе данных Sales был создан юзер MarketingDBO замапленный на логин MarketingDBO, который в свою очередь является dbo в базе Marketing.

Вопрос 1: Чего же не хватает ?
Вопрос 2: MarketingExec пользователь без логина (WITHOUT LOGIN), правильно ли я понимаю что S-1-9-3-2969592816-1143718990-1280246696-2566330852 это некий системный анонимный логин, связанный с таким пользователем ?
Вопрос 3: Реально ли получить доступ к объекту в другой базе используя контекст MarketingExec WITHOUT LOGIN? (С замапленным логином сделать получилось)
Вопрос 4: Посоветуйте плиз литературу в которой можно прочесть про токены их авторизацию и все что связано с правами доступа к объектам ?

Спасибо.
21 мар 12, 19:43    [12291015]     Ответить | Цитировать Сообщить модератору
 Re: Extending Database Impersonation by Using EXECUTE AS  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3422
Сиквела под рукой нет, чтобы проверить, но если я не запутался, то вы даете во внешней базе грант на аутентификацию MarketingDBO, а процедуру пытаетесь выполнять в контексте прав MarketingExec, которому вы вообще никаких прав не давали, нигде.

Ничего удивительного, что оно не срастается.
22 мар 12, 01:59    [12292456]     Ответить | Цитировать Сообщить модератору
 Re: Extending Database Impersonation by Using EXECUTE AS  [new]
dzmudist
Member

Откуда:
Сообщений: 2
Ennor Tiegael
Сиквела под рукой нет, чтобы проверить, но если я не запутался, то вы даете во внешней базе грант на аутентификацию MarketingDBO, а процедуру пытаетесь выполнять в контексте прав MarketingExec, которому вы вообще никаких прав не давали, нигде.

Ничего удивительного, что оно не срастается.


Да, но если верить статье, то именно MarketingDBO является аутентификатором для MarketingExec и поэтому права на аутентификацию нужно давать MarketingDBO в базе Sales.
Cмущает сообщение об ошибке, там не MarketingExec не имеет прав доступа к объекту, а некий S-1-9-3... . Непонятно как дать права MarketingExec в базе Sales: дать их в базе Marketing на досту к объекту в другой базе нельзя, создать юзера MarketingExec в Sales смысла вижу мало, т.к он не замаплен ни на один логин и каким образом будет происходить сопоставление MarketingExec из базы Marketing с MarketingExec из базы Sales я представляю слабо, не хватает теории. Другое дело если создать логин для MarketingExec, то тогда все проблемы должны решиться. Но меня интересует именно ситуация с юзером WITHOUT LOGIN (как раз статья и должна давать ответ на этот вопрос, но такое чувство, что там упустили какую-то важную деталь, либо я чего-то не понял, поэтому и ищу авторитетное мнение).

Заранее всем спасибо за ответы.
22 мар 12, 12:03    [12293901]     Ответить | Цитировать Сообщить модератору
 Re: Extending Database Impersonation by Using EXECUTE AS  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
dzmudist
Вопрос 1: Чего же не хватает ?


Не хватает понимания от базы Sales по вопросу "ху из зе юзер" MarketingExec из контекста которого пытаются к ней доступ получить.

dzmudist
Вопрос 2: MarketingExec пользователь без логина (WITHOUT LOGIN), правильно ли я понимаю что S-1-9-3-2969592816-1143718990-1280246696-2566330852 это некий системный анонимный логин


Практически верно. S-1-9-3 - это корень аутентификации для всех юзеров без логина. Можете считать и так: любой S-1-9-3-... логин - это "типа нормальный логин", но генерируемый налету, дабы движок сервера не тупил на тему "а где у нас логин тут"? Как говорится - "а вот он"!

dzmudist
Вопрос 3: Реально ли получить доступ к объекту в другой базе используя контекст MarketingExec WITHOUT LOGIN?


Вот прямо совсем без доп. телодвижений - нет. Но если заморочитесь подписыванием/сертификатами - лехко.

dzmudist
(С замапленным логином сделать получилось)


Отож! Тут-то у обоих пользователей (dbo с одной стороны и MarketingDBO с другой) есть единая "точка сходимости" - "физический" логин.

dzmudist
Вопрос 4: Посоветуйте плиз литературу


Не знаю как "литература", но годика 2 назад писал по теме. Однако вы уж "забуриваетесь" в такие глубины для которых нужна еще одна такая же статья. :)
22 мар 12, 14:01    [12295047]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить