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

Откуда: Магадан
Сообщений: 205
Добрый день.

SQL 2000.
Есть хранимая процедура, которая вызывает xp_cmdshell. Есть стандартный пользователь, которому назначен execute permission на эту хранимую процедуру. Естественно, это не работает.

Давать пользователю разрешение на прямое выполнение xp_cmdshell и настраивать прокси-аккаунт нам совершенно не нужно. Нужно, чтобы пользователь имел к ней только опосредованный доступ, через вызов хранимой процедуры-обёртки, которая всё свалидирует и правильно вызовет.

Есть ли нормальный способ решения этой проблемы, кроме как сделать логин собственника хранимой процедуры также собственником базы данных master и включить cross-database ownership chains (не утверждаю о правильности/возможности этого, просто искал по форуму)?
15 дек 08, 13:29    [6571623]     Ответить | Цитировать Сообщить модератору
 Re: xp_cmdshell: только опосредованный доступ  [new]
Glory
Member

Откуда:
Сообщений: 104760
GSerg


Есть ли нормальный способ решения этой проблемы, кроме как сделать логин собственника хранимой процедуры также собственником базы данных master и включить cross-database ownership chains (не утверждаю о правильности/возможности этого, просто искал по форуму)?

А что в этом способе ненормального, учитывая что процедуры ваши в разных базах находятся ?
15 дек 08, 13:31    [6571637]     Ответить | Цитировать Сообщить модератору
 Re: xp_cmdshell: только опосредованный доступ  [new]
GSerg
Member

Откуда: Магадан
Сообщений: 205
Glory
А что в этом способе ненормального, учитывая что процедуры ваши в разных базах находятся ?

Ну мы не помещаем свои процедуры в master, поэтому они и в разных базах.

Вот, например, помещение их туда -- наверное, еще одно решение этой проблемы. Оно лучше описанного?
15 дек 08, 13:37    [6571684]     Ответить | Цитировать Сообщить модератору
 Re: xp_cmdshell: только опосредованный доступ  [new]
Glory
Member

Откуда:
Сообщений: 104760
GSerg
Glory
А что в этом способе ненормального, учитывая что процедуры ваши в разных базах находятся ?

Ну мы не помещаем свои процедуры в master, поэтому они и в разных базах.

Вот, например, помещение их туда -- наверное, еще одно решение этой проблемы. Оно лучше описанного?

Ну так выбирайте
- две базы но с cross-database ownership chains
или
- одна база без cross-database ownership chains, но системная
15 дек 08, 13:39    [6571704]     Ответить | Цитировать Сообщить модератору
 Re: xp_cmdshell: только опосредованный доступ  [new]
GSerg
Member

Откуда: Магадан
Сообщений: 205
Что-то не работает всё равно.

Или я не так понимаю фразу "логин является собственником."


Смотрю собственников xp_cmdshell и нашей хранимки. Оба "dbo".
Выполняем
EXEC sp_dboption 'Adapter', 'db chaining', 'true'
Выполняется успешно. Глобальная настройка 'Cross DB Ownership Chaining' стоит в 0, поэтому локальная должна правильно вступать в силу.

Притворяемся
setuser 'TestAdapterUser';

Выполняем хранимку-обёртку -- EXECUTE permission denied on object 'xp_cmdshell', database 'master', owner 'dbo'.
15 дек 08, 14:29    [6572102]     Ответить | Цитировать Сообщить модератору
 Re: xp_cmdshell: только опосредованный доступ  [new]
Glory
Member

Откуда:
Сообщений: 104760
У баз владельцем должен быть один логин. Потому что dbo - пользователь базы. А между базами "работают" логины
15 дек 08, 14:31    [6572122]     Ответить | Цитировать Сообщить модератору
 Re: xp_cmdshell: только опосредованный доступ  [new]
GSerg
Member

Откуда: Магадан
Сообщений: 205
Не прошло и полгода (с).
Хотя нет, прошло.


В общем это.
Всё настроили. sa является собственником и master, и Adapter. Межбазовые цепочки включены для Adapter.

Выполняем процедуру-обёртку от имени тестового пользователя -- и
SQL Server
xp_cmdshell failed to execute because current security context is not sysadmin and proxy acount is not setup correctly. For more information, refer to Book Online, search for topic related to xp_sqlagent_proxy_account.


Я не понимаю такого результата. Ведь процедура-обёртка должна выполняться от имени своего создателя, а не от имени вызывающего. Создатель dbo. А получается всё равно current security context is not sysadmin.
29 июн 09, 19:27    [7356038]     Ответить | Цитировать Сообщить модератору
 Re: xp_cmdshell: только опосредованный доступ  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Да, параметр DB_CHAINING нужен для межбазовой цепочки владения, но для контекста олицетворения (для обращения к ресурсам вне базы данных) нужен TRUSTWORTHY.
dbo это пользователь базы, и как вы думаете, он будет олицетворяться с пользователем системы.
29 июн 09, 20:23    [7356150]     Ответить | Цитировать Сообщить модератору
 Re: xp_cmdshell: только опосредованный доступ  [new]
GSerg
Member

Откуда: Магадан
Сообщений: 205
Mnior
TRUSTWORTHY

Нет такого в SQL 2000.

Если есть, значит я не нашёл в BOL его.
29 июн 09, 20:55    [7356204]     Ответить | Цитировать Сообщить модератору
 Re: xp_cmdshell: только опосредованный доступ  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
GSerg
Я не понимаю такого результата. Ведь процедура-обёртка должна выполняться от имени своего создателя, а не от имени вызывающего. Создатель dbo. А получается всё равно current security context is not sysadmin.


ownership chains действуют только на INSERT|UPDATE|DELETE|SELECT. и в 2000, в отличае от старших версии невозможно изменить security context.
29 июн 09, 21:07    [7356220]     Ответить | Цитировать Сообщить модератору
 Re: xp_cmdshell: только опосредованный доступ  [new]
GSerg
Member

Откуда: Магадан
Сообщений: 205
pkarklin
ownership chains действуют только на INSERT|UPDATE|DELETE|SELECT. и в 2000, в отличае от старших версии невозможно изменить security context.

Но ведь на EXEC они тоже действуют.
Если одна хранимка вызывает другую, причём у пользователя нет прав на вызов внутренней, но есть на вызов внешней, всё будет работать.

Хорошо.

С контекстом безопасности, в 2008 как можно будет заставить этот сценарий работать? То же самое плюс установка trustworthy для Adapter?
30 июн 09, 03:03    [7356966]     Ответить | Цитировать Сообщить модератору
 Re: xp_cmdshell: только опосредованный доступ  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
GSerg
Если одна хранимка вызывает другую, причём у пользователя нет прав на вызов внутренней, но есть на вызов внешней, всё будет работать.


Дело не только в правах, но и во владельцах объектов. А у Вас, кроме того, расширенная хп, да еще и в другой бд. Так что цепочка владения разована полюбому.

GSerg
С контекстом безопасности, в 2008 как можно будет заставить этот сценарий работать? То же самое плюс установка trustworthy для Adapter?


Как минимум еще надо будет сменить контекст выполнения на логин с правами sysadmin с помощью EXECUTE AS.
30 июн 09, 09:38    [7357259]     Ответить | Цитировать Сообщить модератору
 Re: xp_cmdshell: только опосредованный доступ  [new]
Crimean
Member

Откуда:
Сообщений: 13148
xp_cmdshell - чуть особенная внешняя хранимка
боюсь, прокси акаунт настроить придется
30 июн 09, 11:00    [7357659]     Ответить | Цитировать Сообщить модератору
 Re: xp_cmdshell: только опосредованный доступ  [new]
GSerg
Member

Откуда: Магадан
Сообщений: 205
pkarklin
Дело не только в правах, но и во владельцах объектов. А у Вас, кроме того, расширенная хп, да еще и в другой бд. Так что цепочка владения разована полюбому.

Так владелец этих БД один и тот же, и включены межбазовые цепочки владения.
Когда цепочка была разорвана (полгода назад, см. выше), ошибка была EXECUTE permission denied on object 'xp_cmdshell', database 'master', owner 'dbo'. А теперь цепочка восстановлена, и ошибка failed to execute because current security context is not sysadmin and proxy acount is not setup correctly.

pkarklin
Как минимум еще надо будет сменить контекст выполнения на логин с правами sysadmin с помощью EXECUTE AS.

Вот здесь я и не понимаю. Почему этого контекста нет при выполнении процедуры от имени создателя? Создатель был же сисадмином. И какой контекст тогда есть?

Crimean
xp_cmdshell - чуть особенная внешняя хранимка
боюсь, прокси акаунт настроить придется

Так вот этого я и не понимаю. Прекрасно, что её напрямую не могут вызывать пользователи, но почему то же наблюдается изнутри хранимой процедуры, выполняемой от имени создателя, не понимаю.
30 июн 09, 12:10    [7358224]     Ответить | Цитировать Сообщить модератору
 Re: xp_cmdshell: только опосредованный доступ  [new]
Glory
Member

Откуда:
Сообщений: 104760
GSerg
pkarklin
Дело не только в правах, но и во владельцах объектов. А у Вас, кроме того, расширенная хп, да еще и в другой бд. Так что цепочка владения разована полюбому.

Так владелец этих БД один и тот же, и включены межбазовые цепочки владения.
Когда цепочка была разорвана (полгода назад, см. выше), ошибка была EXECUTE permission denied on object 'xp_cmdshell', database 'master', owner 'dbo'. А теперь цепочка восстановлена, и ошибка failed to execute because current security context is not sysadmin and proxy acount is not setup correctly.

А вы читали в хелпе про права запуска xp_cmdshell ?
И ownership chains является механизмом, который опускает проверку(!) прав на доступ(!) к объекту, если владельцы совпадают.
Он никогда не был механизмом обращения к объекту под другим пользователем/логином
30 июн 09, 12:15    [7358266]     Ответить | Цитировать Сообщить модератору
 Re: xp_cmdshell: только опосредованный доступ  [new]
Crimean
Member

Откуда:
Сообщений: 13148
овнершип чейн убрала "EXECUTE permission denied on object 'xp_cmdshell', database 'master', owner 'dbo'."
остальное - в хелпе по "xp_cmdshell", уж почитайте хоть разик
30 июн 09, 12:19    [7358298]     Ответить | Цитировать Сообщить модератору
 Re: xp_cmdshell: только опосредованный доступ  [new]
GSerg
Member

Откуда: Магадан
Сообщений: 205
Glory
А вы читали в хелпе про права запуска xp_cmdshell ?

Мы не просто читали в хелпе про права запуска xp_cmdshell, мы медитировали на них неограниченное количество времени. Мы их по памяти можем цитировать.

Я понимаю условия, необходимые для её работы.
Я единственно не понимал, почему в моей ситуации эти условия не выполняются. Т.к. в моём представлении, необходимый для её работы контекст обеспечивался выполнением хранимки от имени создателя.
Вы, кстати, мою неуверенность подогрели постом от 15 дек 08, 13:39. Из него я совсем уверовал, что дело только в цепочках и что по факту настройки оных всё заработает.

Glory
И ownership chains ... никогда не был механизмом обращения к объекту под другим пользователем/логином

Спасибо, теперь понятно.

Перейдём на 2008, попробуем execute as воткнуть в хранимку.
Хотя если честно, из фразы "To specify EXECUTE AS on a login, the caller must have IMPERSONATE permissions on the specified login name" опять непонятно, кто при этом будет считаться caller'ом. Владелец процедуры или реально вызывающий (в последнем случае опять не получится (а мне кажется, что так и будет)).
30 июн 09, 12:29    [7358383]     Ответить | Цитировать Сообщить модератору
 Re: xp_cmdshell: только опосредованный доступ  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3205
GSerg
Перейдём на 2008, попробуем execute as воткнуть в хранимку.
Хотя если честно, из фразы "To specify EXECUTE AS on a login, the caller must have IMPERSONATE permissions on the specified login name" опять непонятно, кто при этом будет считаться caller'ом. Владелец процедуры или реально вызывающий (в последнем случае опять не получится (а мне кажется, что так и будет)).
А вот чтобы обойти это, нужно включить TRUSTWORTHY на базе.
30 июн 09, 12:32    [7358394]     Ответить | Цитировать Сообщить модератору
 Re: xp_cmdshell: только опосредованный доступ  [new]
Glory
Member

Откуда:
Сообщений: 104760
Над этим тоже медитировали ?

When xp_cmdshell is invoked by a user who is a member of the sysadmin fixed server role, xp_cmdshell will be executed under the security context in which the SQL Server service is running. When the user is not a member of the sysadmin group, xp_cmdshell will impersonate the SQL Server Agent proxy account, which is specified using xp_sqlagent_proxy_account. If the proxy account is not available, xp_cmdshell will fail.
30 июн 09, 12:32    [7358395]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить