Gestisci i server collegati

Questa pagina fornisce informazioni su come gestire i server collegati sull'istanza Cloud SQL, tra cui la registrazione di un'istanza, l'aggiunta di un server collegato e l'esecuzione di query su un server collegato.

Registra l'istanza per consentire i server collegati

Per aggiungere il flag cloudsql enable linked servers alla tua istanza, utilizza il seguente comando:

gcloud sql instances patch INSTANCE_NAME --database-flags="cloudsql enable linked servers"=on

Sostituisci INSTANCE_NAME con il nome dell'istanza che vuoi utilizzare per collegare i server.

Per ulteriori informazioni, consulta la pagina relativa alla configurazione dei flag del database.

Aggiungi un server collegato

Per aggiungere un server collegato, esegui il comando sp_addlinkedserver Transact-SQL:

EXEC master.dbo.sp_addlinkedserver
    @server = N'LINKED_SERVER_NAME',
    @srvproduct=N'',
    @provider=N'SQLNCLI',
    @datasrc=N'TARGET_SERVER_ID'

Sostituisci quanto segue:

  • LINKED_SERVER_NAME con il nome del server collegato da creare.
  • TARGET_SERVER_ID con il nome di rete, il nome DNS o l'indirizzo IP del server collegato. Per il nome dell'istanza, utilizza il formato servername\instancename. Se l'istanza utilizza una porta non standard, aggiungi il numero di porta. Ad esempio: servername\instancename, 8080.

Per aggiungere la mappatura di un utente che ha eseguito l'accesso, esegui questo comando:

EXEC master.dbo.sp_addlinkedsrvlogin
    @rmtsrvname=N'LINKED_SERVER_NAME',
    @useself=N'True'

Sostituisci LINKED_SERVER_NAME con il nome del server collegato.

Per creare o aggiornare l'accesso remoto e la password predefiniti e applicarli a tutti gli accessi locali, esegui questo comando:

EXEC master.dbo.sp_addlinkedsrvlogin
    @rmtsrvname=N'LINKED_SERVER_NAME',
    @useself=N'False',
    @locallogin=N'LOGIN',
    @rmtuser=N'USER_ID',
    @rmtpassword='PASSWORD';

Sostituisci quanto segue:

  • LINKED_SERVER_NAME con il nome del server collegato.
  • LOGIN con l'accesso per il server locale. locallogin è sysname, con il valore predefinito NULL. NULL specifica che questa voce si applica a tutti gli accessi locali che si connettono a rmtsrvname. Se non è NULL, locallogin corrisponde a un accesso a SQL Server o a Windows. Se utilizzi un accesso Windows, questo deve avere accesso a SQL Server direttamente o tramite la sua appartenenza a un gruppo Windows che dispone dell'accesso.
  • USER_ID con l'utente che ha eseguito l'accesso.
  • PASSWORD con la password dell'utente.

Aggiungi un server collegato con una connessione criptata

Per aggiungere un server collegato utilizzando una connessione criptata, esegui il comando Transact-SQL sp_addlinkedserver:

EXEC master.dbo.sp_addlinkedserver
    @server = N'LINKED_SERVER_NAME',
    @srvproduct=N'',
    @provider=N'SQLNCLI',
    @datasrc=N'TARGET_SERVER_ID,
    @provstr=N'Encrypt=yes;'

Sostituisci quanto segue:

  • LINKED_SERVER_NAME con il nome del server collegato da creare.
  • TARGET_SERVER_ID con il nome del server di destinazione o l'indirizzo IP e il numero di porta del server di destinazione.

Se il nome del server è diverso da quello nel certificato, devi indicare che SQL Server può considerare attendibile il certificato del server. Per aggiornare la stringa del provider, esegui questo comando:

EXEC master.dbo.sp_addlinkedserver
    @server = N'LINKED_SERVER_NAME',
    @srvproduct=N'',
    @provider=N'SQLNCLI',
    @datasrc=N'TARGET_SERVER_ID,
    @provstr=N'Encrypt=yes;TrustServerCertificate=yes;'

Sostituisci quanto segue:

  • LINKED_SERVER_NAME con il nome del server collegato da creare.
  • TARGET_SERVER_ID con il nome del server di destinazione o l'indirizzo IP e il numero di porta del server di destinazione.

Query server collegate

Cloud SQL supporta l'utilizzo di nomi in quattro parti per eseguire query sui server collegati (nome server, nome del database, nome dello schema e nome dell'oggetto), oltre ai seguenti comandi:

  • OPENQUERY esegue una query su un server specificato.
  • EXECUTE ti consente di eseguire SQL dinamico su un server collegato.

Per ulteriori informazioni, consulta Confrontare le opzioni di esecuzione remoti delle query.

Attiva chiamate di procedura remota su un server collegato

Le chiamate di procedure remote (RPC) consentono di eseguire stored procedure sui server collegati. Per aggiungere RPC, esegui il comando Transact-SQL sp_serveroption con un argomento RPC. Esistono due argomenti RPC:

  • rpc abilita l'RPC dal server specificato.
  • rpc out abilita l'RPC per il server specificato.

Utilizza il seguente comando sp_serveroption con l'argomento rpc per abilitare l'RPC da LINKED_SERVER_NAME:

EXEC sp_serveroption
    @server='LINKED_SERVER_NAME',
    @optname='rpc',
    @optvalue='TRUE'

Sostituisci LINKED_SERVER_NAME con il nome del server collegato.

Utilizza il seguente comando sp_serveroption con l'argomento rpc out per abilitare l'RPC:

EXEC sp_serveroption
    @server='LINKED_SERVER_NAME',
    @optname='rpc out',
    @optvalue='TRUE'

Sostituisci LINKED_SERVER_NAME con il nome del server collegato.

Rimuovi la mappatura degli utenti per un server collegato

Per rimuovere una mappatura utente aggiunta in precedenza, esegui questo comando:

EXEC master.dbo.sp_droplinkedsrvlogin
    @rmtsrvname=N'LINKED_SERVER_NAME',
    @locallogin=N'LOGIN';

Sostituisci quanto segue:

  • LINKED_SERVER_NAME con il nome del server collegato da rilasciare.
  • LOGIN con l'accesso per il server locale. locallogin è sysname, con il valore predefinito NULL. NULL specifica che questa voce si applica a tutti gli accessi locali che si connettono a rmtsrvname. Se non è NULL, locallogin corrisponde a un accesso a SQL Server o a Windows. Se utilizzi un accesso Windows, questo deve avere accesso a SQL Server direttamente o tramite la sua appartenenza a un gruppo Windows che dispone dell'accesso.

Rimuovi un'istanza registrata per impedire l'autorizzazione dei server collegati

Per rimuovere i server collegati:

  • Elimina i server collegati esistenti con la stored procedure sp_dropserver di Transact-SQL.
  • Rimuovi il flag cloudsql enable linked servers per rimuovere un'istanza registrata.

    gcloud sql instances patch INSTANCE_NAME --database-flags="cloudsql enable linked servers"=off
    

    Sostituisci INSTANCE_NAME con il nome dell'istanza da cui vuoi rimuovere i server collegati.

    In alternativa, puoi eseguire il comando seguente per cancellare tutti i flag di database:

    gcloud sql instances patch INSTANCE_NAME --clear-database-flags
    

    Sostituisci INSTANCE_NAME con il nome dell'istanza da cui vuoi rimuovere i server collegati.

Risolvere i problemi

Messaggio di errore Risoluzione dei problemi
Msg 7411, Level 16, State 1, Line 25

Server 'LINKED_SERVER_NAME' is not configured for DATA ACCESS.
L'opzione DataAccess è disattivata. Esegui questo comando per abilitare l'accesso ai dati:

EXEC sp_serveroption
    @server='LINKED_SERVER_NAME',
    @optname='data access',
    @optvalue='TRUE'

Sostituisci LINKED_SERVER_NAME con il nome del server collegato.

Access to the remote server is denied because no login-mapping exists. (Microsoft SQL Server, Error: 7416) Se il problema si verifica quando stabilisci una connessione criptata, devi provare un altro metodo per fornire l'ID utente quando accedi al server collegato. Per farlo, esegui questo comando:

EXEC master.dbo.sp_addlinkedserver
   @server = N'LINKED_SERVER_NAME',
   @srvproduct= N'',
   @provider= N'SQLNCLI',
   @datasrc= N'TARGET_SERVER_ID',
   @provstr= N'Encrypt=yes;TrustServerCertificate=yes;User ID=USER_ID'

Sostituisci quanto segue:

  • LINKED_SERVER_NAME con il nome del server collegato.
  • TARGET_SERVER_ID con il nome del server di destinazione o l'indirizzo IP e il numero di porta del server di destinazione.
  • USER_ID con l'utente che ha eseguito l'accesso.

Passaggi successivi