powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Моя борьба с xp_cmdshell - никак не могу заставить работать прокси.
12 сообщений из 12, страница 1 из 1
Моя борьба с xp_cmdshell - никак не могу заставить работать прокси.
    #39759850
IKSparrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет тебе общественный разум.

Итак, исходная стойка:
1. Microsoft SQL Server 2014 (SP3) (KB4022619) - 12.0.6024.0 (X64)
Sep 7 2018 01:37:51
Copyright (c) Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
2. Служба SQL запущена под его штатной, локальной, учетной записью - [NT Service\MSSQL$DVLSRV]
3. Машина, на которой находится сам SQL - в домене.
4. В этом домене есть вторая машина, где работает ещё один SQL-сервер.
5. На второй машине делается бэкап рабочей базы компании (она там одна - и база и компания) и складывается в определенный каталог на локальном диске второго компьютера
6. Локальный каталог проброшен посредством mklink /D со второй машины на локальный диск первой машины.

Теперь, собственно суть.
Предполагается, что копия базы будет браться из этого проброшенного каталога, разворачиваться на SQL первой машины, проходить некоторую пост-обработку и предоставляться заказчику.

И всё бы ничего, но встретился неожиданный затык - xp_cmdshell. То ли я некорректно, что-то делаю, то ли я слишком большие надежды на него возлагаю. Но затык происходит ещё на самом первом этапе - чтения содержимого прилинкованного каталога на первой машине.

Стоит запустить SQL службу от доменного админа, как всё прекрасно читается в каталоге. Но мы же лёгких путей не ищем. Поэтому:

1. Создана доменная учётка с минимальными правами (MyDomain\SBO)
2. Этой учётке на второй машине даны права на чтение и просмотр содержимого каталога, куда складываются копии базы
3. Создан мандат (credential) ##xp_cmdshell_proxy_account## с учеткой MyDomain\SBO
4. Учетке дан логин на первом сервере SQL и права на EXECUTE и CONTROL SERVER. Включена в группу public

И вот, под этой учеткой я выполняю контрольный код, чтобы понять - под кем же я сейчас буду просматривать каталог:

Код: sql
1.
2.
3.
4.
EXECUTE AS LOGIN = 'MyDomain\SBO' ;
GO 
EXEC master..xp_cmdshell 'whoami.exe'
REVERT ;



И я вижу, что cmdshell выполняется от имени:
[NT Service\MSSQL$DVLSRV]

Какого чёрта? Ведь в документации написано, что прокси на cmdshell используется у учетки, которая не включена в группу sysadmins. Что я не так делаю?
...
Рейтинг: 0 / 0
Моя борьба с xp_cmdshell - никак не могу заставить работать прокси.
    #39759853
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IKSparrowКакого чёрта? Ведь в документации написано, что прокси на cmdshell используется у учетки, которая не включена в группу sysadmins. Что я не так делаю?
там еще написано, что или сисадмин, или имеет контрол сервер.
вот отберите контрол сервер и просто дайте exec на xp_cmdshell.
и сразу под прокси полезет.
...
Рейтинг: 0 / 0
Моя борьба с xp_cmdshell - никак не могу заставить работать прокси.
    #39759857
IKSparrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yasha123,

Код: sql
1.
2.
3.
4.
5.
6.
DENY CONTROL SERVER TO [MyDomain\SBO]
GO
EXECUTE AS LOGIN = 'MyDomain\SBO' ;
GO 
EXEC master..xp_cmdshell 'whoami.exe'
REVERT ;



Увы, опять:

[NT Service\MSSQL$DVLSRV]
...
Рейтинг: 0 / 0
Моя борьба с xp_cmdshell - никак не могу заставить работать прокси.
    #39759859
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BOLNow non-administrators can launch operating system processes with xp_cmdshell and those processes run with the permissions of the proxy account that you have configured.
Users with CONTROL SERVER permission (members of the sysadmin fixed server role)
will continue to receive the permissions of the SQL Server service account for child processes that are launched by xp_cmdshell.
xp_cmdshell (Transact-SQL)
...
Рейтинг: 0 / 0
Моя борьба с xp_cmdshell - никак не могу заставить работать прокси.
    #39759863
IKSparrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yasha123,

Так, поправочка:
Снял принудительно флажок CONTROL SERVER у MyDomain\SBO и теперь стало выдаваться:
Msg 15121, Level 16, State 200, Procedure xp_cmdshell, Line 14
An error occurred during the execution of xp_cmdshell. A call to 'LogonUserW' failed with error code: '1385'.

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

Спасибо! Пойду дальше ковырять.
...
Рейтинг: 0 / 0
Моя борьба с xp_cmdshell - никак не могу заставить работать прокси.
    #39759864
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IKSparrowYasha123,

Код: sql
1.
2.
3.
4.
5.
6.
DENY CONTROL SERVER TO [MyDomain\SBO]
GO
EXECUTE AS LOGIN = 'MyDomain\SBO' ;
GO 
EXEC master..xp_cmdshell 'whoami.exe'
REVERT ;



Увы, опять:

[NT Service\MSSQL$DVLSRV]
для начала не DENY, а REVOKE.
и потом, у вас учетка явно sysadmin:
вы ей не дали exec на xp_cmdshell,
а она продолжает процедуру выполнять.

покажите
Код: sql
1.
2.
3.
4.
5.
6.
EXECUTE AS LOGIN = 'MyDomain\SBO';

select *
from sys.fn_my_permissions(null, 'server');

select IS_SRVROLEMEMBER('sysadmin');
...
Рейтинг: 0 / 0
Моя борьба с xp_cmdshell - никак не могу заставить работать прокси.
    #39759869
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ок, уже неактуально.
одновременно запостили.
тем не менее, отбирает выданное REVOKE, а не DENY
...
Рейтинг: 0 / 0
Моя борьба с xp_cmdshell - никак не могу заставить работать прокси.
    #39760337
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IKSparrow,

как-то Вы с подвыподвертом всё делаете. Эта задача решается утилитой SQLCMD и пакетным файлом и не со стороны SQL сервера, а со стороны операционной системы.
...
Рейтинг: 0 / 0
Моя борьба с xp_cmdshell - никак не могу заставить работать прокси.
    #39760395
IKSparrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так, у меня тут другая беда.
Прокси работает и отлично.
Но.
Возникает противоречие условий.
Прокси работает только для пользователя у которого нет ролей SYSADMIN и CONTROL SERVER
Файл может бэкапа может прочитать только такой пользователь (под учеткой прокси).
А восстановить базу из бэкапа может пользователь только с двумя вышеупомянутыми ролями.
Тупик. Какие варианты есть по выходу?
...
Рейтинг: 0 / 0
Моя борьба с xp_cmdshell - никак не могу заставить работать прокси.
    #39760401
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IKSparrowТак, у меня тут другая беда.
Прокси работает и отлично.
Но.
Возникает противоречие условий.
Прокси работает только для пользователя у которого нет ролей SYSADMIN и CONTROL SERVER
Файл может бэкапа может прочитать только такой пользователь (под учеткой прокси).
А восстановить базу из бэкапа может пользователь только с двумя вышеупомянутыми ролями.
Тупик. Какие варианты есть по выходу?
Пользователь, обрезанный в правах, читает самый свежий файл бэкапа из многих. Копирует с сервера по сети на целевой сервер. Сверяет контрольные суммы на скопированный файл и на тот файл, который остался лежать на сервере (причину, по которой желательно это делать, озвучивать не стану, у Вас ведь не ZFS/BTRFS с checksum для файлов). И запускает процедуру, которую для него написал sysadmin (execute as), которая читает локальный файл бэкапа и делает рестор.
...
Рейтинг: 0 / 0
Моя борьба с xp_cmdshell - никак не могу заставить работать прокси.
    #39760408
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IKSparrow2. Служба SQL запущена под его штатной, локальной, учетной записью - [NT Service\MSSQL$DVLSRV]
3. Машина, на которой находится сам SQL - в домене.
4. В этом домене есть вторая машина, где работает ещё один SQL-сервер.
IKSparrow Стоит запустить SQL службу от доменного админа, как всё прекрасно читается в каталоге. Но мы же лёгких путей не ищем.
План действий:
1. Перевести работу всех служб MSSQL на доменных ПК и серверах на использование специальной доменной учетной записи, которая не является локальным администратором, нигде вообще.
2. Найти и уволить за служебное несоответствие и саботаж того персонажа, который не признает легких путей и заставляет оставлять MSSQL службы работать под локальными учетными записями.
3. Переделать схему работы на стандартную по отрасли. Чтобы вновь нанятый DBA не вырывал себе остатки пейсов с криком "я не понимаю, как вы тут все сделали".
...
Рейтинг: 0 / 0
Моя борьба с xp_cmdshell - никак не могу заставить работать прокси.
    #39760446
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IKSparrowА восстановить базу из бэкапа может пользователь только с двумя вышеупомянутыми ролями. https://docs.microsoft.com/en-us/sql/t-sql/statements/restore-statements-transact-sql?view=sql-server-2017 If the database being restored does not exist, the user must have CREATE DATABASE permissions to be able to execute RESTORE. If the database exists, RESTORE permissions default to members of the sysadmin and dbcreator fixed server roles and the owner (dbo) of the database (for the FROM DATABASE_SNAPSHOT option, the database always exists).
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Моя борьба с xp_cmdshell - никак не могу заставить работать прокси.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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