powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как выполнить xp_cmdshell?
9 сообщений из 9, страница 1 из 1
Как выполнить xp_cmdshell?
    #32015114
Inna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Необходимо выполнить процедуру xp_cmdshell через пользовательскую процедуру.
Явных прав на исполнение xp_cmdshell у залогинившегося пользователя нет, но пользовательская процедура создана sysadmin-ом. В ответ получаю сообщение "EXECUTE permission denied on object 'xp_cmdshell', database 'master', owner 'dbo'."
Что не так? (SQL Server 2000)
...
Рейтинг: 0 / 0
Как выполнить xp_cmdshell?
    #32015117
asdf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я тоже сталкивался с такой проблемой,
в конечном итоге пришлось дать права на выполнение данной процедуры
...
Рейтинг: 0 / 0
Как выполнить xp_cmdshell?
    #32015119
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"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 . This is true only for Microsoft® Windows NT® 4.0 and Windows 2000. On Windows 9.x, there is no impersonation and xp_cmdshell is always executed under the security context of the Windows 9.x user who started SQL Server."

Т.е. выбираете учетную запись с правами которой будет стартовать xp_cmdshell для пользователей не sysadmin-ов и делаете так

exec master..xp_sqlagent_proxy_account N'SET', N'agent_domain_name', N'agent_username', N'agent_password'

NB! agent_password - case sensitive

exec master..xp_sqlagent_proxy_account N'GET' - для проверки
...
Рейтинг: 0 / 0
Как выполнить xp_cmdshell?
    #32015147
AlexR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А как решить эту же проблему если стоит MS SQL Server 7.0.
...
Рейтинг: 0 / 0
Как выполнить xp_cmdshell?
    #32015173
Inna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо, друзья.

У меня уже получилось. Оказывается, процедура-обертка, вызывающая xp_cmdshell, должна находиться в той же базе, что и xp_cmdshell, то есть в базе master. Только в этом случае работает правило "ownership chain", дающее возможность обращаться к объектам, использующимся в процедуре, с правами владельца этой процедуры.

To Glory: Спасибо,я знаю об этой возможности, но она у меня почему-то не работает. Вернее, раньше работала, но вследствие бесконтрольного изменения настроек(это в порядке самокритики) теперь уже и этот вариант не проходит, хотя вроде и прокси-аккаунту даны права сисадмина(и в NT и на SQL Server).
...
Рейтинг: 0 / 0
Как выполнить xp_cmdshell?
    #32015175
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Оказывается, процедура-обертка, вызывающая xp_cmdshell, должна находиться в той же базе, что и xp_cmdshell, то есть в базе master."

Скорее всего владелец "процедуры-обертки" должен быть пользователем и базы master. По крайней мере у меня для владельца dbo (для master и userdb это один и тот же login) все прекрасно работает и в том случае, если "процедура-обертка" и xp_cmdshell находятся в разных базах
...
Рейтинг: 0 / 0
Как выполнить xp_cmdshell?
    #32015180
Inna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У вас, наверное, dbo - это сисадмин(по умолчанию логину sa соответствует пользователь dbo).
А задача стояла предоставить права на выполнение xp_cmdshell(с определенными параметрами) обычным пользователям.
...
Рейтинг: 0 / 0
Как выполнить xp_cmdshell?
    #32015181
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так я и говорю, что когда вы перенесли "процедуру-обертку" в базу master вы сделали владельца этой процедуры пользователем базы master. А можно просто сделать его пользователем базы master без переноса процедуры
...
Рейтинг: 0 / 0
Как выполнить xp_cmdshell?
    #32015202
Inna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон, я невнимательно прочла Ваш предыдущий ответ. Да, владелец процедуры-обертки и есть сисадмин.
Вопрос был в том, чтобы дать права обычным пользователям, не сисадминам, права на выполнение xp_cmdshell посредством процедуры-обертки с правами ее владельца. Процедура нужна в целях безопасности, чтобы не давать всем пользователям явных прав на выполнение xp_cmdshell. Процедура выполняет строго определенные действия (конкретно, dtsrun), и обычный пользователь БД не сможет, например, форматнуть диск в приступе праведного гнева на администратора БД.

А у Вас, наверное, прокси-аккаунт настроен, раз обычные пользователи могут к xp_cmdshell из любой базы обращаться?
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как выполнить xp_cmdshell?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]