Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O SQL Server usa SID (Identificadores de Segurança por Serviço), também conhecidos como entidades de segurança de serviço, para permitir que as permissões sejam concedidas diretamente a um serviço específico. Esse método é usado pelo SQL Server para conceder permissões aos serviços de mecanismo e agente (NT SERVICE\MSSQL$<InstanceName> e NT SERVICE\SQLAGENT$<InstanceName> , respectivamente). Usando esse método, esses serviços podem acessar o mecanismo de banco de dados somente quando os serviços estiverem em execução. Para obter mais informações, consulte KB2620201 (link do arquivo).
Esse mesmo método pode ser usado ao conceder permissões a outros serviços. O uso de um SID de Serviço elimina a sobrecarga de gerenciar e manter contas de serviço e fornecer um controle mais rígido e granular sobre as permissões concedidas aos recursos do sistema.
Exemplos de serviços em que um SID de Serviço pode ser usado são:
- Serviço de Saúde do System Center Operations Manager (NT SERVICE\HealthService)
- Serviço de Cluster de Failover do Windows Server (WSFC) (NT SERVICE\ClusSvc)
Alguns serviços não têm um SID de Serviço por padrão. O SID de serviço deve ser criado usando SC.exe. Esse método foi adotado pelos administradores do Microsoft System Center Operations Manager para conceder permissão ao HealthService no SQL Server.
Depois que o SID de serviço tiver sido criado e confirmado, ele deverá receber permissão no SQL Server. A concessão de permissões é realizada criando um logon do Windows usando o SSMS (SQL Server Management Studio) ou uma consulta Transact-SQL. Depois que o logon for criado, ele poderá receber permissões, ser adicionado a funções e mapeado para bancos de dados, assim como qualquer outro logon.
Dica
Se o erro Login failed for user 'NT AUTHORITY\SYSTEM' for recebido, verifique se o SID de Serviço existe para o serviço desejado, se o logon do SID de Serviço foi criado no SQL Server e se as permissões apropriadas foram concedidas ao SID de Serviço no SQL Server.
Segurança
Eliminar contas de serviço
Tradicionalmente, as contas de serviço têm sido usadas para permitir que os serviços façam logon no SQL Server. As contas de serviço adicionam uma camada adicional de complexidade de gerenciamento devido à necessidade de manter e atualizar periodicamente a senha da conta de serviço. Além disso, as credenciais da conta de serviço podem ser usadas por um indivíduo que tenta mascarar suas atividades ao executar ações na instância.
Permissões granulares para contas do sistema
As contas do sistema tradicionalmente tiveram permissões concedidas por meio da criação de um login para as contas LocalSystem (NT AUTHORITY\SYSTEM in en-us) ou NetworkService (NT AUTHORITY\NETWORK SERVICE in en-us) e pela concessão das permissões a esses logins. Esse método concede permissões de processo ou serviço ao SQL, que está em execução como uma conta do sistema.
O uso de um SID de Serviço permite que as permissões sejam concedidas a um serviço específico. O serviço só tem acesso aos recursos aos quais recebeu permissões quando está em execução. Por exemplo, se estiver HealthService em execução como LocalSystem e for concedida View Server State, a LocalSystem conta terá permissão somente para View Server State quando estiver em execução no contexto do HealthService. Se qualquer outro processo tentar acessar o estado do servidor do SQL como LocalSystem, eles terão acesso negado.
Exemplos
A. Criar um SID de Serviço
O comando do PowerShell a seguir criará um SID de serviço no health service do System Center Operations Manager.
sc.exe --% sidtype "HealthService" unrestricted
Importante
--% instrui o PowerShell a interromper a análise do restante do comando. Isso é útil ao usar aplicativos e comandos herdados.
B. Consultar um SID de Serviço
Para verificar um SID de serviço ou garantir que um SID de serviço exista, execute o comando a seguir no PowerShell.
sc.exe --% qsidtype "HealthService"
Importante
--% indica ao PowerShell que pare de analisar o restante do comando. Isso é útil ao usar aplicativos e comandos herdados.
C. Adicionar um SID de Serviço recém-criado como logon
O exemplo a seguir cria um logon para o serviço de integridade do System Center Operations Manager usando T-SQL.
CREATE LOGIN [NT SERVICE\HealthService] FROM WINDOWS
GO
D. Adicionar um SID de Serviço existente como logon
O exemplo a seguir cria um logon para o Serviço de Cluster usando T-SQL. Conceder permissões ao serviço de cluster elimina diretamente a necessidade de conceder permissões excessivas à conta SYSTEM.
CREATE LOGIN [NT SERVICE\ClusSvc] FROM WINDOWS
GO
E. Conceder permissões a um SID de Serviço
Conceda as permissões necessárias para gerenciar grupos de disponibilidade para o Serviço de Cluster.
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
Observação
Remover os logons de SID de serviço ou removê-los da função de servidor sysadmin pode causar problemas para vários componentes do SQL Server que se conectam ao Mecanismo de Banco de Dados do SQL Server. Alguns problemas incluem o seguinte:
- O SQL Server Agent não pode iniciar ou se conectar a um serviço do SQL Server
- Os programas de Instalação do SQL Server encontram o problema mencionado no seguinte artigo da Base de Dados de Conhecimento da Microsoft: https://mskb.pkisolutions.com/kb/955813
Para uma instância padrão do SQL Server, você pode corrigir essa situação adicionando o SID de serviço usando os seguintes comandos 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]
Para uma instância nomeada do SQL Server, use os seguintes comandos 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]
Neste exemplo, SQL2019 é o nome da instância do SQL Server.
Próximas etapas
Para obter mais informações sobre a estrutura do sid de serviço, leia a estrutura SERVICE_SID_INFO.
Leia sobre as opções adicionais disponíveis ao criar um logon.
Para usar Segurança Baseada em Funções com SIDs de Serviço, leia sobre como criar funções no SQL Server.
Leia sobre diferentes maneiras de conceder permissões a SIDs de Serviço no SQL Server.
Para obter mais informações sobre como configurar contas de serviço para o SQL Server, leia Configurar contas de serviço e permissões do Windows.