Compartilhar via


Criar servidores vinculados (Mecanismo de Banco de Dados do SQL Server)

Aplica-se a:SQL ServerInstância Gerenciada de SQL do Azure

Este artigo mostra como criar um servidor vinculado e acessar dados de outro SQL Server, uma instância gerenciada de SQL do Azure ou outra fonte de dados usando o SSMS (SQL Server Management Studio) ou o Transact-SQL. Servidores vinculados permitem que o mecanismo de banco de dados do SQL Server e a Instância Gerenciada de SQL do Azure leiam dados das fontes de dados remotas e executem comandos nos servidores de banco de dados remotos (por exemplo, fontes de dados OLE DB) fora da instância do SQL Server.

Tela de fundo

Normalmente, servidores vinculados são configurados para permitir que o mecanismo de banco de dados execute uma instrução Transact-SQL que inclui tabelas em outra instância do SQL Server ou em outro produto de banco de dados, como o Oracle. Muitos tipos de fontes de dados podem ser configurados como servidores vinculados, incluindo provedores de banco de dados de terceiros e o Azure Cosmos DB.

Depois que um servidor vinculado é criado, consultas distribuídas podem ser executadas nesse servidor, e as consultas podem unir tabelas de mais de uma fonte de dados. Se o servidor vinculado for definido como uma instância do SQL Server ou uma Instância Gerenciada de SQL do Azure, procedimentos armazenados remotos poderão ser executados.

Os recursos e os argumentos necessários do servidor vinculado podem variar significativamente. Os exemplos neste artigo fornecem um exemplo típico, mas nem todas as opções estão descritas. Para obter mais informações, consulte sp_addlinkedserver.

Permissões

Ao usar instruções Transact-SQL, é necessário ter permissão no servidor ou ser membro da função de servidor fixa ALTER ANY LINKED SERVER. Ao usar o Management Studio, é necessário ter CONTROL SERVER permissão ou associação na função de servidor fixa sysadmin.

Criar um servidor vinculado com o SSMS

Crie um servidor vinculado com o SSMS usando o procedimento a seguir:

Abra a caixa de diálogo Novo Servidor Vinculado

No SQL Server Management Studio (SSMS):

  1. Abra o Pesquisador de Objetos.
  2. Expanda Objetos do Servidor.
  3. Clique com o botão direito em Servidores Vinculados.
  4. Selecione Novo Servidor Vinculado.

Editar a página Geral das propriedades do servidor vinculado

  1. Na página Geral, na caixa Servidor Vinculado, digite o nome da instância do SQL Server à qual você está se vinculando.

    Observação

    Se a instância do SQL Server for a instância padrão, insira o nome do computador que hospeda a instância do SQL Server. Se o SQL Server for uma instância nomeada, insira o nome do computador e o nome da instância, como Accounting\SQLExpress.

  2. Especifique o Tipo de servidor e informações relacionadas, se necessário:

    • SQL Server

      Identifique o servidor vinculado como uma instância do Microsoft SQL Server ou uma Instância Gerenciada de SQL do Azure. Se você usar esse método para definir um servidor vinculado, o nome especificado em Servidor vinculado deverá ser o nome da rede do servidor. Além disso, todas as tabelas recuperadas do servidor são provenientes do banco de dados padrão definido para o logon no servidor vinculado.

    • Outra fonte de dados

      Especifique um tipo de servidor OLE DB diferente do SQL Server. Selecione esta opção para ativar as opções.

    • Provedor

      Selecione uma fonte de dados OLE DB na caixa de listagem. O provedor OLE DB está registrado com o PROGID fornecido no registro.

    • Nome do produto

      Digite o nome do produto da fonte de dados OLE DB para adicionar como servidor vinculado.

    • Fonte de dados

      Digite o nome da fonte de dados conforme interpretado pelo provedor OLE DB. Se você estiver se conectando a uma instância do SQL Server, forneça o nome dessa instância.

    • Cadeia de caracteres do provedor

      Digite o identificador programático exclusivo (PROGID) do provedor OLE DB que corresponde à fonte de dados. Para obter exemplos de cadeias de caracteres de provedor válidas, consulte sp_addlinkedserver.

    • Localidade

      Digite a localização do banco de dados, conforme interpretado pelo provedor OLE DB.

    • Catálogo

      Digite o nome do catálogo a ser usado ao fazer uma conexão com o provedor OLE DB.

Editar a página Segurança das propriedades do servidor vinculado

Na página Segurança, especifique o contexto de segurança usado quando a instância original se conecta ao servidor vinculado. Aqui, há duas estratégias para configurar que podem ser usadas sozinhas ou combinadas. A primeira é mapear os logons do servidor local para o servidor remoto e a segunda é como o servidor vinculado deve tratar os logons que não estão mapeados.

Adicionar mapeamentos de logon

Opcionalmente, você pode especificar como os logons específicos do servidor local são autenticados usando o servidor vinculado.

Em Logon do servidor local para mapeamentos de logon do servidor remoto, repita o processo a seguir para cada logon que você gostaria de mapear:

  1. Selecione Adicionar.

  2. Especifique um Logon local.

    Especifique o logon local que pode se conectar ao servidor vinculado. O logon local pode ser um logon usando a autenticação do SQL Server ou um logon de autenticação do Windows. Não há suporte para o uso de um grupo do Windows ou de um usuário de banco de dados independente. Use essa lista para restringir a conexão a logons específicos ou para permitir que alguns logons se conectem como um logon diferente.

    Observação

    Problemas comuns com servidores vinculados usando a autenticação do Windows em uma instância remota do SQL Server surgem de problemas com nomes de entidades de serviço (SPNs). Para obter mais informações, consulte Suporte para nomes de entidades de serviço (SPNs) em conexões de cliente. Microsoft Kerberos Configuration Manager for SQL Server é uma ferramenta de diagnóstico que ajuda a solucionar problemas de Kerberos relativos à conectividade com SQL Server. Para obter mais informações, consulte Microsoft Kerberos Configuration Manager for SQL Server.

  3. Selecione Representar (opcional).

    Transmita o nome de usuário e a senha do logon local para o servidor vinculado. Para a autenticação do SQL Server, um logon com exatamente o mesmo nome e senha deve existir no servidor remoto. Para logons do Windows, o logon deve ser válido no servidor vinculado.

    Para usar a representação, a configuração deve atender ao requisito de delegação.

  4. Especifique um Usuário Remoto se você não estiver usando representação.

    Use o usuário remoto para mapear o usuário definido em Logon local. O Usuário Remoto deve ser um logon de autenticação do SQL Server no servidor remoto.

  5. Especifique uma Senha Remota se não estiver usando representação.

    Especifique a senha do Usuário Remoto.

  6. Selecione Remover para remover um logon local existente, se desejar.

Especifique o contexto de segurança padrão para logons não presentes na lista de mapeamento

Em um ambiente de domínio em que os usuários se conectam usando seus logons de domínio, selecionar Ser feita usando o contexto de segurança atual do logon geralmente é a melhor escolha. Quando os usuários se conectam ao SQL Server original usando um logon do SQL Server, a melhor opção geralmente é selecionar Usando este contexto de segurança e, em seguida, fornecer as credenciais necessárias para se autenticar no servidor vinculado.

Selecione uma das seguintes opções:

  • Não pode ser feita

    Não será feita uma conexão para logons não definidos na lista.

  • Ser feita sem usar um contexto de segurança

    Uma conexão é feita sem usar um contexto de segurança para logons não definidos na lista.

  • Ser feita usando o contexto de segurança atual do logon

    Uma conexão é feita utilizando o atual contexto de segurança do login para logins não definidos na lista. Se estiver conectado ao servidor local usando a Autenticação do Windows, suas credenciais do Windows serão usadas para se conectar ao servidor remoto. Se estiver conectado ao servidor local usando a Autenticação do SQL Server, seu nome de logon e senha serão usados para se conectar ao servidor remoto. Nesse caso, um logon com exatamente o mesmo nome e senha deve existir no servidor remoto.

  • Ser feita usando este contexto de segurança

    Usa-se o login e a senha especificados nas caixas Login remoto e Com senha para logins que não estão definidos na lista. O logon remoto deve ser um logon de autenticação do SQL Server no servidor remoto.

Cuidado

Se um servidor vinculado estiver configurado com a opção Ser realizado usando este contexto de segurança, qualquer usuário na instância poderá acessar o servidor vinculado remoto usando esse contexto. Isso pode ter o potencial não intencional de abuso ou acesso interno mal-intencionado. O Acesso remoto autenticado do SQL fornecido ao servidor vinculado deve conceder permissões mínimas necessárias ao servidor remoto para garantir um princípio de privilégio mínimo e reduzir a superfície de ataque.

Editar a página Opções do Servidor nas propriedades do servidor vinculado (opcional)

Para exibir ou especificar opções do servidor, selecione a página Opções do Servidor. Você pode editar qualquer uma das seguintes opções:

  • Compatível com Ordenação

    Afeta a execução de consultas distribuídas em servidores vinculados. Se essa opção for definida como verdadeira, o SQL Server presumirá que todos os caracteres no servidor vinculado são compatíveis com o servidor local, com relação ao conjunto de caracteres e à sequência de ordenação (ou ordem de classificação). Isso permite que o SQL Server envie comparações em colunas de caracteres ao provedor. Se essa opção não estiver definida, o SQL Server sempre avaliará as comparações nas colunas de caracteres localmente.

    Essa opção deve ser definida somente se houver certeza de que a fonte de dados correspondente ao servidor vinculado tem o mesmo conjunto de caracteres e a mesma ordem de classificação que o servidor local.

  • Acesso a dados

    Habilita e desativa um servidor vinculado para acesso a consultas distribuídas.

  • RPC

    Habilita chamadas de procedimento remoto (RPC) do servidor especificado.

  • Saída RPC

    Habilita a RPC para o servidor especificado.

  • Usar Ordenação Remota

    Determina se deve ser usada a ordenação de uma coluna remota ou de um servidor local.

    Se verdadeiro, a ordenação de colunas remotas será usada para fontes de dados do SQL Server, e a ordenação especificada no nome da ordenação será usada para fontes de dados que não sejam do SQL Server.

    Se for falso, as consultas distribuídas sempre usam a ordenação padrão do servidor local, enquanto o nome da ordenação e a ordenação de colunas remotas são ignorados. O padrão é falso.

  • Nome da Ordenação

    Especifica o nome da ordenação usada pela fonte de dados remota se Usar ordenação remota for verdadeiro e se a fonte de dados não for uma fonte de dados do SQL Server. O nome deve ser uma das ordenações com suporte pelo SQL Server.

    Use essa opção ao acessar uma fonte de dados OLE DB diferente do SQL Server, mas cuja ordenação corresponda a uma das ordenações do SQL Server.

    O servidor vinculado deve oferecer suporte a uma única ordenação a ser usada em todas as colunas desse servidor. Não defina essa opção se o servidor vinculado oferecer suporte a várias ordenações em uma única fonte de dados ou se a ordenação do servidor vinculado não puder ser determinada como correspondendo a uma das ordenações do SQL Server.

  • Tempo-limite da conexão

    Valor de tempo limite em segundos para se conectar a um servidor vinculado.

    Se 0, use o valor padrão da opção sp_configurede tempo limite de logon remoto .

  • Tempo Limite de Consulta

    Valor de tempo limite em segundos para consultas em um servidor vinculado.

    Se 0, use o valor da opção sp_configure de tempo limite de consulta remota padrão.

  • Habilitar Promoção de Transações Distribuídas

    Use essa opção para proteger as ações de um procedimento de servidor para servidor por meio de uma transação do Coordenador de Transações Distribuídas da Microsoft (MS DTC). Quando essa opção é TRUE, chamar um procedimento armazenado remoto inicia uma transação distribuída e inscreve essa transação no MS DTC. Para obter mais informações, consulte sp_serveroption.

Salvar o servidor vinculado

Selecione OK.

Visualizar ou editar opções de provedor do servidor vinculado no SSMS

Nem todos os provedores têm as mesmas opções disponíveis. Por exemplo, alguns tipos de dados podem ter índices disponíveis, enquanto outros não. Use essa caixa de diálogo para ajudar o SQL Server a compreender os recursos do provedor. O SQL Server instala alguns provedores de dados comuns. Porém, quando o produto que fornece os dados muda, o provedor instalado pelo SQL Server pode não oferecer suporte a todos os recursos mais recentes. A melhor fonte de informações sobre os recursos do produto que fornece os dados é a documentação desse produto.

Para abrir a página Opções de Provedores do servidor vinculado no SSMS:

  1. Abra o Pesquisador de Objetos.
  2. Expanda Objetos do Servidor.
  3. Expanda Servidores Vinculados.
  4. Expanda Provedores.
  5. Clique com o botão direito do mouse em um provedor e selecione Propriedades.

As opções do provedor são definidas da seguinte forma:

  • Parâmetro dinâmico

    Indica que o provedor permite a utilização da sintaxe de marcador de parâmetro ? para consultas parametrizadas. Defina essa opção somente se o provedor der suporte à interface ICommandWithParameters e oferecer suporte a um ? marcador de parâmetro. Definir essa opção permite que o SQL Server execute consultas parametrizadas em relação ao provedor. A capacidade de executar consultas parametrizadas em relação ao provedor pode resultar em melhor desempenho para determinadas consultas.

  • Consultas aninhadas

    Indica que o provedor permite instruções aninhadas SELECT na FROM cláusula. Definir essa opção permite que o SQL Server delegar determinadas consultas ao provedor que exigem instruções de aninhamento SELECT na FROM cláusula.

  • Somente nível zero

    Somente interfaces OLE DB de nível 0 são invocadas no provedor.

  • Permitir em processo

    O SQL Server permite que o provedor seja instanciado como um servidor em processo. Quando essa opção não está definida, o comportamento padrão é instanciar o provedor fora do processo do SQL Server. A instanciação do provedor fora do processo do SQL Server protege este último contra erros no provedor. Quando o provedor é instanciado fora do processo do SQL Server, atualizações ou inserções que façam referência a colunas longas (text, ntext ou image) não são permitidas.

  • Atualizações não transacionadas

    O SQL Server permite atualizações, mesmo que ITransactionLocal não esteja disponível. Se essa opção estiver habilitada, as atualizações no provedor não poderão ser recuperadas, pois o provedor não oferece suporte a transações.

  • Indexar como caminho de acesso

    O SQL Server tenta usar índices do provedor para buscar dados. Por padrão, índices são usados somente para metadados e nunca são abertos

  • Proibir acesso ad hoc

    O SQL Server não permite acesso ad hoc por meio das funções OPENROWSET e OPENDATASOURCE no provedor OLE DB. Quando essa opção não está definida, o SQL Server também não permite acesso ad hoc.

  • Oferece suporte ao operador 'Like'

    Indica que o provedor dá suporte a consultas usando a LIKE palavra-chave.

Criar um servidor vinculado com Transact-SQL

Para criar um servidor vinculado usando o Transact-SQL, use as instruções sp_addlinkedserver, CREATE LOGIN e sp_addlinkedsrvlogin .

Esse exemplo cria um servidor vinculado a outra instância do SQL Server usando Transact-SQL:

  1. No Editor de Consultas, insira o seguinte comando Transact-SQL para vincular a uma instância do SQL Server chamada SRVR002\ACCTG:

    USE [master];
    GO
    
    EXECUTE master.dbo.sp_addlinkedserver
        @server = N'SRVR002\ACCTG',
        @srvproduct = N'SQL Server';
    GO
    
  2. Execute o código a seguir para configurar o servidor vinculado para usar as credenciais de domínio do logon que está usando o servidor vinculado.

    EXECUTE master.dbo.sp_addlinkedsrvlogin
        @rmtsrvname = N'SRVR002\ACCTG',
        @locallogin = NULL,
        @useself = N'True';
    GO
    

Acompanhamento: etapas a serem tomadas depois de criar um servidor vinculado

As etapas a seguir ajudam você a validar um servidor vinculado.

Teste o servidor vinculado

Considerando uma das duas abordagens a seguir para testar a autenticação de um servidor vinculado em seu contexto de segurança atual.

  • Para testar a capacidade de se conectar a um servidor vinculado no SSMS, navegue até o servidor vinculado no Pesquisador de Objetos, clique com o botão direito do mouse no servidor vinculado e selecione Testar Conexão.

  • Para testar a capacidade de se conectar a um servidor vinculado no T-SQL, execute uma instrução básica SELECT , por exemplo, para recuperar informações básicas do catálogo de banco de dados. Este exemplo retorna os nomes dos bancos de dados no servidor vinculado.

    SELECT name
    FROM [SRVR002\ACCTG].master.sys.databases;
    GO
    

Unir tabelas de um servidor vinculado

Use nomes de quatro partes para fazer referência a um objeto em um servidor vinculado. Execute o código a seguir para retornar uma lista de todos os logons no servidor local e seus logons correspondentes no servidor vinculado.

SELECT local.name AS LocalLogins,
       linked.name AS LinkedLogins
FROM master.sys.server_principals AS local
     LEFT OUTER JOIN [SRVR002\ACCTG].master.sys.server_principals AS linked
         ON local.name = linked.name;
GO

Quando NULL é retornado para o logon do servidor vinculado, isso indica que o logon não existe no servidor vinculado. Esses logons não podem usar o servidor vinculado, a menos que o servidor vinculado esteja configurado para passar um contexto de segurança diferente ou o servidor vinculado aceite conexões anônimas.

Servidores vinculados com a Instância Gerenciada de SQL do Azure

Se você estiver usando a Instância Gerenciada de SQL do Azure, confira os seguintes exemplos de sp_addlinkedserver: