Como criar um servidor vinculado no RDS para SQL Server usando o RDS como origem?

7 minuto de leitura
0

Quero criar um servidor vinculado para SQL Server a partir de uma instância do Amazon Relational Database Service (Amazon RDS) para Microsoft SQL Server.

Breve descrição

O Amazon RDS é um serviço gerenciado, portanto, os usuários não têm acesso de administrador do sistema. A criação direta de um servidor vinculado a partir de uma GUI resulta em um erro. Para criar um servidor vinculado, use o T-SQL.

É necessário existir conectividade entre o RDS para SQL Server e o SQL Server de destino.

Observação: a senha e a configuração do servidor vinculado permanecem intactas mesmo após a substituição do host.

Resolução

Instância do RDS para SQL Server para instância do RDS para SQL Server

Ao criar um servidor vinculado com RDS para SQL Server como origem para RDS para SQL Server como destino, use o nome DNS. Isso evita alterações no endereço IP devido a substituições de host ou alterações no servidor.

No Amazon RDS, os endereços IP são dinâmicos e os endpoints são estáticos. Portanto, a prática recomendada é usar endpoints para se conectar à sua instância. Cada instância do Amazon RDS tem um endpoint. Veja os parâmetros a seguir:

  • @server: O nome do servidor vinculado.
  • @datasrc: O nome do endpoint do RDS. Para a instância on-premises do Amazon Elastic Compute Cloud (Amazon EC2), o endereço IP ou nome DNS do EC2 on-premises.
  • @rmtuser: O nome de login que tem acesso ao banco de dados de destino.
  • @rmtpassword: A senha correspondente ao nome de login.

Conecte-se à instância do RDS para SQL Server

Conecte-se à instância usando o login principal e execute o comando a seguir. Certifique-se de usar o endpoint, e não o endereço IP. Os endereços IP das instâncias do RDS podem mudar durante a substituição do host.

EXEC master .dbo.sp_addlinkedserver @server = N'LinkedServerRDSSQL', @srvproduct= N'', @provider= N'SQLNCLI', @datasrc= N'SQL-2019.ckeixtynaaaj.us-east-1.rds.amazonaws.com'
go
EXEC master .dbo.sp_addlinkedsrvlogin @rmtsrvname=N'LinkedServerRDSSQL' ,@useself=N'False' ,@locallogin=NULL,@rmtuser =N'linkedserverloginname',@rmtpassword='YourStrongPassword'
go

Teste o servidor vinculado

  1. No Microsoft SQL Server Management Studio (SSMS), conecte-se à instância do RDS.
  2. No menu Exibir, selecione o Explorador de objetos.
  3. Selecione Objetos do servidor, Servidores vinculados.
  4. Clique com o botão direito do mouse no nome do seu servidor e selecione Testar a conexão.

Consulte o servidor vinculado

Execute a seguinte consulta:

select * from [LinkedServerName].[Databasename].[schemaname].[tablename]

Instância do RDS para SQL Server para uma instância do EC2 SQL Server ou um SQL Server on-premises

Crie o servidor vinculado

Crie o servidor vinculado com o RDS para SQL Server como a origem para o SQL Server em uma instância do EC2 ou para um SQL Server on-premises.

Execute os seguintes comandos para criar o servidor vinculado com o endereço IP do servidor remoto:

EXEC master .dbo.sp_addlinkedserver @server = N'LinkedServerRDSSQL', @srvproduct= N'', @provider= N'SQLNCLI', @datasrc= N'10.0.0.152'
Go
EXEC master .dbo.sp_addlinkedsrvlogin @rmtsrvname=N'LinkedServerRDSSQL' ,@useself=N'False' ,@locallogin=NULL,@rmtuser =N'linkedserverloginname',@rmtpassword='YourStrongPassword'
Go

Execute os seguintes comandos para criar o servidor vinculado usando o nome DNS do servidor remoto:

EXEC master .dbo.sp_addlinkedserver @server = N'LinkedServerRDSSQL', @srvproduct= N'', @provider= N'SQLNCLI', @datasrc= N'ServerName.datacenter.mycompany.com'
Go
EXEC master .dbo.sp_addlinkedsrvlogin @rmtsrvname=N'LinkedServerRDSSQL' ,@useself=N'False' ,@locallogin=NULL,@rmtuser =N'linkedserverloginname',@rmtpassword='YourStrongPassword'
go

Teste o servidor vinculado

  1. No Microsoft SQL Server Management Studio (SSMS), conecte-se à instância do RDS.
  2. No menu Exibir, selecione o Explorador de objetos.
  3. Selecione Objetos do servidor, Servidores vinculados.
  4. Clique com o botão direito do mouse no nome do seu servidor e selecione Testar a conexão.

Consulte o servidor vinculado

Execute a seguinte consulta:

select * from [LinkedServerName].[Databasename].[schemaname].[tablename]

Configurar o servidor vinculado usando a Autenticação do Microsoft Windows

Observação: você não pode configurar um servidor vinculado do RDS para SQL Server para uma instância do EC2 ou para um SQL Server on-premises usando a Autenticação do Windows.

Pré-requisitos

  • O domínio deve ter sido criado e estar associado ao AWS Managed Microsoft AD.
  • A instância do EC2 SQL Server de origem e o RDS SQL Server de destino devem ter conectividade.

Configure o servidor vinculado de um EC2 SQL Server ou SQL Server on-premises para RDS para SQL Server usando a Autenticação do Windows

  • Faça login com o login do seu domínio e execute a seguinte consulta para criar o servidor vinculado.
USE [master]
GO
EXEC sp_addlinkedserver    @server=N'LinkedServerToRDSInstance',@srvproduct=N'',@provider=N'SQLNCLI',@datasrc=N'EndpointName';
GO
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'LinkedServerToRDSInstance', @locallogin = NULL , @useself = N'True'
GO

Teste o servidor vinculado

  1. No Microsoft SQL Server Management Studio (SSMS), conecte-se à instância do RDS.
  2. No menu Exibir, selecione o Explorador de objetos.
  3. Selecione Objetos do servidor, Servidores vinculados.
  4. Clique com o botão direito do mouse no nome do servidor e selecione Testar a conexão.

Consulte o servidor vinculado

Execute a seguinte consulta:

select * from [LinkedServerName].[Databasename].[schemaname].[tablename]

Solução de problemas

Ao se conectar via cliente, você pode receber a seguinte mensagem de erro:

Msg 18456, Level 14, State 1, Line 21
Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'

Esse é causado por um “salto duplo”. Um salto duplo ocorre quando um computador se conecta a outro computador para se conectar a um terceiro computador. Esse erro pode ocorrer nas seguintes situações:

  • Não há uma configuração de nome de entidade principal de serviço (SPN) para o AWS Managed AD processar a autenticação entre o cliente e a instância do EC2.
  • O servidor vinculado está configurado usando um endpoint que pertence ao seu domínio, como o endpoint da instância do RDS. O método de autenticação para o EC2 e o RDS precisa ser o KERBEROS.

Para resolver esse problema, conclua as seguintes etapas:

Verifique o método de autenticação para confirmar se o KERBEROS está sendo escolhido na conexão ao RDS e ao EC2

Execute a consulta a seguir usando o login do domínio do cliente:

select @@servername as ServerName, session_id,net_transport, auth_scheme from sys.dm_exec_connections where session_id= @@spid;

Corrija os SPNs da conta de serviço do SQL Server que faz parte do seu domínio

  1. Em Usuários e computadores do Active Directory, selecione exemplo.com, exemplo (nome de domínio), Usuários.
  2. Clique com o botão direito do mouse em YourService Account para visualizar as propriedades.
  3. Na guia Delegação, selecione Confiar neste usuário para delegação para qualquer serviço (somente Kerberos) e selecione OK.
  4. Reinicie o serviço SQL Server na instância do EC2 ou no SQL Server on-premises.
  5. Adicione o SPN referente à conta de serviço conforme mostrado no comando de exemplo a seguir. Substitua exemplo pelo nome do seu domínio. Substitua ServiceAccountName e o domínio Ec2name pelos valores corretos para seu domínio:
    setspn -A MSSQLSvc/Ec2name.domain.com example\ServiceAccountName
    setspn -A MSSQLSvc/Ec2name.domain.com:1433 example\ServiceAccountName

Execute o seguinte comando para verificar os SPNs recém-criados:

setspn -l example\ServiceAccountName

Recrie o servidor vinculado usando o endpoint do RDS example.com

  1. Execute a seguinte consulta no RDS para SQL Server para recuperar o nome do servidor:

    select @@servername as ServerName, session_id,net_transport, auth_scheme from sys.dm_exec_connections where session_id= @@spid;
  2. Na saída do comando anterior, verifique a coluna do nome do servidor para verificar o SPN:

    setspn -l YourServerName
  3. A saída também mostra os ServicePrincipalNames registrados para sua instância do RDS, conforme mostrado no exemplo a seguir:

    MSSQLSvc/ YourServerName.example.com:1433
  4. Execute o comando a seguir para recriar o servidor vinculado usando o login do domínio. A fonte de dados é a mesma que você recuperou da saída do comando na etapa 2:

    USE [master]
    GO
    EXEC sp_addlinkedserver    @server=N'LinkedServerToRDSInstance',@srvproduct=N'',@provider=N'SQLNCLI',@datasrc=N'YourServerName.example,com';
    GO
    EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'LinkedServerToRDSInstance', @locallogin = NULL , @useself = N'True'
    GO

Teste a conectividade do cliente.

Para servidores vinculados heterogêneos, é possível usar o RDS Custom para SQL Server.

Informações relacionadas

Implantar servidores vinculados com o Amazon RDS para Microsoft SQL Server