4

Comment ajouter un serveur lié établissant une connexion à partir d'une connexion SQL Server distante à une instance locale de SQL Server Express? Par local, je veux dire le PC que j'utilise avec l'instance SQL Server Express et par serveur distant, je me connecte avec SSMS. Surtout sur le web, la situation inverse est décrite - de la distance au local. Je commence par cette documentation: https://docs.microsoft.com/en-us/sql/relational-databases/linked-servers/create-linked-servers-sql-server-database-engineComment créer un serveur lié sur un serveur distant sur un PC local

  1. Dois-je traiter serveur local comme si elle était à distance? Je veux dire que je dois trouver l'adresse IP de l'instance locale du serveur lié? Si oui, alors la question est comment puis-je trouver les paramètres nécessaires du serveur local pour le rendre distant? Cette requête était un début prometteur pour moi https://stackoverflow.com/a/14695530/1903793 cependant j'obtiens des valeurs nulles pour local_net_address, local_tcp_port, et client_net_address. Donc je suis coincé.
  2. S'il vous plaît voir l'image ci-dessous. Que saisir dans le champ Serveur lié? .\SQLExpress ou une autre expression.
  3. Que choisir SQL Server ou Other data source?
  4. Si Autre source de données, alors qu'en est-il fournisseur?

enter image description here

+1

Vous n'écrivez rien sur votre configuration réseau. Le serveur distant est-il dans votre LAN ou sur Internet? Je pense que votre question est plus liée à network/firewall/nat/routing qu'à sql-server. – MatSnow

+0

@MatSnow Remote est sur Internet. Supposons que nous puissions ajuster la configuration réseau du serveur distant de la manière qui est nécessaire. Cependant je pense que l'accent devrait être mis sur la configuration du PC local pour le rendre visible sur le net, pas sur le serveur distant. –

+0

'comment le rendre visible au net' - que voulez-vous dire par ** net **? LAN, Internet? – MatSnow

Répondre

4
  1. Oui. Il est local à vous pas à l'autre SQL Server où vous souhaitez créer un serveur lié. Pour l'autre serveur, votre serveur local est distant. Assurez-vous que votre serveur local peut accepter les connexions réseau à l'aide de SQL Server Configuration Manager.

  2. Si vous utilisez SQL Server, vous devez fournir le nom réseau de votre serveur local, le nom que vous utilisez dans SSMS. Sauf si vous utilisez localhost ou "." alors vous devez le trouver, vous pouvez utiliser ipconfig /all et chercher le nom d'hôte. Cela fonctionnera en supposant que votre serveur local et l'autre serveur sont sur le même réseau. Avec Autre serveur vous avez plus d'options. Dans un serveur lié, vous fournissez ce que vous voulez, puis spécifiez les informations de connexion ci-dessous. Here you can find more information about values

  3. Vous choisissez ce que votre scénario permet. Choisissez Sql Server si vous pouvez

  4. Regardez lien dans Pt.2

EDIT:

DISCLAIMER Je suis pas réseau ingénieur, donc je pourrais être absent quelques étapes cruciales pour effectivement le faire fonctionner et c'est juste une direction générale. Si vous êtes sur un autre réseau que votre autre serveur, vous devrez ouvrir le pare-feu sur le port 1433 TCP non seulement sur votre machine, mais aussi sur le routeur et le port 1433 du routeur sur le port 1433 de votre machine. IP, vous devriez être capable de relier les deux serveurs. Il sort de la portée de SO comme la mention @MatSnow dans son commentaire.

4

Si vous avez trouvé «de la télécommande à la locale», ce qui est le contraire de ce que vous voulez, imaginez que votre PC est le serveur et que le serveur est le PC local. Imaginez que vous ayez 2 machines: machine1 et machine2. pour ajouter un serveur de liens sur la machine1 à la machine2: Ouvrez simplement la nouvelle page du serveur de liens comme ci-dessus sur la machine1. serveur lié: (Machine2 adresse IP) (sélectionné) serveur SQL

enter image description here Aller à la page de sécurité et sélectionnez: être faites en utilisant ce contexte de sécurité. et entrez le nom d'utilisateur et le mot de passe de l'instance de serveur SQL sur la machine2. enter image description here

1

Je ne vais pas parler de votre IP, car il est clair que vous devez disposer d'une adresse IP publique/accessible est un préalable

  1. Vous devez activer le protocole TCP/Protocole IP dans votre serveur SQL, votre serveur accepte ainsi les demandes qui ne proviennent pas de votre hôte local. vous pouvez le faire dans le Sql Server Configuration Manager comme vous pouvez le voir dans l'image ci-dessous

enter image description here

  1. Et une fois que cela est fait, vous avez pour ouvrir le port 1433 dans votre pare-feu si les connexions ne sont pas bloqués comme vous pouvez le voir here

  2. à ce stade, il vous suffit d'ajouter le serveur lié comme d'habitude, par IP/Inst ance

1

Comme d'autres l'ont souligné. Une grande partie de la réponse et du succès dépend de la capacité des deux machines à communiquer. Le DNS est-il configuré? Pare-feu? Pouvez-vous ping? Pouvez-vous résoudre les noms de machines? Pouvez-vous autrement communiquer d'un serveur à l'autre? La différence de création d'un serveur lié à partir de votre machine locale et d'un serveur distant et inversement ne fait que renverser l'information. Votre machine locale doit toujours être un serveur avec la configuration appropriée et les permissions accordées, mais si c'est le cas, c'est juste un autre serveur SQL. Un serveur lié se contente d'avoir 2 serveurs SQL capables de communiquer. Parce que je travaille souvent à distance (VPN) et les serveurs ne peuvent pas toujours résoudre mes machines Nom DNS J'utilise le script suivant pour créer un serveur lié sur un serveur distant pour me connecter à ma machine locale via l'adresse IP Je suis connecté au serveur via SSMS avec:

DECLARE @AutoExecute BIT = 1 
DECLARE @LinkedServerName VARCHAR(50) = 'LinkedServername' --if null or blank the linked server will just get the instance name 
DECLARE @InstanceAppend VARCHAR(45) = '\InstanceName' --make emptry string if none 
DECLARE @user VARCHAR(20) = 'username' 
DECLARE @password VARCHAR(20) = 'password' 

DECLARE @SQL VARCHAR(MAX) 
DECLARE @IPAddress VARCHAR(255) 
DECLARE @Instance VARCHAR(300) 
DECLARE @SrvName VARCHAR(300) 

SELECT @IPAddress = client_net_address 
    ,@Instance = client_net_address + ISNULL(@InstanceAppend,'') 
FROM 
    sys.dm_exec_connections 
WHERE Session_id = @@SPID; 

SET @SrvName = CASE WHEN LEN(@LinkedServerName) > 0 THEN @LinkedServerName ELSE @Instance END 

IF NOT EXISTS (SELECT * FROM sys.servers WHERE name = @SrvName) 
BEGIN 
    IF (LEN(@LinkedServerName) > 0) 
    BEGIN 
     SET @SQL = 'EXECUTE master.dbo.sp_addlinkedserver @server = N''' + @LinkedServerName + ''',@provider=''SQLOLEDB'', @srvproduct=N'''', @datasrc=N''' + @Instance + '''' 
    END 
    ELSE 
    BEGIN 
     SET @SQL = 'EXECUTE master.dbo.sp_addlinkedserver @server = N''' + @Instance + ''', @srvproduct=N''SQL Server''' 
    END 
    SET @SQL = @SQL + CHAR(13) + 'EXECUTE master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N''' + @SrvName + ''',@useself=N''False'',@rmtuser=''' + @user + ''', @rmtpassword=''' + @password + '''' 
END 
ELSE 
BEGIN 
    PRINT 'Linked Server Exists' 
END 

PRINT @SQL 

IF (@AutoExecute = 1) 
BEGIN 
    BEGIN TRY 
     EXECUTE (@SQL) 
     PRINT 'Executed Successfully' 
    END TRY 
    BEGIN CATCH 
     PRINT 'Failed To Execute' 
     ;THROW 
    END CATCH 
END