Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
SQL Server использует идентификаторы безопасности для каждой службы (SID), также называемые субъектами безопасности службы для предоставления разрешений непосредственно определенной службе. SQL Server использует этот метод для предоставления разрешений службам подсистемы и агента (NT SERVICE\MSSQL$<InstanceName> и NT SERVICE\SQLAGENT$<InstanceName> соответственно). С помощью этого метода эти службы могут получить доступ к механизму базы данных только при работе служб. Дополнительные сведения см. в разделе KB2620201 (ссылка на архив).
Этот метод также можно использовать при предоставлении разрешений другим службам. Использование SID службы устраняет издержки управления и сопровождения учетными записями служб и обеспечивает более точный и детализированный контроль над разрешениями, предоставляемыми системным ресурсам.
Примеры служб, в которых можно использовать идентификатор безопасности службы:
- Служба работоспособности System Center Operations Manager (NT SERVICE\HealthService)
- Служба отказоустойчивой кластеризации Windows Server (WSFC) (NT SERVICE\ClusSvc)
Некоторые службы по умолчанию не имеют идентификатор безопасности службы. Необходимо создать идентификатор безопасности службы с помощью SC.exe. Этот метод был принят администраторами Microsoft System Center Operations Manager для предоставления разрешений службе работоспособности в SQL Server.
После создания и подтверждения SID службы необходимо предоставить ему права в SQL Server. Предоставьте разрешения путем создания имени входа Windows с помощью SQL Server Management Studio (SSMS) или запроса Transact-SQL. После создания имени входа вы можете предоставить ему разрешения, добавить его в роли и сопоставить его с базами данных так же, как и любой другой вход.
Подсказка
Если вы получаете ошибку Login failed for user 'NT AUTHORITY\SYSTEM', убедитесь, что SID службы существует для требуемой службы, проверьте, что логин SID службы был создан в SQL Server, и убедитесь, что соответствующие разрешения для SID службы предоставлены в SQL Server.
Безопасность
Удалите служебные учетные записи
Традиционно учетные записи служб использовались для предоставления службам возможности входа в SQL Server. Учетные записи служб добавляют дополнительный уровень сложности управления из-за необходимости поддерживать и периодически обновлять пароль учетной записи службы. Кроме того, пользователь, пытающийся маскировать свои действия, может использовать учетные данные служебной учетной записи, когда выполняются действия в экземпляре.
Гранулированные разрешения для системных учетных записей
Системным учетным записям исторически предоставлялись разрешения путем создания имени входа для учетных записей LocalSystem (NT AUTHORITY\SYSTEM в en-us) или NetworkService (NT AUTHORITY\NETWORK SERVICE в en-us) и предоставления этим входам необходимых разрешений. Этот метод предоставляет разрешения любому процессу или службе в SQL, которые выполняются от имени системной учетной записи.
С помощью идентификатора безопасности службы вы можете предоставить разрешения определенной службе. Служба имеет доступ только к тем ресурсам, к которым вы предоставили разрешения на момент выполнения. Например, если HealthService выполняется как LocalSystem и вы предоставляете ему View Server State, учетная запись LocalSystem имеет разрешение View Server State только при выполнении в контексте HealthService. Если любой другой процесс пытается получить доступ к состоянию сервера SQL как LocalSystem, доступ будет отказан.
Примеры
А. Создать идентификатор SID службы
Команда PowerShell, следующая, создает SID службы в службе мониторинга работоспособности System Center Operations Manager.
sc.exe --% sidtype "HealthService" unrestricted
Это важно
--% Сообщает PowerShell остановить обработку оставшейся части команды. Это полезно при использовании устаревших команд и приложений.
В. Запрос SID службы
Чтобы проверить идентификатор безопасности службы или убедиться, что идентификатор безопасности службы существует, выполните следующую команду в PowerShell.
sc.exe --% qsidtype "HealthService"
Это важно
--% Сообщает PowerShell остановить обработку оставшейся части команды. Это полезно при использовании устаревших команд и приложений.
С. Добавление только что созданного идентификатора безопасности службы в качестве имени входа
В следующем примере создается логин для службы мониторинга System Center Operations Manager с помощью T-SQL.
CREATE LOGIN [NT SERVICE\HealthService] FROM WINDOWS
GO
D. Добавление существующего идентификатора безопасности службы в качестве имени входа
В следующем примере создается имя входа для службы кластера с помощью T-SQL. Предоставление разрешений службе кластера напрямую устраняет необходимость предоставления чрезмерных разрешений учетной записи SYSTEM.
CREATE LOGIN [NT SERVICE\ClusSvc] FROM WINDOWS
GO
E. Предоставить разрешения служебному SID
Предоставьте разрешения, необходимые для управления группами доступности службе кластера.
GRANT ALTER ANY AVAILABILITY GROUP TO [NT SERVICE\ClusSvc]
GO
GRANT CONNECT SQL TO [NT SERVICE\ClusSvc]
GO
GRANT VIEW SERVER STATE TO [NT SERVICE\ClusSvc]
GO
Замечание
Удаление имен входа безопасности службы или их удаление из роли сервера sysadmin может вызвать проблемы с различными компонентами SQL Server, которые подключаются к SQL Server Database Engine. К некоторым проблемам относятся следующие проблемы:
- SQL Server Agent не удается запустить или подключиться к службе SQL Server
- Программы установки SQL Server сталкиваются с проблемой, указанной в следующей статье базы знаний Microsoft: https://mskb.pkisolutions.com/kb/955813
Для экземпляра SQL Server по умолчанию можно исправить эту ситуацию, добавив идентификатор безопасности службы с помощью следующих команд Transact-SQL:
CREATE LOGIN [NT SERVICE\MSSQLSERVER] FROM WINDOWS WITH DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english]
ALTER ROLE sysadmin ADD MEMBER [NT SERVICE\MSSQLSERVER]
CREATE LOGIN [NT SERVICE\SQLSERVERAGENT] FROM WINDOWS WITH DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english]
ALTER ROLE sysadmin ADD MEMBER [NT SERVICE\SQLSERVERAGENT]
Для именованного экземпляра SQL Server используйте следующие команды Transact-SQL:
CREATE LOGIN [NT SERVICE\MSSQL$SQL2019] FROM WINDOWS WITH DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english]
ALTER ROLE sysadmin ADD MEMBER [NT SERVICE\MSSQL$SQL2019]
CREATE LOGIN [NT SERVICE\SQLAgent$SQL2019] FROM WINDOWS WITH DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english]
ALTER ROLE sysadmin ADD MEMBER [NT SERVICE\SQLAgent$SQL2019]
В этом примере SQL2019 — это имя экземпляра SQL Server.
Дальнейшие шаги
Дополнительные сведения о структуре sid службы см. в структуре SERVICE_SID_INFO.
Ознакомьтесь с дополнительными параметрами, доступными при создании имени входа.
Чтобы использовать безопасность на основе ролей с идентификаторами SID службы, ознакомьтесь с созданием ролей в SQL Server.
Узнайте о различных способах предоставить разрешения для Service SID в SQL Server.
Дополнительные сведения о настройке учетных записей служб для SQL Server см. в статье Настройка учетных записей служб Windows и разрешений.