Нет завершения системы, ошибка 5, доступ запрещён.

Вопрос или проблема

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

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

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

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

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

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

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

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

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

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

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

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

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

    EXEC sp_xp_cmdshell_proxy_account '<Domain>\<NewUser>', '<password>' -- вы должны ввести фактический пароль
    
  4. Предоставили тому SQL Server Login явный EXECUTE доступ к системной расширенной хранимой процедуре из базы данных Master с именем sys.xp_cmdshell.

    --посмотрите, кто имеет доступ на выполнение xp_cmdshell   
    Use master                      
    EXEC sp_helprotect 'xp_cmdshell'
    
    
    -- Чтобы разрешить изменение расширенных опций.
    EXEC sp_configure 'show advanced options', 1
    RECONFIGURE
    GO
    
    -- Включите процедуру xp_cmdshell
    EXEC sp_configure 'xp_cmdshell', 1
    RECONFIGURE
    GO
    
    -- Предоставить права на выполнение учётной записи
    GRANT EXECUTE ON xp_cmdshell TO [<Domain>\<NewUser>]
    
  5. Предоставить человеку, использующему EXECUTE AS разрешение на исполнение от имени для новой SQL Server Login.

    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
    

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

Ответ или решение

При работе с SQL Server 2012 и использованием команды xp_cmdshell для выполнения системных команд, пользователи могут столкнуться с ошибкой "System Error 5: Access Denied". Эта проблема часто возникает, когда система не позволяет текущему пользователю останавливать службы через команду net stop. Давайте рассмотрим возможные причины этой ошибки и способы ее устранения.

1. Причины ошибки "Access Denied"

Ошибка доступа может возникать по нескольким причинам:

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

2. Решение проблемы

Для решения проблемы сначала рассмотрим оптимальный способ настройки прав доступа на выполнение xp_cmdshell.

А. Настройка xp_cmdshell

  1. Включение расширенной опции xp_cmdshell:
    Для начала, если функция xp_cmdshell еще не включена, активируйте ее:

    EXEC sp_configure 'show advanced options', 1;
    RECONFIGURE;
    EXEC sp_configure 'xp_cmdshell', 1;
    RECONFIGURE;
  2. Создание нового логина и учетной записи:
    Рекомендуется создать новую учетную запись с минимально необходимыми правами, чтобы избежать излишних рисков:

    -- Создание логина для доменной учетной записи
    CREATE LOGIN [Domain\NewUser] FROM WINDOWS;
  3. Настройка прокси-учетной записи для xp_cmdshell:
    Прокси-учетная запись позволяет SQL Server выполнять команды от имени учетной записи с нужными привилегиями:

    EXEC sp_xp_cmdshell_proxy_account 'Domain\NewUser', 'your_password';
  4. Предоставление необходимых прав:
    Убедитесь, что созданный логин имеет права на выполнение xp_cmdshell:

    GRANT EXECUTE ON xp_cmdshell TO [Domain\NewUser];
  5. Использование команды через EXECUTE AS:
    Когда все настройки завершены, используйте команду EXECUTE AS для выполнения команд от имени созданной учетной записи:

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

3. Принципы безопасности

Важно помнить о рисках, связанных с предоставлением доступа к xp_cmdshell. Эта функция позволяет выполнять любые команды на операционной системе, что потенциально может быть использовано злоумышленниками. Поэтому следует строго контролировать, кто имеет доступ к этой функции, и применять безопасные методы работы с ней.

Заключение

Использование xp_cmdshell в SQL Server требует внимательного подхода к безопасности и управлению правами доступа. Если вы получаете ошибку "Access Denied" при выполнении команд, изучение и последующая корректировка прав доступа, а также создание прокси-учетной записи являются необходимыми шагами для исправления данной ситуации.

Используйте предоставленные рекомендации для обеспечения безопасного и эффективного управления SQL Server и его интеграции с операционной системой.

Оцените материал
Добавить комментарий

Капча загружается...