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

Lecture de 7 minute(s)
0

Je souhaite créer un serveur lié entre une instance Amazon Relational Database Service (Amazon RDS) for Microsoft SQL Server et SQL Server.

Brève description

Amazon RDS est un service managé, de sorte que les utilisateurs n'ont pas accès à l'administrateur système. La création directe d'un serveur lié à partir d'une interface graphique entraîne une erreur. Pour créer un serveur lié, utilisez T-SQL.

Une connectivité entre RDS for SQL Server et le serveur SQL cible est requise.

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

Résolution

Instance RDS for SQL Server vers instance RDS for SQL Server

Lorsque vous créez un serveur lié avec RDS for SQL Server comme source et RDS for SQL Server comme cible, utilisez le nom DNS. Cela permet d'éviter les modifications d'adresse IP dues au remplacement d'hôtes ou à des modifications de 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. Reportez-vous aux paramètres suivants :

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

Connexion à l'instance RDS for SQL Server

Connectez-vous à l'instance à l'aide de l'identifiant principal, puis exécutez la commande suivante. Assurez-vous d'utiliser 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

Tester 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 du serveur, Serveurs liés.
  4. Faites un clic droit sur le nom du serveur, puis sélectionnez Tester la connexion.

Interroger 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

Créer le serveur lié

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

Pour créer le serveur lié avec l'adresse IP du serveur distant, exécutez les commandes suivantes :

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

Pour créer le serveur lié à l'aide du nom DNS du serveur distant, exécutez les commandes suivantes :

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

Tester 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 du serveur, Serveurs liés.
  4. Faites un clic droit sur le nom du serveur, puis sélectionnez Tester la connexion.

Interroger le serveur lié

Exécutez la requête suivante :

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

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

Remarque : Vous ne pouvez pas configurer un serveur lié à partir de RDS for SQL Server vers une instance EC2 ou vers un serveur SQL sur site avec authentification Windows.

Prérequis

  • Le domaine doit être créé et joint à AWS Managed Microsoft AD.
  • L'instance SQL Server EC2 source et le serveur SQL RDS cible doivent être connectés.

Configurer le serveur lié depuis un EC2 ou un serveur SQL sur site vers RDS for SQL Server à l'aide de l'authentification Windows

  • Connectez-vous avec votre identifiant de domaine, puis 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

Tester 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 du serveur, Serveurs liés.
  4. Faites un clic droit sur le nom de votre serveur, ensuite sélectionnez Tester la connexion.

Interroger le serveur lié

Exécutez la requête suivante :

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

Résolution des problèmes

Lorsque vous vous connectez depuis le client, le message d'erreur suivant peut s'afficher :

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

Cette erreur provient d'un « double tronçon. » Il y a double tronçon lorsqu'un ordinateur se connecte à un autre ordinateur pour se connecter à un troisième ordinateur. Un double tronçon peut 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é avec un point de terminaison qui ne provient pas de votre domaine, comme 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 :

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

Exécutez la requête suivante avec 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;

Corrigez les SPN du compte de service SQL Server qui fait partie de votre domaine.

  1. Dans Utilisateurs et ordinateurs d'Active Directory, sélectionnez exemple.com, exemple (nom de domaine), Utilisateurs.
  2. Pour afficher les propriétés, faites un clic droit sur YourServiceAccount.
  3. Dans l'onglet Délégation, choisissez Faire confiance à cet utilisateur pour la délégation à n'importe quel service (Kerberos uniquement), puis sélectionnez OK.
  4. Redémarrez le service SQL Server sur l'instance EC2 ou sur le serveur SQL sur site.
  5. Ajoutez le SPN pour le compte de service comme indiqué dans l'exemple de commande suivant. Remplacez exemple par votre nom de domaine. Remplacez ServiceAccountName et le domaine Ec2name par les valeurs appropriées pour votre domaine :
    setspn -A MSSQLSvc/Ec2name.domain.com example\ServiceAccountName
    setspn -A MSSQLSvc/Ec2name.domain.com:1433 example\ServiceAccountName

Pour vérifier les SPN nouvellement créés, exécutez la commande suivante :

setspn -l example\ServiceAccountName

Recréez le serveur lié à l'aide du point de terminaison RDS exemple.com.

  1. Pour récupérer le nom du serveur, exécutez la requête suivante dans RDS for SQL Server :

    select @@servername as ServerName, session_id,net_transport, auth_scheme from sys.dm_exec_connections where session_id= @@spid;
  2. Dans le résultat de la commande précédente, vérifiez la colonne du nom du serveur pour vérifier le SPN :

    setspn -l YourServerName
  3. Le résultat affiche également les ServicePrincipalNames enregistrés pour votre instance RDS, comme illustré dans l'exemple suivant :

    MSSQLSvc/ YourServerName.example.com:1433
  4. Pour recréer le serveur lié avec l'identifiant de domaine, exécutez la commande suivante. La source de données est la même que celle que vous avez extraite du résultat de la commande à l'étape 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

Testez la connectivité depuis le client.

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

Informations connexes

Implémenter des serveurs liés avec Amazon RDS for Microsoft SQL Server