1

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

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

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

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

2 ответа2

0

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

0

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

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

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

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

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

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

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

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

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

    --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 . Участник безопасности, указанный на шаге 5 выше в <Domain>\<UserGrantingExecuteAsUser> должен быть тем, у кого вы используете SSMS в качестве контекста безопасности для этой задачи.

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .