Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: SQL Server
A partir do SQL Server 2008 (10.0.x), o suporte para nomes principais de serviço (SPNs) foi alargado para permitir autenticação mútua em todos os protocolos. Em versões anteriores do SQL Server, os SPNs só eram suportados para Kerberos via TCP quando o SPN padrão para a instância do SQL Server estava registado no Active Directory.
Os SPNs são usados pelo protocolo de autenticação para determinar a conta em que uma instância do SQL Server é executada. Se a conta da instância for conhecida, a autenticação Kerberos pode ser usada para fornecer autenticação mútua entre o cliente e o servidor. Se a conta da instância não for conhecida, utiliza-se a autenticação NTLM, que apenas fornece autenticação do cliente pelo servidor. Atualmente, o OLE DB Driver for SQL Server realiza a pesquisa de autenticação, derivando o SPN a partir do nome da instância e das propriedades da ligação de rede. As instâncias do SQL Server tentam registar SPNs no arranque, ou podem ser registadas manualmente. No entanto, o registo falhará se não existirem direitos de acesso suficientes para a conta que tenta registar os SPNs.
As contas de domínio e de computador são registadas automaticamente no Active Directory. Estas contas podem ser usadas como SPNs, ou os administradores podem definir as suas próprias SPNs. O SQL Server torna a autenticação segura mais gerível e fiável ao permitir que os clientes especifiquem diretamente o SPN a utilizar.
Note
Uma SPN especificada por uma aplicação cliente só é usada quando é feita uma ligação com segurança integrada no Windows.
Tip
Microsoft Kerberos Gestor de Configuração para SQL Server é uma ferramenta de diagnóstico que ajuda a solucionar problemas de conectividade relacionados ao Kerberos com o SQL Server. Para obter mais informações, consulte Microsoft Kerberos Gestor de Configuração for SQL Server.
Para mais informações sobre o Kerberos, consulte os seguintes artigos:
Usage
A tabela seguinte descreve os cenários mais comuns em que as aplicações clientes podem permitir a autenticação segura.
| Scenario | Description |
|---|---|
| Uma aplicação legada não especifica um SPN. | Este cenário de compatibilidade garante que não haverá alterações de comportamento para aplicações desenvolvidas para versões anteriores do SQL Server. Se não for especificado nenhum SPN, a aplicação baseia-se em SPNs gerados e não tem conhecimento de qual o método de autenticação utilizado. |
| Uma aplicação cliente que utiliza a versão atual do OLE DB Driver for SQL Server especifica um SPN na cadeia de ligação como conta de utilizador ou computador de domínio, como SPN específico de instância ou como uma string definida pelo utilizador. | A palavra-chave ServerSPN pode ser usada num fornecedor, inicialização ou cadeia de ligação para especificar os seguintes valores: -Especifique a conta usada pela instância do SQL Server para uma ligação. Esta configuração simplifica o acesso à autenticação Kerberos. Se estiver presente um Centro de Distribuição de Chaves Kerberos (KDC) e a conta correta for especificada, a autenticação Kerberos é mais provável de ser usada do que a NTLM. O KDC normalmente está no mesmo computador do controlador de domínio. -Especifique um SPN para consultar a conta de serviço da instância do SQL Server. Para cada instância do SQL Server, são gerados dois SPNs predefinidos que podem ser usados para este fim. No entanto, estas chaves não têm garantia de estar presentes no Active Directory, por isso, nesta situação, a autenticação Kerberos não é garantida. -Especifique um SPN que será usado para consultar a conta de serviço para a instância do SQL Server. Este valor pode ser qualquer cadeia definida pelo utilizador que corresponda à conta do serviço. Neste caso, a chave deve ser registada manualmente no KDC e deve cumprir as regras para um SPN definido pelo utilizador. A palavra-chave FailoverPartnerSPN pode ser usada para especificar o SPN para o servidor parceiro de failover. O intervalo dos valores das chaves da conta e do Active Directory é o mesmo que os valores que pode especificar para o servidor principal. |
| Uma aplicação OLE DB especifica um SPN como propriedade de inicialização da fonte de dados para o servidor principal ou para um servidor parceiro de failover. | A propriedade de ligação SSPROP_INIT_SERVER_SPN no conjunto de propriedades DBPROPSET_SQLSERVERDBINIT pode ser usada para especificar o SPN para uma ligação. A propriedade de ligação SSPROP_INIT_FAILOVER_PARTNER_SPN no DBPROPSET_SQLSERVERDBINIT pode ser usada para especificar o SPN do servidor parceiro de failover. |
| O utilizador especifica um SPN para um servidor ou servidor parceiro de failover numa caixa de diálogo OLE DB Data Link ou Login . | O SPN pode ser especificado numa caixa de diálogo Data Link ou Login . |
| Uma aplicação OLE DB determina o método de autenticação utilizado para estabelecer uma ligação. | Quando uma ligação é aberta com sucesso, uma aplicação pode consultar a propriedade de ligação SSPROP_AUTHENTICATION_METHOD no conjunto de propriedades DBPROPSET_SQLSERVERDATASOURCEINFO para determinar qual o método de autenticação utilizado. Os valores incluirão, mas não se limitam a, NTLM e Kerberos. |
Failover
Os SPNs não são armazenados na cache de failover e, por isso, não podem ser passados entre ligações. Os SPNs serão usados em todas as tentativas de ligação ao principal e parceiro quando especificados na cadeia de ligação ou nos atributos de conexão.
Agrupamento de Conexões
As aplicações devem estar cientes de que especificar SPNs em algumas, mas não todas, as cadeias de ligação pode contribuir para a fragmentação do pool.
As aplicações podem especificar programaticamente SPNs como atributos de conexão, em vez de especificar palavras-chave de cadeia de ligação. Este método pode ajudar a gerir a fragmentação do pool de ligações.
As aplicações devem estar cientes de que as SPNs nas strings de ligação podem ser sobrepostas ao definir os atributos de conexão correspondentes, mas as strings de ligação usadas pelo pool de conexões usarão os valores da cadeia de ligação para fins de pooling.
Down-Level Comportamento do Servidor
O novo comportamento de ligação é implementado pelo cliente; por isso, não é específico de uma versão do SQL Server.
Servidores Ligados e Delegação
Quando os servidores ligados são criados, o parâmetro @provstrsp_addlinkedserver pode ser usado para especificar o servidor e o parceiro de failover SPNs. Os benefícios deste método são os mesmos que especificar SPNs em cadeias de ligação do cliente: é mais simples e fiável estabelecer ligações que utilizam autenticação Kerberos.
A delegação com servidores ligados requer autenticação Kerberos.
Aspetos de Gestão dos SPNs Especificados pelas Aplicações
Ao escolher se especificar SPNs numa aplicação (através de cadeias de ligação) ou programaticamente através das propriedades de ligação (em vez de depender das SPNs geradas por padrão pelo fornecedor), considere os seguintes fatores:
Segurança: O SPN especificado revela informações que estão protegidas?
Fiabilidade: Para permitir o uso dos SPNs predefinidos, a conta de serviço onde a instância do SQL Server corre deve ter privilégios suficientes para atualizar o Active Directory no KDC.
Conveniência e transparência de localização: Como serão afetados os SPNs de uma aplicação se a sua base de dados for transferida para uma instância diferente do SQL Server? Este conceito aplica-se tanto ao servidor principal como ao seu parceiro de failover se usar espelhamento de base de dados. Se uma alteração de servidor significar que os SPNs têm de ser alterados, como é que isso afetará as aplicações? Alguma alteração será gerida?
Especificação do SPN
Pode especificar um SPN nas caixas de diálogo e no código. Esta secção discute como pode especificar um SPN.
O comprimento máximo de um SPN é de 260 caracteres.
A sintaxe que os SPNs usam em cadeia de ligação ou atributos de conexão é a seguinte:
| Syntax | Description |
|---|---|
| MSSQLSvc/fqdn | O SPN padrão gerado pelo provedor para uma instância padrão quando um protocolo diferente de TCP é usado. FQDN é um nome de domínio totalmente qualificado. |
| MSSQLSvc/fqdn:port | O SPN padrão gerado pelo provedor quando o TCP é usado. porta é um número de porta TCP. |
| MSSQLSvc/fqdn:NomeInstância | O SPN padrão gerado pelo provedor para uma instância nomeada quando um protocolo diferente de TCP é usado. InstanceName é um nome de instância do SQL Server. |
| HOST/fqdn HOST/Nome da Máquina |
O SPN que corresponde a contas de computador incorporadas que são automaticamente registadas pelo Windows. |
| Nome @Domínio | Especificação direta de uma conta de domínio. Nome de utilizador é um nome de conta de utilizador do Windows. Domínio é um nome de domínio Windows ou um nome de domínio totalmente qualificado. |
| Nome $@Domínio | Especificação direta de uma conta de computador. (Se o servidor a que está a ligar estiver a correr sob contas LOCAL SYSTEM ou NETWORK SERVICE , para obter autenticação Kerberos, o ServerSPN pode estar no formato MachineName$@Domain .) |
| KDCKey/Nome da Máquina | Um SPN especificado pelo utilizador. KDCKey é uma cadeia alfanumérica que cumpre as regras para uma chave KDC. |
Sintaxe OLE DB Suportando SPNs
Para informações específicas da sintaxe, consulte os seguintes artigos: