Comment créer un serveur lié dans RDS for SQL Server avec la source comme RDS ?

Dernière mise à jour : 03/10/2022

Je veux créer un serveur lié à partir d'une instance Amazon Relational Database Service (Amazon RDS) pour Microsoft SQL Server vers SQL Server. Comment procéder ?

Brève description

Amazon RDS est un service géré, les utilisateurs n'ont donc pas accès à l'administrateur système. La création directe d'un serveur lié à partir d'une interface graphique génère une erreur. Pour créer un serveur lié, utilisez T-SQL. Les seules cibles prises en charge sont SQL Server.

Conditions préalables

Vous devez disposer d'une connectivité entre RDS for SQL Server et le serveur SQL cible.

Remarque : Le mot de passe et la configuration du serveur lié restent intacts même après le remplacement d'un hôte.

Solution

Instance RDS for SQL Server vers Instance RDS for SQL Server

Il est recommandé d'utiliser le nom DNS lors de la création d'un serveur lié avec RDS for SQL Server comme source et RDS for SQL Server comme cible. L'utilisation du nom DNS empêche les modifications d'adresse IP dues au remplacement de l'hôte ou à la modification du serveur.

Dans Amazon RDS, les adresses IP sont dynamiques et les points de terminaison sont statiques. Il est donc recommandé d'utiliser des points de terminaison pour se connecter à votre instance. Chaque instance Amazon RDS possède un point de terminaison.

Paramètres :

  • @server : le nom de votre serveur lié.
  • @datasrc : le nom de votre point de terminaison RDS. Pour l'instance Amazon Elastic Compute Cloud (Amazon EC2) sur site, votre adresse IP ou votre nom DNS EC2 sur site.
  • @rmtuser : l'identifiant qui permet d'accéder à la base de données cible.
  • @rmtpassword : Le mot de passe pour l'identifiant.

Étape 1 : Connectez-vous à l'instance RDS for SQL Server

Connectez-vous à l'instance à l'aide de l'identifiant principal, puis exécutez la commande suivante. Assurez-vous que vous utilisez le point de terminaison et non l'adresse IP. Les adresses IP des instances RDS peuvent changer lors du remplacement d'un hôte.

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

Étape 2 : Testez le serveur lié

1.    Dans Microsoft SQL Server Management Studio (SSMS), connectez-vous à l'instance RDS.

2.    Dans le menu Affichage, sélectionnez Explorateur d'objets.

3.    Sélectionnez Objets de serveur, Serveurs liés.

4.    Cliquez avec le bouton droit sur le nom de votre serveur, et sélectionnez Tester la connexion.

Étape 3 : Interrogez le serveur lié

Exécutez la requête suivante :

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

Instance RDS for SQL Server vers une instance SQL Server EC2 ou un serveur SQL sur site

Étape 1 : Créez le serveur lié

Créez le serveur lié avec RDS for SQL Server comme source vers SQL Server sur une instance EC2 ou vers un serveur SQL sur site.

Exécutez les commandes suivantes pour créer le serveur lié à l'aide de l'adresse IP du serveur distant :

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

Exécutez les commandes suivantes pour créer le serveur lié à l'aide du nom DNS du serveur distant :

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

Étape 2 : Testez le serveur lié

1.    Dans Microsoft SQL Server Management Studio (SSMS), connectez-vous à l'instance RDS.

2.    Dans le menu Affichage, sélectionnez Explorateur d'objets.

3.    Sélectionnez Objets de serveur, Serveurs liés.

4.    Cliquez avec le bouton droit sur le nom de votre serveur, et sélectionnez Tester la connexion.

Étape 3 : Interrogez le serveur lié

Exécutez la requête suivante :

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

Configurez du serveur lié à l'aide de l'authentification Microsoft Windows

Remarque : La configuration d'un serveur lié depuis RDS for SQL Server vers une instance EC2 ou vers un serveur SQL sur site à l'aide de l'authentification Windows n'est pas prise en charge.

Conditions préalables

  • Vous devez avoir créé le domaine et l'associer à AWS Managed Microsoft AD.
  • L'instance SQL Server EC2 source et le serveur SQL RDS cible doivent disposer avoir une connectivité.

Étape 1 : Configurez le serveur lié à partir d'un serveur EC2 ou SQL server sur site vers RDS for SQL Server à l'aide de l'authentification Windows

1.    Connectez-vous avec votre identifiant de domaine et exécutez la requête suivante pour créer le serveur lié.

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

Étape 2 : Testez le serveur lié

1.    Dans Microsoft SQL Server Management Studio (SSMS), connectez-vous à l'instance RDS.

2.    Dans le menu Affichage, sélectionnez Explorateur d'objets.

3.    Sélectionnez Objets de serveur, Serveurs liés.

4.    Cliquez avec le bouton droit sur le nom de votre serveur, puis sélectionnez Tester la connexion.

Étape 3 : Interrogez le serveur lié

Exécutez la requête suivante :

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

Résolution des problèmes

Vous pouvez recevoir le message d'erreur suivant lors de la connexion depuis le client :

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

Cette erreur est due à un « double saut ». Un double saut se produit lorsqu'un ordinateur se connecte à un autre ordinateur pour se connecter à un troisième ordinateur. Des doubles sauts peuvent se produire dans les scénarios suivants :

  • Il n'existe pas de configuration de nom principal de service (SPN) permettant à AWS Managed AD de traiter l'authentification entre le client et l'instance EC2.
  • Le serveur lié est configuré à l'aide d'un point de terminaison ne provenant pas de votre domaine, tel que le point de terminaison de l'instance RDS. La méthode d'authentification pour EC2 et RDS doit être KERBEROS.

Pour résoudre ce problème, procédez comme suit :

Étape 1. Vérifiez la méthode d'authentification pour confirmer que KERBEROS est sélectionné lors de la connexion à la fois à RDS et à EC2

Exécutez la requête suivante à l'aide de l'identifiant de domaine depuis le client :

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

Étape 2 : Corrigez les SPN pour le compte de service SQL Server qui fait partie de votre domaine

1.    Dans Active Directory Utilisateurs et Ordinateurs, sélectionnez YourDomain.com, YourDomain, Utilisateurs.

2.    Cliquez avec le bouton droit sur YourServiceAccount pour afficher les propriétés.

3.    Dans l'onglet Délégation, choisissez Confier à cet utilisateur la délégation à tout service (Kerberos uniquement), et sélectionnez OK.

4.    Redémarrez le service SQL Server sur l'instance EC2 ou sur SQL Server sur site.

5.     Ajoutez le SPN pour le compte de service comme indiqué dans l'exemple de commande suivant. Remplacez YourDomainName\ServiceAccountName et le domaine Ec2name par les valeurs correctes pour votre domaine.

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

6.    Exécutez la commande suivante pour vérifier les SPN nouvellement créés :

setspn -l YourDomainName\ServiceAccountName

Étape 3 : Recréez le serveur lié à l'aide du point de terminaison RDS YourDomain.com

1.    Exécutez la requête suivante dans RDS for SQL Server afin de récupérer le nom du serveur :

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

2.    Dans la sortie de la commande précédente, vérifiez la colonne du nom du serveur pour vérifier le SPN, comme indiqué dans l'exemple suivant.

setspn -l YourServerName

La sortie de commande précédente indique également les ServicePrincipalNames enregistrés pour votre instance RDS, comme indiqué dans l'exemple suivant :

MSSQLSvc/ YourServerName.yourdomainname.com:1433

3.    Exécutez la commande suivante pour recréer le serveur lié à l'aide de l'identifiant de domaine. La source de données est la même que celle que vous avez extraite de la sortie de commande à l'étape 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.    Testez la connectivité depuis le client.

Remarque : actuellement, un serveur lié est pris en charge comme cible pour SQL Server. Cela est dû au fait que Amazon RDS est un service géré. Vous n'avez pas accès au système d'exploitation pour installer des fichiers ODBC supplémentaires ou les pilotes nécessaires pour connecter différents serveurs de base de données tels qu'Oracle,MYSQL,PostGreSQL.

Pour les serveurs liés hétérogènes, vous pouvez utiliser RDS Custom for SQL Server.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?