Partilhar via


Usando SIDs de serviço para conceder permissões a serviços no SQL Server

O SQL Server utiliza Identificadores de Segurança por serviço (SID), também conhecidos como princípios de segurança de serviço, para permitir a concessão de permissões diretamente a um serviço específico. Este método é utilizado pelo SQL Server para conceder permissões ao motor e aos serviços do agente (NT SERVICE\MSSQL$<InstanceName> e NT SERVICE\SQLAGENT$<InstanceName> , respetivamente). Usando este método, esses serviços só podem aceder ao motor da base de dados quando os serviços estão a funcionar. Para mais informações, consulte KB2620201 (link do arquivo).

Este mesmo método pode ser usado ao conceder permissões a outros serviços. A utilização de um SID de Serviço elimina a sobrecarga da gestão e manutenção das contas de serviço e proporciona um controlo mais rigoroso e granular sobre as permissões concedidas aos recursos do sistema.

Exemplos de serviços onde um SID de Serviço pode ser utilizado são:

  • Gestor de Operações do Centro de Sistema de Serviços de Saúde (NT SERVICE\HealthService)
  • Serviço de Clusterização de Tolerância a Falhas do Windows Server (WSFC) (NT SERVICE\ClusSvc)

Alguns serviços não têm um SID de Serviço por defeito. O SID do serviço deve ser criado usando SC.exe. Este método foi adotado pelos administradores do Microsoft System Center Operations Manager para conceder permissão ao HealthService dentro do SQL Server.

Uma vez criado e confirmado o SID do serviço, deve ser concedido permissão dentro do SQL Server. A concessão de permissões é feita através da criação de um login Windows usando SQL Server Management Studio (SSMS) ou uma consulta Transact-SQL. Uma vez criado o login, pode ser concedido permissões, adicionado a funções e mapeado para bases de dados, tal como qualquer outro login.

Sugestão

Se o erro Login failed for user 'NT AUTHORITY\SYSTEM' for recebido, verifique a existência do SID de Serviço para o serviço desejado, o login do SID de Serviço foi criado no SQL Server e 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 iniciem sessão no SQL Server. As contas de serviço acrescentam uma camada adicional de complexidade de gestão devido à necessidade de manter e atualizar periodicamente a palavra-passe 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 as suas atividades ao realizar ações na instância.

Permissões granulares para contas do sistema

Historicamente, as permissões foram concedidas às contas do sistema criando um login para as contas LocalSystem (NT AUTHORITY\SYSTEM em en-us) ou NetworkService (NT AUTHORITY\NETWORK SERVICE em en-us) e concedendo essas permissões aos logins. Este método concede permissões a qualquer processo ou serviço para SQL, que está a correr como uma conta de sistema.

A utilização de um SID de Serviço permite conceder permissões a um serviço específico. O serviço só tem acesso aos recursos para os quais lhe foram concedidas permissões quando está a correr. Por exemplo, se o HealthService estiver a correr como LocalSystem e for concedido View Server State, a LocalSystem conta só terá permissão para View Server State quando estiver a correr no contexto do HealthService. Se qualquer outro processo tentar aceder ao estado do servidor SQL como LocalSystem, será negado o acesso.

Examples

A. Criar um SID de Serviço

O seguinte comando PowerShell criará um SID de serviço no serviço de saúde do Gestor de Operações do Centro de Sistema.

sc.exe --% sidtype "HealthService" unrestricted

Importante

--% diz ao PowerShell para parar de analisar o resto do comando. Isto é útil ao usar comandos e aplicações legados.

B. Consultar um SID de Serviço

Para verificar um SID de serviço ou garantir que existe um SID de serviço, execute o seguinte comando no PowerShell.

sc.exe --% qsidtype "HealthService"

Importante

--% diz ao PowerShell para parar de analisar o resto do comando. Isto é útil ao usar comandos e aplicações legados.

C. Adicionar um SID de Serviço recém-criado como Login

O exemplo seguinte cria um login para o serviço de saúde System Center Operations Manager usando T-SQL.

CREATE LOGIN [NT SERVICE\HealthService] FROM WINDOWS
GO

D. Adicionar um SID de Serviço existente como Login

O exemplo seguinte cria um login para o Serviço de Cluster usando T-SQL. Conceder permissões ao serviço do cluster elimina diretamente a necessidade de conceder permissões excessivas à conta do SISTEMA.

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 gerir Grupos de Disponibilidade ao 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 logins do SID do serviço ou removê-los da função de servidor sysadmin pode causar problemas a vários componentes do SQL Server que se ligam ao Mecanismo de Base de Dados do SQL Server. Alguns problemas incluem os seguintes:

  • O Agente SQL Server não pode iniciar nem ligar-se a um serviço SQL Server
  • Os programas de Configuração do SQL Server enfrentam o problema mencionado no seguinte artigo da Microsoft Knowledge Base: https://mskb.pkisolutions.com/kb/955813

Para uma instância padrão do SQL Server, pode corrigir esta situação adicionando o SID do 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, utilize 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óximos passos

Para mais informação sobre a estrutura do SID do serviço, leia a estrutura SERVICE_SID_INFO.

Leia sobre opções adicionais disponíveis ao criar um login.

Para usar a Segurança Baseada em Funções com SIDs de Serviço, leia sobre a criação de funções no SQL Server.

Leia sobre diferentes formas de conceder permissões a SIDs de Serviço no SQL Server.

Para mais informações sobre como configurar contas de serviço para SQL Server, leia Configurar contas de serviço Windows e permissões.