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

Откуда:
Сообщений: 365
Запускаю процедуру
ALTER PROCEDURE [Personal].[GetPermissionForReport] 
	-- Add the parameters for the stored procedure here
	@user varchar(50)=null,
@reportname varchar(50)
WITH EXECUTE AS 'MMC\filipov.alexandr'
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

    -- Insert statements for procedure here
    --declare @result int
	  
; declare @result as int
; with ReportPermission
as
(
SELECT   u.UserName
  	 ,r.RoleName,c.name
FROM ReportServer$MSSQL2008R2.dbo.Catalog c
inner join ReportServer$MSSQL2008R2.dbo.Policies p ON p.PolicyID = c.PolicyID
inner join ReportServer$MSSQL2008R2.dbo.PolicyUserRole pur ON pur.PolicyID = p.PolicyID
inner join ReportServer$MSSQL2008R2.dbo.Users u ON u.UserID = pur.UserID
inner join ReportServer$MSSQL2008R2.dbo.Roles r ON r.RoleID = pur.RoleID
where  c.[type] = 2
	and c.[Name] = @reportname
	--and u.UserName = @
	 --N'ReportForLabour2013'
	--and u.UserName = 'MMC\rak.larisa'
)
, mem
as
(
select DISTINCT  IS_MEMBER(@User)	as result
FROM ReportPermission r 
where  IS_MEMBER(@User)=1
--group by  IS_MEMBER(@User)
)	

--select * from  mem

Select @result=  coalesce(result,0) from  mem
  
END


Получаю
The server principal "MMC\filipov.alexandr" is not able to access the database "ReportServer$MSSQL2008R2" under the current security context

Интересно что без
WITH EXECUTE AS 'MMC\filipov.alexandr'

выполняется нормально
Мне надо выполнить процедуру от имени пользователя который не имеет доступа к ReportServer$MSSQL2008R2
MMC\filipov.alexandr имеет в ReportServer$MSSQL2008R2 роль db_datareader
26 ноя 13, 14:14    [15191433]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2008R2 опять про цепочи владения  [new]
aleks2
Guest
Осподе! Милосердный!

Когда этот наивняк поймет, что WITH EXECUTE AS 'MMC\filipov.alexandr' НИЧЕГО не значит для ДРУГОГО сервера?

Кури Credentials, болезный.
26 ноя 13, 14:32    [15191631]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2008R2 опять про цепочи владения  [new]
Ennor Tiegael
Member

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

А где здесь другой сервер?

philips,

БД, в которой создана процедура, конечно же, trustworthy?
26 ноя 13, 14:36    [15191675]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2008R2 опять про цепочи владения  [new]
philips
Member

Откуда:
Сообщений: 365
Нет
26 ноя 13, 14:44    [15191758]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2008R2 опять про цепочи владения  [new]
Glory
Member

Откуда:
Сообщений: 104751
А где тут собственно цепочка то ?
MMC\filipov.alexandr владеет процедурой [Personal].[GetPermissionForReport] что ли ?
26 ноя 13, 14:47    [15191783]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2008R2 опять про цепочи владения  [new]
aleks2
Guest
Ennor Tiegael
aleks2,

А где здесь другой сервер?

philips,

БД, в которой создана процедура, конечно же, trustworthy?


Не, канешно тредстартер пишет ReportServer$MSSQL2008R2.dbo.Catalog для красоты тока...
26 ноя 13, 14:58    [15191908]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2008R2 опять про цепочи владения  [new]
Glory
Member

Откуда:
Сообщений: 104751
aleks2
Не, канешно тредстартер пишет ReportServer$MSSQL2008R2.dbo.Catalog для красоты тока...

Так это же База.Схема.Объект
26 ноя 13, 15:01    [15191939]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2008R2 опять про цепочи владения  [new]
philips
Member

Откуда:
Сообщений: 365
MMC\filipov.alexandr -роль db_owner в базе запуска
db_datareader - в базе ReportService@MsSql2008R2
26 ноя 13, 15:33    [15192314]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2008R2 опять про цепочи владения  [new]
Glory
Member

Откуда:
Сообщений: 104751
philips
MMC\filipov.alexandr -роль db_owner в базе запуска
db_datareader - в базе ReportService@MsSql2008R2

А цепочки _владения_ то где ?
26 ноя 13, 15:35    [15192338]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2008R2 опять про цепочи владения  [new]
philips
Member

Откуда:
Сообщений: 365
Ну гдето же должно быть объяснение почему я не могу запустить процедуру
с Execute AS 'MMC\User'
Ведь 'MMC\User' - это мой логин
26 ноя 13, 15:39    [15192369]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2008R2 опять про цепочи владения  [new]
Glory
Member

Откуда:
Сообщений: 104751
philips
Ведь 'MMC\User' - это мой логин

это НЕ логин. Это пользователь базы
26 ноя 13, 15:40    [15192388]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2008R2 опять про цепочи владения  [new]
philips
Member

Откуда:
Сообщений: 365
Так под каким пользователем я могу выполнить процедуру чтения из другой базы
Sa - тоже мне отказал
26 ноя 13, 15:45    [15192424]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2008R2 опять про цепочи владения  [new]
o-o
Guest
опять за рыбу деньги.
вот же статья, все объясняющая, но всем лень читать:
Giving Permissions through Stored Procedures
когда пишете create proc WITH EXECUTE AS, процедура выполняется от имени и с правами ЮЗЕРА базы.
НЕ ЛОГИНА.
чтобы перевалить границу базы, надо чтоб овнер базы имел AUTHENTICATE на соседнюю базу,
а сама база должна быть TRUSTWORTHY.
и это нехорошо (но не буду высказываться, Ennor Tiegael в меня тапками кинет)
26 ноя 13, 15:49    [15192460]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2008R2 опять про цепочи владения  [new]
o-o
Guest
If a stored procedure sp1 in database A accesses a table tbl2 in database B,
ownership chaining can apply as well, if the procedure owner also owns tbl2.
In the trivial case, the two databases have the same owners and all involved objects are owned by dbo.
The user running sp1 must also be a user in database B.

However, starting with SQL 2000 SP3, ownership chaining across databases is turned off by default. You can enable it on server level, or per database.

To open an individual database for cross-db chaining, use the command ALTER DATABASE db SET DB_CHAINING ON. In the example above, both A and B must be enabled for DB chaining for users being able to access B..tbl2 through sp1 without any own permission on tbl2. To enable a database for chaining, you need sysadmin privileges.
26 ноя 13, 16:01    [15192550]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2008R2 опять про цепочи владения  [new]
Ennor Tiegael
Member

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

Дело не в том, что я кидаюсь на/в кого-то, а в том, что вот это вот условие
автор
if the procedure owner also owns tbl2
в случае серьезного подхода к безопасности тупо нереализуемо. Если у двух баз действительно разные владельцы - организации, например, или конкурирующие отделы - то никто нигде никаким оунером не будет, никогда.

Вырожденный случай, также процитированный вами, в принципе решает эту проблему, но только если нет реальных юзеров с правами db_owner (не обязательно sa, кстати). Но это, и без всяких дополнительных баз, дупло такого размера, что больше уже не потребуется. Вы в курсе, например, что если у вас не настроен тотальный аудит (который, кстати, db_owner может легко покоцать), то выяснить, кто же именно дропнул таблицу, у вас не получится даже посредством анализа журнала транзакций? Только до роли, не дальше.

Имхо, две базы под одним владельцем - самый простой и в реальной жизни достаточно секурный способ реализации такого доступа.

Самый надежный способ, в принципе - это доступ через внешний независимый механизм, например Service Broker или CLR / SOAP-сервис. Отправить запрос, в ответ получить данные, напрямую никто никуда доступа не имеет, все решают промежуточные слои. Но по реализации он будет самый геморройный.
26 ноя 13, 19:33    [15194007]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2008R2 опять про цепочи владения  [new]
o-o
Guest
Ennor Tiegael,

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

а Вам предлагаю обсудить назревшую внезапно тему, как раз сейчас описываю происходящее,
осталось запостить (во где тапки огребу!!!)
у меня оно вышло случайно, в порядке эксперимента на тестовой базе.
но получилось интересно
26 ноя 13, 19:56    [15194110]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2008R2 опять про цепочи владения  [new]
o-o
Guest
Ennor Tiegael

Вырожденный случай, также процитированный вами, в принципе решает эту проблему, но только если нет реальных юзеров с правами db_owner (не обязательно sa, кстати). Но это, и без всяких дополнительных баз, дупло такого размера, что больше уже не потребуется. Вы в курсе, например, что если у вас не настроен тотальный аудит (который, кстати, db_owner может легко покоцать), то выяснить, кто же именно дропнул таблицу, у вас не получится даже посредством анализа журнала транзакций? Только до роли, не дальше.



цитата про цепочки владений была выдана ТС-у только потому,
что так названа тема, а цепочки-то и нету, и на вопрос Glory, где же она, он не ответил.

по поводу TRUSTWORTHY мы уже "попререкались" в другой теме, откуда я Вас и помню.
я как раз ПРОТИВ, что в той теме, что в этой.

сертификатный способ в транз. лог записывает исполнителя процедуры,
а я только за него и выступаю.
(т.е. мной проделан эксперимент, где в процедуре дропается таблица в соседней базе,
на таблицу выдан CONTROL сертификатному юзеру, сертификат создан в той базе, перетащен через файл в нужную)
так вот, кто дропал, тот и записался, а не "сертификатный юзер".

хотя сертификат -- тоже муторно, и права на создание его в той, другой базе, тоже надо иметь,
а судя по инфо ТС-а он там только ридер.
27 ноя 13, 00:11    [15195238]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2008R2 опять про цепочи владения  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3394
o-o,

Честно говоря, я никогда не игрался с подписыванием объектов БД сертификатами, кроме брокера (даже не читал, как именно это работает, в общих чертах только). Возможно, потому, что никогда не видел в этом практической необходимости.
o-o
так вот, кто дропал, тот и записался, а не "сертификатный юзер".
Я понимаю, что это несколько уже уход от темы, но все же. У вас, насколько я помню, все юзеры под db_owner ходят. В таком случае поясните, плиз, в журнал какой именно базы пишется реальный удаляющий пользователь - где удаляют, или откуда вызывают удаление? Ибо если первое, то действительно интересно было бы покопаться, как сиквел производит разыменование юзера другой БД, а если второе, то простейшая проверка
+
use master;
go
create login [DropTestUser] with password = ';	kem590t3j98nb9358gh9i8h0ef2';
go
create database DropTest;
go
alter authorization on database::DropTest to [sa];
go
use [DropTest];
go
create user [DropTestUser] from login [DropTestUser];
go
exec sys.sp_addrolemember @rolename = 'db_owner', @membername = 'DropTestUser';
go
use master;
go
select name, owner_sid, create_date, state_desc from sys.databases where name = 'DropTest';
go
execute as login = 'DropTestUser';
go
drop database [DropTest];
go
revert;
go
select name, owner_sid, create_date, state_desc from sys.databases where name = 'DropTest';
go
drop login DropTestUser;
go
напоминает бессмертный диалог:

- У вас на производстве несчастные случаи были?
- Нет.
- Будут!
27 ноя 13, 04:30    [15195895]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2008R2 опять про цепочи владения  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3394
o-o,

А, все, вижу вашу тему.
27 ноя 13, 04:33    [15195902]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2008R2 опять про цепочи владения  [new]
o-o
Guest
Ennor Tiegael
o-o,

В таком случае поясните, плиз, в журнал какой именно базы пишется реальный удаляющий пользователь - где удаляют, или откуда вызывают удаление?


в журнал той, откуда удалили. пишется доменная учетка удалившего.
оно и логично: при подписывании сертификатом "испонителю" процедуры просто добавляются права
сертификатного юзера. это не execute as, где начинается подмена исполнителя и концов не сыщешь, кроме как original_login() в аудите.

и чего бы писать в базу, где исполнили: меняли же другую базу, изменение должно быть откатываемым/накатываемым,
не будем же для recovery(хоть стартового, хоть при восстановлении из бэкапа) использовать лог соседней базы

+
p.s. юзеры не у меня ходят, а у них.
нам, кажись, контракт с ними только по июнь продлили,
прощай SQL Server, засунут меня по профилю BI куда-нибудь отчеты BO клепать.
начальница давно разрешила ставить эксперименты по поиску дыр, под честное слово, что буду это в тесте делать,
в продакшене же та же фигня. она не меньше меня злорадствует, когда у других фокусы начинаются, и концов не сыскать.
все остальные еще и удалены от нас географически
развлекалово, короче.
зато какое у меня поле деятельности(исследований) в связи с их вседозволенными db_owner -ами
27 ноя 13, 09:21    [15196254]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2008R2 опять про цепочи владения  [new]
o-o
Guest
Ennor Tiegael
Ибо если первое, то действительно интересно было бы покопаться, как сиквел производит разыменование юзера другой БД


отчитываюсь о разыменовании.
если процедуру, подписанную сертификатом, исполняет юзер, имеющий логин,
в журнал идет сид логина.
если попробовать исполнить от имени user without login,
то процедура-то запускается, но вот то действие, на к-ое даны права сертификатному юзеру
(сертификатный юзер создан во второй базе, куда запускатель процедуры не отмаплен вовсе),
не выполняется, т.е. права сертификатного товарища добавляются ЛОГИНУ, если его нет, все, облом.
вот поясняющая картинка.
в процедуру добавлено
select * from sys.user_token;
select * from sys.login_token;


user2 имеет логин, юзер ennor создан без логина, и дропнуть таблицу в соседней базе ему не удалось:
Msg 3701, Level 11, State 5, Procedure signed_sp, Line 4
Cannot drop the table 'db1..testtbl', because it does not exist or you do not have permission.


К сообщению приложен файл. Размер - 33Kb
27 ноя 13, 11:42    [15197155]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2008R2 опять про цепочи владения  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3394
o-o,

Мощно :) Спасибо, глядишь, когда-нибудь и понадобится.
27 ноя 13, 15:10    [15199334]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2008R2 опять про цепочи владения  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
А меня бесят понятия которые написаны.
Какое это нафег это "цепочки владения"?! Это тупое ламповое "олицетворение"!
Прикинулся шлангом и дуешь ...

А вот "цепочки владения", это когда автоматически без каких либо телодвижений считается что, тот кто предоставляет что-то предоставляет и права на просмотр этого. Но так не работает.

Ну вот скажите, зачем имея один и тот же набор прав на X, можешь как видеть, так и не "видеть" через него ?
27 ноя 13, 16:47    [15200331]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить