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

Откуда:
Сообщений: 287
Есть 2 процедуры :

CREATE PROCEDURE [dbo].[HostList]
as


EXECUTE AS CALLER;
SELECT * FROM sys.sysprocesses;    
REVERT;



CREATE PROCEDURE [dbo].[Test1]
WITH EXECUTE AS OWNER 
as


exec HostList



Если вызвать exec HostList - то будет удачно выдан список всех подключений к серверу

А если вызвать exec Test1, то я получу только свое подключение

Поясните пожалуйста теорию, как WITH EXECUTE AS OWNER в вызывающей процедуре влияет на EXECUTE AS CALLER в другой процедуре.

Может сразу подскажите как сделать, чтобы процедура HostList всегда отдавала список всех подключений в независимости от вызывающий ситуаций.
16 май 16, 21:17    [19180746]     Ответить | Цитировать Сообщить модератору
 Re: sys.sysprocesses и права  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
Пашок
Может сразу подскажите как сделать, чтобы процедура HostList всегда отдавала список всех подключений в независимости от вызывающий ситуаций.
1. Установить для БД trustworthy в on.
2. Владелец БД должен иметь разрешение view server state.

ЗЫ: execute as caller можно не писать - это значение по-умолчанию.
16 май 16, 22:00    [19180951]     Ответить | Цитировать Сообщить модератору
 Re: sys.sysprocesses и права  [new]
o-o
Guest
ну вы чего-то наворотили.
в первой процедуре вы возвращаете контекст CALLER-а.
спрашивается, зачем, если процедура не создавалась с WITH EXECUTE AS.
но в общем в этой процедуре вы все еще вы, админ с логином domen\Pashok.

во второй процедуре вы прописали WITH EXECUTE AS OWNER.
и закрыли песочницу.
в первой процедуре ваши права уровня сервера были все еще на всем сервере.
как только вы написали WITH EXECUTE AS OWNER, процедура стала исполняться от имени юзера dbo.
а у юзера права только в его песочнице -- в базе.
на сервере прав нет.

почему это сделано.
потому что иначе все овнеры баз поднимали бы себе права до уровня сервера,
исполняя все как dbo.

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

как надо делать по-хорошему?
через сертификаты
16 май 16, 22:09    [19181028]     Ответить | Цитировать Сообщить модератору
 Re: sys.sysprocesses и права  [new]
o-o
Guest
invm
ЗЫ: execute as caller можно не писать - это значение по-умолчанию.

это with execute as caller -- clause по умолчанию.
а execute as caller -- это возврат в контекст caller-а, если процедура создана с with execute as.
----------------------------------------
with execute as caller -- это clause.
а execute as caller -- это statement
16 май 16, 22:15    [19181047]     Ответить | Цитировать Сообщить модератору
 Re: sys.sysprocesses и права  [new]
felix_ff
Member

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

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


Если не сложно поясните что вы имели ввиду. Ибо любой dbo априори член sysadmin тогда как член db_owner таковым не является и прав повышения уровня привилегий позволяющего ему стать sysadmin у него нет, если не выданы явно impersonate права.

Или я что то путаю?
17 май 16, 00:17    [19181406]     Ответить | Цитировать Сообщить модератору
 Re: sys.sysprocesses и права  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
felix_ff,

Dbo - это просто владелец конкретной базы. Database owner. Или я что то путаю?
17 май 16, 00:45    [19181448]     Ответить | Цитировать Сообщить модератору
 Re: sys.sysprocesses и права  [new]
o-o
Guest
felix_ff
o-o,
Если не сложно поясните что вы имели ввиду. Ибо любой dbo априори член sysadmin тогда как член db_owner таковым не является и прав повышения уровня привилегий позволяющего ему стать sysadmin у него нет

Вот именно что, dbo это юзер, соответствующий владельцу базы. И пока база не TRUSTWORTHY, все хорошо, мы можем имперсонэйтить овнера, но его права в базе равны нашим.
А теперь в базе со владельцем-членом группы sysadmin выставьте TRUSTWORTHY ON.
И от имени любого члена роли db_owner в трастворсовой базе выполните execute as user = 'dbo'.
А теперь выполните select system_user и посмотрите свои права на сервер. Дб_овнер стал не просто владельцем базы, он получил его права на сервер.
TRUSTWORTHY открывает песочницу.
----
У ТС проблема обратная.
Он пытается дать серверные права юзеру.
Это бесполезно, права уровня сервера надо давать логину, потому что по умолчанию песочница закрыта.
Но прежде чем ее открывать, надо подумать, есть ли дб_овнеры не sysadminы и оценить серверные права владельца базы
17 май 16, 08:15    [19181655]     Ответить | Цитировать Сообщить модератору
 Re: sys.sysprocesses и права  [new]
Владислав Колосов
Member

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

владелец второй процедуры не имеет прав View server state. Но кому попало такие разрешения не дают.
17 май 16, 11:34    [19182637]     Ответить | Цитировать Сообщить модератору
 Re: sys.sysprocesses и права  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
Владислав Колосов
владелец второй процедуры не имеет прав View server state
Владелец процедуры такого разрешения иметь не может в принципе. Это разрешение уровня сервера, а не БД.
17 май 16, 11:40    [19182683]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить