Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2      [все]
 Права на запуск ХП  [new]
rsolanov
Member

Откуда:
Сообщений: 930
Здравствуйте.
Я написал ХП под учетной записью, обладающей фиксированной серверной ролью sysadmin. Предоставил другой учетной записи, из под которой все это будет работать права на выполнение этой ХП. При попытке выполнить ХП происходит ошибка нехватки прав на чтение внутренних таблиц. Допустим я не хочу явно предоставлять этой учетной записи права на чтение всех внутренних таблиц в ХП, как можно решить проблему?
14 июн 13, 09:40    [14432041]     Ответить | Цитировать Сообщить модератору
 Re: Права на запуск ХП  [new]
invm
Member

Откуда: Москва
Сообщений: 9442
1. Ownership Chains
2. EXECUTE AS Clause
14 июн 13, 09:44    [14432066]     Ответить | Цитировать Сообщить модератору
 Re: Права на запуск ХП  [new]
rsolanov
Member

Откуда:
Сообщений: 930
invm,
1. Межбазовые цепочки владение не причем, поскольку в ХП все таблицы принадлежат в одной БД;
2. Пробовал with EXECUTE AS 'Admin', где 'Admin' обладает ролью sysadmin. При попытке выполнить ХП происходит ошибка: The server principal "UserAdmin" is not able to access the database "xxx" under the current security context.
14 июн 13, 09:51    [14432102]     Ответить | Цитировать Сообщить модератору
 Re: Права на запуск ХП  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
rsolanov
Здравствуйте.
Я написал ХП под учетной записью, обладающей фиксированной серверной ролью sysadmin. Предоставил другой учетной записи, из под которой все это будет работать права на выполнение этой ХП. При попытке выполнить ХП происходит ошибка нехватки прав на чтение внутренних таблиц. Допустим я не хочу явно предоставлять этой учетной записи права на чтение всех внутренних таблиц в ХП, как можно решить проблему?

Как сказали выше:

ALTER PROCEDURE rpc_name WITH EXECUSE AS OWNER AS...
14 июн 13, 09:52    [14432109]     Ответить | Цитировать Сообщить модератору
 Re: Права на запуск ХП  [new]
angel_zar
Member

Откуда: Барнаул
Сообщений: 902
1 А ХП в какой базе находится???
14 июн 13, 09:53    [14432110]     Ответить | Цитировать Сообщить модератору
 Re: Права на запуск ХП  [new]
rsolanov
Member

Откуда:
Сообщений: 930
angel_zar
1 А ХП в какой базе находится???
ХП и все внутренние таблицы находятся в той же БД, в контексте которой происходит подключение. То есть все механизмы безопасности, связанные с межбазовыми цепочками владения и т. п. отбрасываем.
14 июн 13, 09:58    [14432128]     Ответить | Цитировать Сообщить модератору
 Re: Права на запуск ХП  [new]
Сергей Викт.
Member

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

а execute as owner вы пробовали? Не Admin, а owner
14 июн 13, 10:05    [14432156]     Ответить | Цитировать Сообщить модератору
 Re: Права на запуск ХП  [new]
rsolanov
Member

Откуда:
Сообщений: 930
Сергей Викт., видимо я не досказал: ХП принадлежит схеме [schema_xxx], которая в свою очередь принадлежит роли role_xxx.
У этой роли есть явное разрешение на запуск этой ХП, но отсутствуют разрешения на чтение внутренних таблиц.
14 июн 13, 10:15    [14432199]     Ответить | Цитировать Сообщить модератору
 Re: Права на запуск ХП  [new]
invm
Member

Откуда: Москва
Сообщений: 9442
rsolanov
1. Межбазовые цепочки владение не причем, поскольку в ХП все таблицы принадлежат в одной БД;
Читать статью по ссылке с самого начала не пробовали?
rsolanov
Пробовал with EXECUTE AS 'Admin', где 'Admin' обладает ролью sysadmin. При попытке выполнить ХП происходит ошибка: The server principal "UserAdmin" is not able to access the database "xxx" under the current security context.
Ролью sysadmin может обладать логин. Указать логин в предложении execute as для процедуры нельзя. Так что совершенно не понятно что и как вы там выполняете.
rsolanov
ХП принадлежит схеме [schema_xxx], которая в свою очередь принадлежит роли role_xxx.
У этой роли есть явное разрешение на запуск этой ХП
В этом случае роли не нужно явное разрешение на запуск процедуры.
14 июн 13, 10:28    [14432266]     Ответить | Цитировать Сообщить модератору
 Re: Права на запуск ХП  [new]
rsolanov
Member

Откуда:
Сообщений: 930
invm, я прошу помощи, что в итоге необходимо сделать то?
14 июн 13, 10:34    [14432306]     Ответить | Цитировать Сообщить модератору
 Re: Права на запуск ХП  [new]
invm
Member

Откуда: Москва
Сообщений: 9442
rsolanov
invm, я прошу помощи, что в итоге необходимо сделать то?
Либо у ХП и таблицы должен быть один владелец, либо выполнять ХП в контексте пользователя с необходимыми разрешениями.
14 июн 13, 10:43    [14432367]     Ответить | Цитировать Сообщить модератору
 Re: Права на запуск ХП  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
rsolanov
я прошу помощи, что в итоге необходимо сделать то?


Вы бы задачу изложили, а не придуманный Вами способ ее решения. Если бы можно было бы с легкостью имперсонироваться в sysadmin - это было бы дырой в системе безопасности MS SQL.
14 июн 13, 10:43    [14432371]     Ответить | Цитировать Сообщить модератору
 Re: Права на запуск ХП  [new]
rsolanov
Member

Откуда:
Сообщений: 930
Хорошо, я понял, тогда опишу что именно надо.
В БД есть специально созданная схема, внутри которой имеется набор ХП.
Необходимо настроить безопасность таким образом, чтобы для вызова на выполнение каждой из ХП, входящих в данную схему, не надо было явно прописывать права на чтение вложенных таблиц.
То есть у логина должны быть только права на запуск ХП и все. Как это наиболее грамотно можно реализовать?
17 июн 13, 09:56    [14440291]     Ответить | Цитировать Сообщить модератору
 Re: Права на запуск ХП  [new]
qwerty112
Guest
rsolanov,

14432156
17 июн 13, 09:59    [14440304]     Ответить | Цитировать Сообщить модератору
 Re: Права на запуск ХП  [new]
rsolanov
Member

Откуда:
Сообщений: 930
qwerty112, но это не работает.
17 июн 13, 10:55    [14440695]     Ответить | Цитировать Сообщить модератору
 Re: Права на запуск ХП  [new]
Glory
Member

Откуда:
Сообщений: 104760
rsolanov
qwerty112, но это не работает.

Работает.
А когда не работает, то выдает ошибку
17 июн 13, 10:59    [14440732]     Ответить | Цитировать Сообщить модератору
 Re: Права на запуск ХП  [new]
rsolanov
Member

Откуда:
Сообщений: 930
Glory
rsolanov
qwerty112, но это не работает.

Работает.
А когда не работает, то выдает ошибку
Ошибка: Connot execute as the database principal becouse the principal "role_xxx" does not exist, this type of principal cannot be impersonated, or you do not have permission.
17 июн 13, 11:20    [14440902]     Ответить | Цитировать Сообщить модератору
 Re: Права на запуск ХП  [new]
Glory
Member

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

Работает.
А когда не работает, то выдает ошибку
Ошибка: Connot execute as the database principal becouse the principal "role_xxx" does not exist, this type of principal cannot be impersonated, or you do not have permission.

А вы читали раздел Permissions для EXECUTE AS ?
Или просто прописали EXECUTE AS, посчитав, что этого достаточно ?
17 июн 13, 11:23    [14440947]     Ответить | Цитировать Сообщить модератору
 Re: Права на запуск ХП  [new]
rsolanov
Member

Откуда:
Сообщений: 930
Glory, цитата из msdn:
Для выполнения модуля с указанным предложением EXECUTE AS пользователь должен иметь разрешение EXECUTE на модуль.
Только мне не понятно что тут подразумевается под модулем?
17 июн 13, 11:31    [14441025]     Ответить | Цитировать Сообщить модератору
 Re: Права на запуск ХП  [new]
invm
Member

Откуда: Москва
Сообщений: 9442
rsolanov
ХП принадлежит схеме [schema_xxx], которая в свою очередь принадлежит роли role_xxx.
При таком раскладе, когда владелец схемы роль, вы вообще не сможете создать процедуру с execute as owner.
17 июн 13, 11:32    [14441030]     Ответить | Цитировать Сообщить модератору
 Re: Права на запуск ХП  [new]
Glory
Member

Откуда:
Сообщений: 104760
rsolanov
Glory, цитата из msdn:
Для выполнения модуля с указанным предложением EXECUTE AS пользователь должен иметь разрешение EXECUTE на модуль.
Только мне не понятно что тут подразумевается под модулем?

http://msdn.microsoft.com/en-us/library/ms181362.aspx

To specify EXECUTE AS on a login, the caller must have IMPERSONATE permissions on the specified login name. To specify EXECUTE AS on a database user, the caller must have IMPERSONATE permissions on the specified user name. When EXECUTE AS CALLER is specified, IMPERSONATE permissions are not required.
17 июн 13, 11:34    [14441051]     Ответить | Цитировать Сообщить модератору
 Re: Права на запуск ХП  [new]
qwerty112
Guest
rsolanov
qwerty112, но это не работает.

"не работают" - негры в Африке
14152517
17 июн 13, 11:41    [14441118]     Ответить | Цитировать Сообщить модератору
 Re: Права на запуск ХП  [new]
rsolanov
Member

Откуда:
Сообщений: 930
qwerty112, Glory: Владельцем схемы, в которой находятся ХП, является роль. Как вы и подсказали, в ХП прописал "with execute as owner". Этой роли я дал право IMPERSONATE для пользователя БД, с которым связан логин, но все равно та же ошибка.
17 июн 13, 11:56    [14441236]     Ответить | Цитировать Сообщить модератору
 Re: Права на запуск ХП  [new]
Glory
Member

Откуда:
Сообщений: 104760
rsolanov
Этой роли я дал право IMPERSONATE для пользователя БД, с которым связан логин, но все равно та же ошибка.

Потому что To specify EXECUTE AS on a login, the caller must have IMPERSONATE
17 июн 13, 12:00    [14441260]     Ответить | Цитировать Сообщить модератору
 Re: Права на запуск ХП  [new]
rsolanov
Member

Откуда:
Сообщений: 930
Glory
rsolanov
Этой роли я дал право IMPERSONATE для пользователя БД, с которым связан логин, но все равно та же ошибка.

Потому что To specify EXECUTE AS on a login, the caller must have IMPERSONATE
А разве не это сделал: "Этой роли дал право IMPERSONATE для пользователя БД"?
17 июн 13, 12:05    [14441307]     Ответить | Цитировать Сообщить модератору
 Re: Права на запуск ХП  [new]
Glory
Member

Откуда:
Сообщений: 104760
rsolanov
А разве не это сделал: "Этой роли дал право IMPERSONATE для пользователя БД"?

Вы понимаете, кто такой caller ?
Это тот, кто вызывает процедуру. А не тот, кто ей владеет
17 июн 13, 12:07    [14441316]     Ответить | Цитировать Сообщить модератору
 Re: Права на запуск ХП  [new]
rsolanov
Member

Откуда:
Сообщений: 930
Glory, я понимаю что caller для ХП это пользователь БД, но только я не понимаю какую последовательность действий необходимо проделать чтобы выполнить условие "the caller must have IMPERSONATE".
17 июн 13, 12:18    [14441386]     Ответить | Цитировать Сообщить модератору
 Re: Права на запуск ХП  [new]
Glory
Member

Откуда:
Сообщений: 104760
А какая послдедовательность действий должна быть на "must have ... permissions" ?
Наверное назначить эти permissions
17 июн 13, 12:25    [14441421]     Ответить | Цитировать Сообщить модератору
 Re: Права на запуск ХП  [new]
rsolanov
Member

Откуда:
Сообщений: 930
Glory, и еще один момент: если все таблицы, используемые в ХП принадлежат той же БД, что и ХП и все остальное, то зачем нужно использовать олицетворение?
17 июн 13, 12:28    [14441434]     Ответить | Цитировать Сообщить модератору
 Re: Права на запуск ХП  [new]
Glory
Member

Откуда:
Сообщений: 104760
rsolanov
если все таблицы, используемые в ХП принадлежат той же БД, что и ХП и все остальное, то зачем нужно использовать олицетворение?

Чтобы любой встречный не мог "сказать" - хочу олицетворяться как sa.
17 июн 13, 12:30    [14441444]     Ответить | Цитировать Сообщить модератору
 Re: Права на запуск ХП  [new]
rsolanov
Member

Откуда:
Сообщений: 930
Glory
А какая послдедовательность действий должна быть на "must have ... permissions" ?
Наверное назначить эти permissions
Это?
GRANT IMPERSONATE ON USER::[PreTrading] TO [role_Clearinghouse]
GO
17 июн 13, 12:38    [14441482]     Ответить | Цитировать Сообщить модератору
 Re: Права на запуск ХП  [new]
Glory
Member

Откуда:
Сообщений: 104760
Такое впечатление, что вы не отличаете лево и право

--Give IMPERSONATE permissions on user2 to user1
--so that user1 can successfully set the execution context to user2.
GRANT IMPERSONATE ON USER:: user2 TO user1;
17 июн 13, 12:40    [14441493]     Ответить | Цитировать Сообщить модератору
 Re: Права на запуск ХП  [new]
rsolanov
Member

Откуда:
Сообщений: 930
Glory
Такое впечатление, что вы не отличаете лево и право

--Give IMPERSONATE permissions on user2 to user1
--so that user1 can successfully set the execution context to user2.
GRANT IMPERSONATE ON USER:: user2 TO user1;
Но дело в том, что нет никакого user1 и user2, а есть только пользователь PreTrading и роль role_Clearinghouse.
17 июн 13, 12:59    [14441632]     Ответить | Цитировать Сообщить модератору
 Re: Права на запуск ХП  [new]
Glory
Member

Откуда:
Сообщений: 104760
rsolanov
Но дело в том, что нет никакого user1 и user2, а есть только пользователь PreTrading и роль role_Clearinghouse.

фейспалм просто
Олицетворятся ролью нельзя.
Вы хотите сказать, что у вас роль владаеет процедурой ?
17 июн 13, 13:03    [14441658]     Ответить | Цитировать Сообщить модератору
 Re: Права на запуск ХП  [new]
rsolanov
Member

Откуда:
Сообщений: 930
Glory
rsolanov
Но дело в том, что нет никакого user1 и user2, а есть только пользователь PreTrading и роль role_Clearinghouse.

фейспалм просто
Олицетворятся ролью нельзя.
Вы хотите сказать, что у вас роль владеет процедурой ?
У ХП владельцем является схема, у схемы владелец роль. Я изменил владельца схемы с роли на пользователя. Изменил вызов ХП с with execute as owner на as 'Admin', раздал права:
GRANT IMPERSONATE ON USER::[Admin] TO [PreTrading]
GO
Но ничего не изменилось!
17 июн 13, 13:24    [14441829]     Ответить | Цитировать Сообщить модератору
 Re: Права на запуск ХП  [new]
nezhadnye_my
Guest
create database rsolanov;
go

use rsolanov;
create user no_rights without login;  -- бесправный пользователь
create user t_owner without login; -- будущий владелец схемы (и таблиц в ней)
go

create schema t_owner_sch authorization t_owner; -- сделали владельцем схемы
go

create table t_owner_sch.t(id int);
go

create proc t_owner_sch.p 
with execute as 't_owner'  -- исполняется от имени владельца схемы
as
select * from t_owner_sch.t;
go


grant execute on  t_owner_sch.p  to no_rights; -- дали права только на процедуру
go

execute as user = 'no_rights' /*смотрим, как оно будет, когда бесправный пользователь запустит. в Ваш код это не надо, это только тест!*/
select * from t_owner_sch.t; -- облом

exec t_owner_sch.p; -- достучался

revert -- /*вернули пользователя на своего; Вам оно тоже не надо, это часть теста*/
17 июн 13, 14:00    [14442085]     Ответить | Цитировать Сообщить модератору
 Re: Права на запуск ХП  [new]
invm
Member

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

В данном конкретном случае with execute as не нужно.
17 июн 13, 14:08    [14442149]     Ответить | Цитировать Сообщить модератору
 Re: Права на запуск ХП  [new]
nezhadnye_my
Guest
invm,
правильно.
у меня выше прямо "два в одном".
rsolanov, если владелец схемы и таблиц один и тот же, не надо даже execute as.

execute as нужно, если вот так:
create proc dbo.p 
with execute as 't_owner'  -- исполняется от имени владельца схемы
as
select * from t_owner_sch.t;
go


grant execute on  dbo.p  to no_rights; -- дали права только на процедуру
go

execute as user = 'no_rights' /*смотрим, как оно будет, когда бесправный пользователь запустит. в Ваш код это не надо, это только тест!*/
select * from t_owner_sch.t; -- облом

exec dbo.p; -- достучался

revert -- /*вернули пользователя на своего; Вам оно тоже не надо, это часть теста*/
17 июн 13, 14:23    [14442271]     Ответить | Цитировать Сообщить модератору
 Re: Права на запуск ХП  [new]
nezhadnye_my
Guest
вернее, так: если владелец процедуры и таблиц один и тот же.
т.е. как, например, выше было: если они все в одной схеме и никому явно владельца не переопределяли
17 июн 13, 14:27    [14442300]     Ответить | Цитировать Сообщить модератору
 Re: Права на запуск ХП  [new]
invm
Member

Откуда: Москва
Сообщений: 9442
nezhadnye_my
вернее, так: если владелец процедуры и таблиц один и тот же.
т.е. как, например, выше было: если они все в одной схеме и никому явно владельца не переопределяли
ТС'у уже давалась, в первом же посте ссылка на теорию, и писалось это же самое в середине обсуждения.
Видимо, ТС не читатель...
17 июн 13, 14:34    [14442343]     Ответить | Цитировать Сообщить модератору
 Re: Права на запуск ХП  [new]
nezhadnye_my
Guest
invm,
+
как бы с той недели топик читаю, в курсе :)
у меня уже просто последняя попытка донести написанное ранее до ТС
(по комментам можно было догадаться,типа "revert в код себе не заноси" )
17 июн 13, 14:38    [14442373]     Ответить | Цитировать Сообщить модератору
 Re: Права на запуск ХП  [new]
rsolanov
Member

Откуда:
Сообщений: 930
Спасибо вам всем огромное за помощь, с вашей помощью полностью разобрался в этом вопросе и все получилось! СПАСИБО!
17 июн 13, 16:01    [14443058]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Microsoft SQL Server Ответить