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

Data da última atualização: 3/10/2022

Quero criar um servidor vinculado de uma instância do Amazon Relational Database Service (Amazon RDS) para Microsoft SQL Server para SQL Server. Como posso fazer isso?

Descrição breve

O Amazon RDS é um serviço gerenciado, portanto, os usuários não têm acesso de administrador de sistema. A criação direta de um servidor vinculado via interface gráfica do usuário resulta em erro. Para criar um servidor vinculado, use T-SQL. Os únicos destinos compatíveis são SQL Server.

Pré-requisitos

É 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

É prática recomendada usar o nome de DNS ao criar um servidor vinculado ao RDS para SQL Server como a origem do RDS para SQL Server como destino. Usar o nome de DNS 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. Assim, usar endpoints para conectar à instância é uma prática recomendada. Cada instância do Amazon RDS tem um endpoint.

Parâmetros:

  • @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 de 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.

Etapa 1: conectar à instância do RDS para SQL Server

Conecte à 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 uma substituição de 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

Etapa 2: testar o servidor vinculado

1.    No Microsoft SQL Server Management Studio (SSMS), conecte à instância do RDS.

2.    No menu View (Exibir), selecione Object Explorer (Explorador de objetos).

3.    Selecione Server Objects (Objetos de servidor), Linked Servers (Servidores vinculados).

4.    Clique com o botão direito do mouse no nome do servidor e, em seguida, selecione Test the connection (Testar a conexão).

Etapa 3: consultar 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

Etapa 1: criar o servidor vinculado

Crie o servidor vinculado com o RDS for 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 usando 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 de 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

Etapa 2: testar o servidor vinculado

1.    No Microsoft SQL Server Management Studio (SSMS), conecte à instância do RDS.

2.    No menu View (Exibir), selecione Object Explorer (Explorador de objetos).

3.    Selecione Server Objects (Objetos de servidor), Linked Servers (Servidores vinculados).

4.    Clique com o botão direito do mouse no nome do servidor e, em seguida, selecione Test the connection (Testar a conexão).

Etapa 3: consultar 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: não há suporte à configuração de 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.

Etapa 1: configurar o servidor vinculado de um EC2 SQL Server ou SQL Server on-premises para RDS para SQL Server usando a autenticação do Windows

1.    Faça login com o login do seu domínio e execute a consulta a seguir 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

Etapa 2: testar o servidor vinculado

1.    No Microsoft SQL Server Management Studio (SSMS), conecte à instância do RDS.

2.    No menu View (Exibir), selecione Object Explorer (Explorador de objetos).

3.    Selecione Server Objects (Objetos de servidor), Linked Servers (Servidores vinculados).

4.    Clique com o botão direito do mouse no nome do servidor e, em seguida, selecione Test the connection (Testar a conexão).

Etapa 3: consultar o servidor vinculado

Execute a seguinte consulta:

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

Solução de problemas

Talvez você receba a seguinte mensagem de erro ao se conectar via cliente:

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

Esse erro é causado por um “salto duplo”. Um salto duplo ocorre quando um computador se conecta a outro computador para se conectar a um terceiro computador. Os saltos duplos podem ocorrer nos seguintes cenários:

  • Não há uma configuração de nome 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 é configurado usando um endpoint que não pertence ao seu domínio, como o endpoint da instância RDS. O método de autenticação tanto para o EC2 quanto para o RDS precisa ser o KERBEROS.

Para solucionar esse problema, faça o seguinte:

Etapa 1. Verifique o método de autenticação para confirmar se o KERBEROS está sendo selecionado na conexão tanto ao RDS quanto ao EC2

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

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

Etapa 2: corrija os SPNs da conta de serviço do SQL Server que faz parte do seu domínio

1.    Em Users and Computers (Usuários e computadores) do Active Directory, selecione YourDomain.com, YourDomain, Users (Usuários).

2.    Clique com o botão direito do mouse em YourServiceAccount para visualizar as propriedades.

3.    Na guia Delegation (Delegation), escolha Trust this user for delegation to any service (Kerberos only) (Confiar neste usuário para delegação para qualquer serviço [somente Kerberos]) e, em seguida, 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 YourDomainName\ServiceAccountName e o domínio Ec2name pelos valores corretos para seu domínio.

setspn -A MSSQLSvc/Ec2name.domain.com YourDomainName\ServiceAccountName
setspn -A MSSQLSvc/Ec2name.domain.com:1433 YourDomainName\ServiceAccountName

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

setspn -l YourDomainName\ServiceAccountName

Etapa 3: recriar o servidor vinculado usando o endpoint do RDS YourDomain.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, conforme mostrado no exemplo a seguir.

setspn -l YourServerName

A saída do comando anterior também mostra os ServicePrincipalNames registrados para sua instância do RDS, conforme mostrado no seguinte exemplo:

MSSQLSvc/ YourServerName.yourdomainname.com:1433

3.    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.YourDomainnanme,com';
GO
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'LinkedServerToRDSInstance', @locallogin = NULL , @useself = N'True'
GO

4.    Teste a conectividade do cliente.

Observação: no momento, há suporte a um servidor vinculado como destino para o SQL Server. Isso ocorre porque o Amazon RDS é um serviço gerenciado. Você não tem acesso ao sistema operacional para instalar ODBC adicional ou qualquer um dos drivers necessários para conectar diferentes servidores de banco de dados, como Oracle, MYSQL e PostgreSQL.

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


Implement linked servers with Amazon RDS for Microsoft SQL Server (Implementar servidores vinculados com o Amazon RDS para Microsoft SQL Server)

Este artigo foi útil?


Precisa de ajuda com faturamento ou suporte técnico?