Чистая остановка <service> системная ошибка 5 доступ запрещен </service>

1986
Sjef

С SQL Server 2012 я пытаюсь сделать это:

DECLARE @COMMAND nvarchar(4000) SET @COMMAND = 'net stop <servicename>' exec master.dbo.xp_cmdshell @COMMAND 

Я получаю системную ошибку 5 и доступ запрещен как ответ

Учетная запись службы (проверена с помощью whoami) добавляется к администраторам, так что еще может быть не так?

1
Когда вы выбираете «Из SQLServer 2012», вы имеете в виду SQLServer Management Studio (ssms.exe)? Frank Thomas 6 лет назад 0
Да, если я помещаю команду (и) в .bat или .cmd и запускаю ее из ОС, это нормально. Когда я пытаюсь запустить его из ssms, я получаю ту же ошибку. Sjef 6 лет назад 0
запустить ssms от имени администратора. Frank Thomas 6 лет назад 0

2 ответа на вопрос

0
LPChip

Запустите SQL Server 2012 от имени администратора, и проблема исчезнет.

Упомянутая учетная запись службы имеет права администратора. Sjef 6 лет назад 0
Да, но даже в этом случае время выполнения должно выполняться от имени администратора. Вы должны щелкнуть правой кнопкой мыши программу и выбрать запуск от имени администратора, чтобы предоставить приложению дополнительные права. Вы можете увидеть точно такое же поведение, если попытаетесь выполнить команду в окне командной строки. Даже если у вашего пользователя есть права администратора, он не будет работать, пока вы не запустите командную строку от имени администратора. Это вещь UAC. LPChip 6 лет назад 0
В этом случае пользователь, использующий службу БД, не имеет значения для этой проблемы. Вопрос в том, кто может УПРАВЛЯТЬ сервисом, запуская / останавливая / редактируя сервис. Атаки SQL-инъекций были бы катастрофическими, если бы любой старый пользователь мог выполнить xp_cmdshell и в силу привилегированного доступа SQLServers иметь возможность выполнять произвольные команды от имени администратора сервера. Frank Thomas 6 лет назад 0
0
Pimp Juice IT

Разрешить пользователю, не являющемуся системным администратором, запускаться xp_cmdshellиз SSMS

Я помог устранить проблему, когда нам нужно было предоставить разработчику приложения доступ для выполнения xp_cmdshellиз сеанса SSMS, а не « Запускать как » из задания агента SQL на некритическом сервере разработки, не назначая его системным администратором в экземпляре SQL Server.

Что мы сделали

Примечание. Учетная запись пользователя домена может быть заменена учетной записью рабочей группы, учетной записью локального компьютера и т. Д.

Важное замечание: Вам необходимо понимать риск того, что пользователи в вашей среде могут выполнять команды уровня ОС, и вы должны предоставлять этот уровень разрешений xp_cmdshellтолько тем, кто достаточно надежен с таким уровнем безопасности при использовании метода прокси .

  1. Создал новую учетную запись пользователя домена с надежным паролем и принял к сведению имя пользователя и пароль. Убедитесь, что учетная запись была включена, и пароль был установлен, чтобы никогда не истек.

  2. Создано новое имя входа SQL Server, привязанное к новой учетной записи пользователя домена, которую мы создали.

  3. Созданы новые учетные данные прокси, привязанные к учетной записи пользователя домена.

    EXEC sp_xp_cmdshell_proxy_account '<Domain>\<NewUser>', '<password>' -- you have to type actual password 
  4. Предполагается, что SQL Server Login явный EXECUTEдоступ к системе расширенного хранимого процесса из MasterБД по имени sys.xp_cmdshell.

    --see who all has execute access to xp_cmdshell  Use master  EXEC sp_helprotect 'xp_cmdshell'   -- To allow advanced options to be changed. EXEC sp_configure 'show advanced options', 1 RECONFIGURE GO  -- Enable the xp_cmdshell procedure EXEC sp_configure 'xp_cmdshell', 1 RECONFIGURE GO  -- Grant execute permissions to account GRANT EXECUTE ON xp_cmdshell TO [<Domain>\<NewUser>] 
  5. Предоставьте человеку, использующему EXECUTE AS олицетворение, разрешение на новый вход в систему SQL Server .

    GRANT IMPERSONATE ON LOGIN::[<Domain>\<NewUser>] TO [<Domain>\<UserGrantingExecuteAsUser>] 
  6. Теперь запустите команду с EXECUTE AS LOGIN и передайте net stopкоманду xp_cmdshellхранимой процедуре. В <Domain>\<UserGrantingExecuteAsUser>качестве контекста безопасности для этой задачи в качестве контекста безопасности должен быть указан участник безопасности, указанный на шаге 5 выше .

    EXECUTE AS LOGIN = '<Domain>\<NewUser>' DECLARE @COMMAND nvarchar(4000) SET @COMMAND = 'net stop <servicename>' EXEC xp_cmdshell @COMMAND REVERT 

Дополнительные ресурсы